====== PC Primtux et serveur SAMBA (chantier)====== * Objet : Partage des données avec un serveur Samba depuis des PC Primtux * Niveau requis : {{tag>avisé}} * Commentaires : // assurer le montage automatique de ressources partagées depuis un serveur local samba lors de la connexion de l'utilisateur suivant le critère "MaClasse". // * Suivi : {{tag>en-chantier à-actualiser}} * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=22499| Lien vers le forum df concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) ===== Introduction ===== ==== objectif ==== Assurer le montage de ressources partagées depuis un serveur local [[doc:reseau:samba|samba]] lors de la connexion de l'utilisateur suivant le critère "MaClasse". ==== contraintes ==== Rappelons qu'à l'opposé d'une distribution du type Debian-EDU, SkoleLInux, seuls 4 utilisateurs (on dira plutôt des profils) sont définis. Cette distribution propose la mise à disposition d'applications éducatives libres au sein d'une classe, chaque machine restant indépendante. Dans une école, les ordinateurs peuvent même être à la disposition de plusieurs classes. \\ Sans atteindre le niveau individuel, comment partager exercices, documents.... entre élèves et professeur d'une classe. ==== principe ==== lightdm assure la connexion d'un profil utilisateur de PrimTux sans mot de passe)(mini, maxi, super)) avec identification mot de passe pour l'administrateur. Adapté à PrimTux, lightdm utilise un greeter spécifique, lightdm-webkit-greeter \\ (icônes pour chacun des utilisateurs standard mini,maxi,super, administrateur, avec image d'arrière-plan). Cependant, dès la connexion, nous souhaitons avoir l'accès à des dossiers partagés Samba suivant un critère d'appartenance à une classe. Ces partages doivent pouvoir être utilisés sous PrimTux mais aussi sous Windows. En effet, PrimTux a simplifié l'utilisation et la configuration des applications suivant des critères d'âge, mais nous souhaitons qu'enseignants et élèves puissent partager des données suivant leur appartenance à une classe. Pour Windows, seuls les enseignants auront besoin d'utiliser telle ou telle ressource. Ils devront utiliser les fonctionnalités de base. Nous avons donc défini 2 groupes de partage : - partage commun : toutes données communes sans droits particuliers, l'objectif par exemple étant la récupération de documents scannés depuis le copieur de l'école. \\ Ce partage est identifié "**forum**". - partage pour une classe : professeur et élèves d'une classe déposeront ou récupéreront dans ce partage les documents (exercices, documents..) de leur classe. \\ Ce partage est identifié "**MaClasse**". Afin de simplifier l'accès à ces ressources, nous monterons dans le système de fichiers les partages concernés par CIFS dès la connexion. Les partages seront démontés automatiquement à la déconnexion. - Le montage du **forum** sera donc prédéfini dans le fichier [[doc:systeme:fstab|/etc/fstab]] et monté dès la connexion de l'utilisateur. - Le montage de **MaClasse** sera lui réalisé par un mount -t cifs utilisé par l'utilisateur root au moment de la connexion de l'utilisateur. ===== Installation ===== ==== Définition des partages ==== On va donc utiliser les 2 types de partage: * **[forum]** partage d'un dossier particulier du serveur, le nom est donné dans le fichier de configuration sur le serveur. * **[homes]** partage le dossier HOME de l'utilisateur **ATTENTION**, c'est le dossier home d'un utilisateur du serveur, non pas de la machine cliente. Ce dossier sera donc celui d'une classe. Nous identifierons toutes les classes de l'école et les désignerons comme étant des utilisateurs du serveur. \\ Par exemple : cp, ce1, ce2, ou même Nicole-maitresse-cm2 peu importe, désigner un nom de classe sera plus "//portable//". Pour être plus visible au niveau de la fenêtre de session, on rajoute une session publique qui sera la session par défaut. Donc nous décrirons ainsi le partage **forum** à monter sur le système de fichiers des machines PrimTux dans /etc/fstab .. .. //10.0.0.1/forum /home/forum cifs _netdev,users,noauto,users,file_mode=0666,dir_mode=0777,credentials=/etc/samba/.credentials/forum 0 0 .. Il sera monté dans le système de fichiers avec la commande mount /home/forum le montage du partage **MaClasse** se fera dans le setup de lightdm sur le principe suivant : mount -t cifs //SRV/homes /home/MaClasse -o \ rw,\ vers=2.1,\ domain=WORKFLOW,\ user=$SESSION_USER,\ password=$SESSION_USER,\ uid=$(id -u $USER),forceuid,\ gid=$(id -g $USER),forcegid,\ file_mode=0775,dir_mode=0775 ==== configuration du serveur Samba ==== [global] workgroup = WORKGROUP netbios name = SRV dns proxy = no server string = %h SAMBA # nom du serveur samba # interfaces = 10.0.0.1 enp5s0 log file = /var/log/samba/log.%m max log size = 1000 log level = 1 panic action = /usr/share/samba/panic-action %d server role = standalone server passdb backend = tdbsam obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . pam password change = yes map to guest = bad user usershare allow guests = yes [homes] comment = Home Directories browseable = yes read only = no create mask = 0700 directory mask = 0700 valid users = %S [forum] comment = tout public path = /home/forum/ browsable =yes create mask = 0666 directory mask = 0777 writable = yes guest ok = yes # force user = nobody # force group = nobody ;[printers] ; comment = All Printers ; browseable = yes ; path = /var/spool/samba ; printable = yes ; guest ok = no ; read only = yes ; create mask = 0700 ;[print$] ; comment = Printer Drivers ; path = /var/lib/samba/printers ; browseable = yes ; read only = yes ; guest ok = no ''' Sur le serveur SAMBA, * il faut créer le dossier pour le partage **forum** mkdir /home/forum * il faut créer le dossier des "**pseudos utilisateurs**" qui partageront leur home directory (on désigne un dossier particulier pour l'ensemble de ceux-ci), et créer ces pseudos-utilisateurs mkdir /home/classes groupadd classes useradd -b /home/classes -G classes -N -s /usr/sbin/nologin -d /home/classes/ -m exemple: useradd -b /home/classes -G classes -N -s /usr/sbin/nologin -d /home/classes/cp -m cp On affecte un mot de passe pour le partage samba : root@srv:/home/administrateur# smbpasswd -a New SMB password: Retype new SMB password: Notez ce mot de passe, il devra être reporté dans '' /etc/lightdm/session/session-setup.sh'' des postes PrimTux. **Attention** le script prend en guise de mot de passe le nom de la classe, penser à adapter le script si vous choisissez une autre solution ==== configuration du pc primtux ==== === lightdm connexion === Rappelons que les machines PrimTux sont "mono-utilisateur", **1 seul utilisateur sur 1 seule machine à la fois**. Nous monterons donc les ressources partagées (suivant une information donnée par l'utilisateur d'appartenance à telle ou telle classe) avec lightdm à la connexion de l'utilisateur. Pour cela Lightdm dispose de 2 paramètres définissant des scripts exécutés par root: * session-setup-script * session-cleanup-script Nous utilisons alors ces scripts pour monter et démonter nos partages :\\ ''/etc/lightdm/session/session-setup.sh'' à la connexion \\ ''/etc/lightdm/session/session-cleanup.sh'' à la déconnexion \\ == Adapter l'écran de connexion de PrimTux == PrimTux propose une interface de connexion simplifiée pour les enfants : 4 images permettent de choisir l'utilisateur parmi mini, maxi, super et administrateur (le maître), et quelques boutons sont disponibles pour contrôler le PC parmi "Arrêter, Hiberner, Veille, Redémarrer". Il manque une liste pour la sélection de l'appartenance de l'utilisateur à telle ou telle classe. \\ Nous allons donc rajouter dans l'interface de connexion ce choix avec le sélecteur de session habituel. Commençons par ajouter les différentes sessions souhaitées. == Créer les sessions spécifiques par classe == Il n'est prédéfini qu'une seule session "fluxbox",donc pour différencier les classes nous dupliquons simplement la session existante sous d'autres noms correspondant aux critères d'organisation (pour l'exemple j'ai choisi une différenciation par niveau classe). cp /usr/share/xsessions/fluxbox.desktop /usr/share/xsessions/fluxbox-cp.desktop cp /usr/share/xsessions/fluxbox.desktop /usr/share/xsessions/fluxbox-ce1.desktop ... cp /usr/share/xsessions/fluxbox.desktop /usr/share/xsessions/fluxbox-cm2.desktop cp /usr/share/xsessions/fluxbox.desktop /usr/share/xsessions/fluxbox-bonjour.desktop (On pourrait imaginer une organisation avec le nom des professeurs ou tout autre choix). Pour éviter d'avoir à recopier et modifier de multiples fois les chemins et noms des fichiers, avec les risques d'erreurs que cela comporte, on peut effectuer cette opération de manière plus concise grâce à l'expansion d'accolades : for f in /usr/share/xsessions/fluxbox-{cp,ce1,cm2,bonjour}.desktop ; do cp /usr/share/xsessions/fluxbox.desktop $f ; done Ensuite on va modifier, pour chaque nouvelle session créée, le paramètre **Name**=fluxbox avec le texte qui apparaîtra dans le sélecteur **Name**=//Classe de CP// pour fluxbox-cp.desktop, et ainsi de suite... == Modifier l'interface de connexion == Nous allons maintenant rajouter dans l'interface de connexion la liste déroulante du choix des différentes sessions que nous venons de créer. La présentation de l'écran de connexion de [[:doc:environnements:x11:lightdm|LightDm]] (dénommé greeter) est lightdm-webkit-greeter. Elle est configurable à l'aide de thèmes. PrimTux a été dessinée autour du thème pretty, nous allons donc retoucher le fichier **/usr/share/lightdm-webkit/themes/pretty/index.html** pour ajouter le "session selector" cf: https://askubuntu.com/questions/414344/how-to-add-a-session-type-button-to-lightdm-webkit-greeter-theme
Erreur
Nous avons donc ajouté le sélecteur de session en haut à gauche de la page de connexion. == Créer les scripts de session de lightdm == Les scripts sont identifiés dans la configuration de lightdm par les paramètres : * session-setup-script= * session-cleanup-script= Ils sont exécutés en tant que root à la connexion et à la déconnexion de l'utilisateur. \\ On les créera dans le dossier /etc/lightdm/session/ Configuration de lightdm [Seat:*] greeter-session=lightdm-gtk-greeter greeter-hide-users=false user-session=fluxbox #####display-setup-script=/root/45x11-custom-xrandr-settings session-setup-script=/etc/lightdm/session/session-setup.sh session-cleanup-script=/etc/lightdm/session/session-cleanup.sh Le script reçoit, dans son environnement, diverses variables : DISPLAY=:0 USER=administrateur PWD=/ HOME=/home/administrateur SHELL=/bin/sh SHLVL=1 LOGNAME=administrateur XAUTHORITY=/var/run/lightdm/root/:0 PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games _=/usr/bin/env mais le nom de session n'y est pas présent, il doit être récupéré dans le fichier '' .dmrc'' du répertoire HOME de l'utilisateur : [Desktop] Language=fr_FR.utf8 Session=fluxbox-ce1 On devra fournir les mots de passe des montages à réaliser dans ce script, ces mots de passe sont ceux qui ont été définis dans le chapitre : \\ " configuration du serveur Samba " ci-dessus. #!/bin/bash # session-setup.sh #/root/45x11-custom-xrandr-settings echo $* >/root/session env >>/root/session cat < /dev/null username=sharing password=tuxprof domain=WORKGROUP EOF mount /home/forum SESSION=$(grep Session $HOME/.dmrc) SESSION_LIGHTDM=${SESSION#Session=} SESSION_USER=${SESSION_LIGHTDM##*-} # prévoir une test de connectivité, sinon il sera impossible de démarrer la session en cas d'erreur ping -W 2 -c 2 srv.ecole.pdc >/dev/null if [ $? -eq 0 ]; then mount /home/forum mount -t cifs //SRV/homes /home/MaClasse -o rw,vers=2.1,domain=WORKFLOW,user=$SESSION_USER,password=$SESSION_USER,uid=$(id -u $USER),forceuid,gid=$(id -g $USER),forcegid,file_mode=0775,dir_mode=0775 else echo "no network" >>/root/session fi # ignore les erreurs de réseau exit 0 #!/bin/bash # session-cleanup.sh # prls -emier test demonter dossiers partagés /home/MaClasse umount /home/MaClasse umount /home/forum rm /etc/samba/.credentials/* ===== Utilisation ===== Nous retrouvons donc le sélecteur de session en haut à gauche de la page de connexion {{/file-Rdd250454507c6931c0e755ac0ba8f905.png?450}} Il suffit à l'utilisateur de choisir la session correspondant à sa classe, puis de se connecter. On peut prédéfinir un choix dans le fichier /etc/lightdm.conf (le nom du fichier de session dans /usr/share/xsessions/ sans l'extension .desktop). [Seat:*] ... user-session=fluxbox-cp ... ==== Petites facilités pour l'utilisateur ==== Créer les points de montage sur chaque PC PrimTux : mkdir /home/forum chmod 777 /home/forum mkdir /home/MaClasse Ajouter un dossier vide qui apparaîtra dans le navigateur de fichiers si le montage n'a pas réussi : mkdir /home/forum/Pas_Disponible mkdir /home/MaClasse/Pas_Fisponible Ajouter des liens symboliques dans les dossiers documents des utilisateurs : ln -sf /home/forum /home/01-mini/Documents/forum ln -sf /home/forum /home/02-maxi/Documents/forum ln -sf /home/forum /home/03-super/Documents/forum ln -sf /home/forum /home/administrateur/Documents/forum ln -sf /home/MaClasse /home/01-mini/Documents/MaClasse ln -sf /home/MaClasse /home/02-maxi/Documents/MaClasse ln -sf /home/MaClasse /home/03-super/Documents/MaClasse ln -sf /home/MaClasse /home/administrateur/Documents/MaClasse ==== Suppression de documents dans le forum ==== {{/file-R241b58c481aa03a2fe6136058c170336.png?450}} Par défaut, la suppression d'un fichier depuis le navigateur de fichiers **PCManFM**, consiste à déplacer ce fichier à la Corbeille. Ainsi lors de la suppression d'un fichier, PCManFM tente de créer un dossier .Trash-xxxx dans le dossier partagé pour y déplacer le fichier concerné. Bien qu'il soit tout à fait possible de créer un tel dossier, PCManFM n'arrive pas à le créer ????? --BUG--. Pour éviter cet écueil, il faut donc modifier le comportement en effectuant une suppression immédiate depuis menu --> Édition --> Préférences. décocher : [ ] Mettre les fichiers supprimés à la "Corbeille" au lieu de les effacer du disque. {{/file-Rb5497a615b39b5fc5ae09c0c38c55000.png?450}}