Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
tutoriel:dossier_de_partage [Le 30/10/2025, 18:58]
geole [Limitation de cette méthode de partage] Prise en compte des contraintes SNAP
tutoriel:dossier_de_partage [Le 31/10/2025, 15:12] (Version actuelle)
geole [Utiliser bindfs]
Ligne 1: Ligne 1:
 +{{tag>​tutoriel administration partage droits}}
  
 +====== Comment partager un dossier entre plusieurs utilisateurs d'un même ordinateur ? ======
 +
 +<note help>​**Partage local versus partage réseau**
 +
 +Le présent document traite d'une manière de partager un dossier d'un seul ordinateur entre plusieurs utilisateurs de cet ordinateur. Il ne traite pas du partage de données entre plusieurs ordinateurs d'un même réseau local. Pour plus d'​informations à propos du partage sur un réseau local, consultez la page dédiée au [[:​partage|partage sur réseau]].</​note>​
 +
 +Dans un environnement multi-utilisateur,​ il est parfois intéressant de disposer d'un répertoire auquel tous peuvent accéder. Ainsi, tous les utilisateurs peuvent lire les fichiers contenus dans ce dossier, ainsi qu'y déposer des fichiers à partager avec les autres utilisateurs de l'​ordinateur. Comment parvenir à ce résultat ?
 +
 +Le présent document vous expose une manière de créer un dossier partagé entre plusieurs comptes d'un même ordinateur.
 +
 +===== Postulat =====
 +
 +{{  dossierpartage-usersadmin.png?​550}}
 +
 +Afin d'​expliquer la procédure, nous la décrirons à l'aide d'un cas pratique. Voici les spécifications de notre exemple :
 +  * Trois comptes d'​utilisateurs existent dans le système Ubuntu :
 +    * John (identifiant du compte : ''​john''​) ; John est le compte habilité à effectuer des [[:​sudo|tâches administratives]].
 +    * Mary (identifiant du compte : ''​mary''​)
 +    * Rick (identifiant du compte : ''​rick''​)
 +  * Le dossier à partager est ''/​media/​Partage/''​.
 +  * John et Mary doivent pouvoir :
 +    * afficher le contenu du dossier et lire tous les fichiers qu'il contient,
 +    * y écrire des nouveaux fichiers,
 +    * modifier les fichiers qui sont placés dans ce dossier.
 +  * Rick ne doit pouvoir ni accéder aux fichiers de ce dossier de partage, ni lister le contenu du dossier.
 +
 +===== La procédure, sans explication =====
 +
 +Afin que cette procédure soit valable pour [[:​variantes|l'​ensemble des variantes de la distribution Ubuntu]], nous effectuerons toute la procédure en mode console. Cette procédure doit être exécutée depuis le compte de John, puisqu'​il est le seul à pouvoir accomplir des tâches administratives. Toutes les commandes ont été rassemblées en groupes afin de correspondre aux étapes de la description,​ ci-dessous.
 +
 +<​code>​john@ordinateur:​~$ sudo -s
 +[sudo] password for john:     ​(entrez le mot de passe de John)
 +root@ordinateur:​~#​ addgroup partageurs
 +root@ordinateur:​~#​ adduser john partageurs
 +root@ordinateur:​~#​ adduser mary partageurs
 +
 +root@ordinateur:​~#​ echo "umask 0002" >> /​etc/​profile
 +
 +root@ordinateur:​~#​ mkdir /​home/​Partage
 +root@ordinateur:​~#​ chgrp -R partageurs /​home/​Partage
 +root@ordinateur:​~#​ chmod -R g+rwX,o-rwx /​home/​Partage
 +root@ordinateur:​~#​ chmod -R g+s /​home/​Partage
 +root@ordinateur:​~#​ exit
 +exit
 +john@ordinateur:​~$</​code>​
 +Une fois cette procédure complétée,​ John et Mary doivent se déconnecter de leur session actuelle. Leur appartenance au groupe ''​partageurs''​ ainsi que leur nouveau masque utilisateur ne sont considérés qu'à la prochaine ouverture de session.
 +
 +===== La procédure, avec explications =====
 +
 +==== Création d'un groupe de partage et ajout des utilisateurs concernés au groupe de partage =====
 +
 +La création d'un groupe de partage, l'​ajout d'​utilisateurs à ce groupe, la modification du masque utilisateur et la création du dossier de partage sont des tâches administratives. Elles doivent être accomplies par le compte système (''​root''​). Dans la session de l'​utilisateur ''​john'',​ ouvrons un terminal. Exécutons ensuite la commande suivante, qui nous ouvrira une session en tant que compte système :
 +<​code>​john@ordinateur:​~$ sudo -s
 +[sudo] password for john:     ​(entrez le mot de passe de John)</​code>​
 +
 +La commande ''​[[man>​addgroup]]''​ sert à créer un nouveau groupe d'​utilisateurs. Ce groupe d'​utilisateurs nous servira à identifier les utilisateurs habilités à accéder au dossier de partage : ceux qui feront partie de ce groupe y auront accès, alors que ceux qui n'en font pas partie n'y auront pas accès. Créons un groupe appelé ''​partageurs''​ :
 +<​code>​root@ordinateur:​~#​ addgroup partageurs</​code>​
 +
 +La commande ''​[[man>​adduser]]''​ a deux fonctions : créer un nouveau compte d'​utilisateur ou ajouter un compte d'​utilisateur existant à un groupe d'​utilisateurs existant. Dans le cas de cette procédure, c'est cette deuxième fonction qui nous intéresse. Exécutons une première fois la commande pour ajouter ''​john''​ au groupe ''​partageurs''​. Puis, exécutons la commande une seconde fois pour ajouter ''​mary''​ au groupe ''​partageurs''​.
 +<​code>​root@ordinateur:​~#​ adduser john partageurs
 +root@ordinateur:​~#​ adduser mary partageurs</​code>​
 +Désormais, John et Mary font partie du groupe d'​utilisateurs ''​partageurs''​. Rick n'en fait pas partie ; il ne pourra donc pas accéder au dossier de partage.
 +
 +==== Modification du masque utilisateur par défaut =====
 +
 +Le [[wpfr>​umask|masque utilisateur]] (**umask**) est le paramètre utilisé par le système Ubuntu pour définir les [[:​droits#​les_permissions|permissions]] par défaut des nouveaux fichiers et répertoires lors de leurs créations.
 +
 +Le umask par défaut sur Ubuntu est de ''​0022''​. Les fichiers sont donc créés avec les droits ''​644''​ (''​%%rw-r--r--%%''​),​ et ''​755''​ pour les répertoires.((Voir par exemple un [[https://​www.heuristic42.com/​tools/​unixperms/​|calculateur umask]].)) Seul l'//​utilisateur//​ propriétaire a les droits en écriture sur les données.
 +
 +Le umask peut être défini à différents niveaux (indépendamment pour chaque utilisateur,​ ou pour une session, etc.). Ici, pour tous les utilisateurs,​ il est intéressant de le définir globalement pour tout le système (dans le fichier ''/​etc/​profile''​).
 +
 +Avec un umask à ''​0002'',​ on autorise le //groupe// propriétaire à modifier les données (''​g+w''​) : ''​664''​ (''​%%rw-rw-r--%%''​) pour les fichiers et ''​775''​ pour les répertoires.
 +
 +Modifions donc ainsi le masque utilisateur par défaut du système :
 +<​code>​root@ordinateur:​~#​ echo "umask 0002" >> /​etc/​profile</​code>​
 +
 +<note warning>
 +Par cette modification on réduit légèrement le niveau de sécurité global du système (les données créées sont par défaut accessibles en écriture à leur groupe).
 +Cela n'est probablement pas impactant sur un ordinateur personnel, mais si la machine fournit des services sur Internet par exemple, c'est un élément à considérer.
 +
 +Une solution serait par exemple de ne modifier individuellement le umask que de chaque utilisateur prenant part au partage :
 +<​code>​echo "umask 0002" >> $HOME/​.profile</​code>​
 +</​note>​
 +
 +Pour plus d'​informations sur le sujet, voir [[:​droits#​droits_attribues_automatiquement_aux_fichiers_et_repertoires|UMASK]].
 +
 +
 +==== Création du dossier de partage =====
 +
 +Créons le dossier de partage :
 +<​code>​root@ordinateur:​~#​ mkdir /​media/​Partage</​code>​
 +
 +Attribuons à ce dossier de partage des droits suffisants pour permettre aux membres du groupe ''​partageurs''​ d'​accéder à ce dossier. Pour ce faire, modifions le groupe propriétaire du dossier afin que celui-ci soit ''​partageurs''​ ; ceci s'​effectue à l'aide de la commande ''​[[man>​chgrp]]''​. Puis, attribuons à ce dossier un maximum de permissions aux membres de ''​partageurs''​ et aucune permission pour ceux qui ne sont pas membres de ''​partageurs''​ ; ceci se réalise avec la commande ''​[[man>​chmod]]''​. Nous appliquons ces modifications de manière récursive : les modifications sont aussi appliquées aux possibles fichiers déjà présents dans le dossier.
 +<​code>​root@ordinateur:​~#​ chgrp -R partageurs /​media/​Partage
 +root@ordinateur:​~#​ chmod -R g+rwX,o-rwx /​media/​Partage</​code>​
 +Enfin (et c'est là la partie la plus importante de toute cette procédure),​ attribuons le //GID bit// au groupe propriétaire du dossier de partage. Ce mode attribue automatiquement tout fichier créé dans le dossier de partage au groupe propriétaire du dossier de partage (dans notre cas, ''​partageurs''​). Cette action s'​effectue aussi avec la commande ''​[[man>​chmod]]''​. Tout comme précédemment,​ nous appliquons la modification récursivement :
 +<​code>​root@ordinateur:​~#​ chmod -R g+s /​media/​Partage</​code>​
 +
 +===== Limitation de cette méthode de partage =====
 +
 +Notez toutefois que cette méthode de partage a une limite plutôt dérangeante : les droits suffisants pour le groupe ''​partageurs''​ ne s'​appliquent automatiquement que sur les //​nouveaux//​ fichiers créés dans le dossier de partage. Les fichiers déplacés dans ce dossier conservent leurs propriétaires et leur mode.
 +
 +Par exemple : //John//, //Mary// et //Jenny// travaillent tous les trois sur un même projet d'​étude. Ils doivent partager un même document de travail, ''​Observations.odt'',​ et doivent tous être en mesure de le modifier. John est la personne qui débute les observations ; il est celui qui crée le document ''​Observations.odt''​ original :
 +  * S'il crée le document directement dans le dossier de partage, la propriété de groupe est automatiquement attribuée à ''​partageurs''​. Tous les membres du groupe ''​partageurs''​ pourront lire et modifier le document ;
 +  * S'il crée d'​abord ''​Observations.odt''​ dans son dossier personnel puis le copie dans le dossier de partage, la propriété de groupe est automatiquement attribuée à ''​partageurs''​ pour la copie du document seulement. (La copie de ''​Observations.odt''​ devient alors la copie de travail du groupe.) Tous les membres du groupe ''​partageurs''​ pourront lire et modifier la copie de ''​Observations.odt''​ uniquement ;
 +  * Si John crée d'​abord ''​Observations.odt''​ dans son dossier personnel puis le déplace dans le dossier de partage, la propriété de groupe originale est //​conservée//​. Par défaut, les membres du groupe ''​partageurs''​ auront accès en lecture au fichier ''​Observations.odt'',​ mais ils //ne// pourront //pas// le modifier.
 +
 +Si plusieurs documents sont déplacés malencontreusement dans le dossier de partage, exécutez les deux commandes suivantes, depuis un compte d'​administrateur,​ pour leur attribuer des droits suffisants et la propriété de groupe au groupe d'​utilisateurs ''​partageurs''​ :
 +<​code>​john@ordinateur:​~$ sudo chgrp -R partageurs /​media/​Partage
 +john@ordinateur:​~$ sudo chmod -R g+rwX,o-rwx /​media/​Partage</​code>​
 +
 +Prenez l'​habitude de créer directement vos nouveaux fichiers à partager dans le dossier de partage ou de les y copier.
 +
 +//En utilisant les [[:ACL]], cette limitation disparaît, voir section 6-2 ci-dessous.//​
 +
 +===== Les contournements possibles =====
 +
 +==== Utiliser bindfs ====
 +
 +La commande ''​[[man>​bindfs]]''​ permet de monter un répertoire en imposant les droits. Par exemple pour que tous les fichiers soient en lecture/​écriture pour tous:
 +<​code>​bindfs --perms=o+rw somedir somedir </​code>​
 +[[https://​forum.ubuntu-fr.org/​viewtopic.php?​pid=22831628#​p22831628|Voir un exemple d'​implantation.]]
 +<note important>​Cependant les applications SNAP ne sauront pas franchir cet obstacle. C'est devenu sans grand intérêt.</​note>​
 +
 +==== Utiliser un service système de réparation ====
 +
 +Dans un ordinateur personnel, un seul utilisateur est connecté à la fois, il suffit de lancer un service de rectification lors de chaque connexion utilisateur. \\ [[https://​forum.ubuntu-fr.org/​viewtopic.php?​pid=22831427#​p22831427|Voir un exemple d'​implantation.]]
 +
 +==== Éviter de créer l'​erreur ====
 +
 +Le mode graphique semble ne pas le permettre. Il faut alors penser à lancer immédiatement la commande permettant le partage.
 +<code bash>​chmod -Rv 774 ObjetCopié</​code>​
 +Le plus efficace reste de dupliquer en ligne de commande en utilisant l'​option ''​- -no-preserve=mode''​. ​ Exemple <code bash>cp Essai /​media/​Partage/​Docs_communs/​Essai1
 +cp --no-preserve=mode Essai /​media/​Partage/​Docs_communs/​Essai2
 +ls -l /​media/​Partage/​Docs_communs/​Essai*
 +-rwxr--r-- 1 a partageurs 6 avril  3 14:57 /​media/​Partage/​Docs_communs/​Essai1
 +-rw-rw-r-- 1 a partageurs 6 avril  3 14:57 /​media/​Partage/​Docs_communs/​Essai2</​code>​
 +
 +==== Utiliser les Access Control List ====
 +
 +Voir [[#​utiliser_les_access_control_list1|ci-dessous]] et [[:​tutoriel:​dossier_partage|une autre présentation]] sur le même sujet.
 +
 +===== Aller plus loin... =====
 +
 +==== Créer plusieurs groupes de partage ====
 +
 +Nouveau postulat : vous êtes un enseignant dans une école élémentaire. Dans votre salle de classe, vous disposez d'un seul ordinateur sous Ubuntu dans lequel chacun de vos 20 élèves a un compte d'​utilisateur. Vous lancez un projet : vous séparez la classe en deux équipes. Chacune des équipes doit monter une revue de presse à propos d'un évènement de l'​actualité,​ qu'​elle exposera ensuite à l'​autre moitié de la classe. Chaque élève traite individuellement d'un aspect de ce projet, mais les membres d'une même équipe mettent en commun le fruit de leur travail. Comme vous ne disposez que d'un seul ordinateur dans la classe, les élèves doivent se partager le temps d'​utilisation du poste. Vous désirez donc que chaque élève ait accès à un dossier partagé avec les membres de son équipe, mais ne puisse accéder aux dossiers des autres équipes. Comment accomplir cela ?
 +
 +Pour ce faire, il suffit de créer plusieurs groupes de partage et plusieurs dossiers de partage. Suivez la procédure ci-dessus, en changeant le nom du groupe de partage et le nom du dossier de partage pour chacune des quatre équipes d'​élèves. Par exemple :
 +  * créons un grand répertoire ''​projet''​ à la racine du système de fichiers. Nous créerons des répertoires ''​projet1''​ et ''​projet2''​ dans ce grand dossier ;
 +  * créons deux groupes de partage, //equipe1// à //equipe2// ;
 +  * insérons les élèves dans les bonnes équipes.
 +<​code>​enseignant@ordinateurdeclasse:​~$ sudo -s
 +[sudo] password for enseigant: ​    ​(entrez le mot de passe de l'​enseignant)
 +root@ordinateurdeclasse:​~#​ addgroup equipe1
 +root@ordinateurdeclasse:​~#​ addgroup equipe2
 +
 +root@ordinateurdeclasse:​~#​ adduser simon equipe1
 +root@ordinateurdeclasse:​~#​ adduser helene equipe1
 +root@ordinateurdeclasse:​~#​ adduser romain equipe2
 +root@ordinateurdeclasse:​~#​ adduser rachida equipe2
 +[...]
 +
 +root@ordinateurdeclasse:​~#​ echo "umask 0002" >> /​etc/​profile
 +
 +root@ordinateurdeclasse:​~#​ mkdir /projet
 +root@ordinateurdeclasse:​~#​ mkdir /​projet/​projet1
 +root@ordinateurdeclasse:​~#​ mkdir /​projet/​projet2
 +
 +root@ordinateurdeclasse:​~#​ chgrp equipe1 /​projet/​projet1
 +root@ordinateurdeclasse:​~#​ chmod g+rwX,o-rwx /​projet/​projet1
 +root@ordinateurdeclasse:​~#​ chmod g+s /​projet/​projet1
 +
 +root@ordinateurdeclasse:​~#​ chgrp equipe2 /​projet/​projet2
 +root@ordinateurdeclasse:​~#​ chmod g+rwX,o-rwx /​projet/​projet2
 +root@ordinateurdeclasse:​~#​ chmod g+s /​projet/​projet2
 +
 +root@ordinateurdeclasse:​~#​ exit
 +exit
 +enseignant@ordinateurdeclasse:​~$</​code>​
 +Ainsi, //Simon// et //​Hélène//​ peuvent mettre en commun leur travail, mais ne peuvent voir ce qu'ont réalisé //Romain// et //​Rachida//​. De même, //Romain// et //Rachida// peuvent mettre en commun leur travail, mais n'ont pas accès au projet de //Simon// et //​Hélène//​.
 +
 +==== utiliser les «Access Control List» ====
 +
 +Les [[:​acl|Access Control List]] permettent une gestion très fine des droits d'​utilisateurs et ne nécessitent pas d'​être ''​root''​. Néanmoins la mise en place peut paraître plus ardue.
 +
 +En reprenant l'​exemple cité plus haut, pour une gestion via [[:ACL]] du partage, il suffit de faire :
 +<​code>​
 +john@ordinateur:​~$ sudo -s
 +[sudo] password for john:     ​(entrez le mot de passe de John)
 +root@ordinateur:​~#​ addgroup partageurs
 +root@ordinateur:​~#​ adduser john partageurs
 +root@ordinateur:​~#​ adduser mary partageurs
 +root@ordinateur:​~#​ echo "umask 0002" >> /​etc/​profile
 +root@ordinateur:​~#​ mkdir /​home/​Partage
 +root@ordinateur:​~#​ chown -R $USER:​partageurs /​home/​Partage
 +root@ordinateur:​~#​ chmod -R g+srwX,​o-rwx /​home/​Partage
 +root@ordinateur:​~#​ exit
 +john@ordinateur:​~$</​code>​
 +NOTE : les ''​[[man>​chown]]''​ / ''​[[man>​chmod]]''​ ne sont absolument pas indispensables,​ on peut très bien s'en passer avec les ACL.
 +Vu que le dossier Partage appartient à l'​utilisateur courant, et en restant dans le contexte énoncé au départ on peut se contenter de faire :
 +<​code>​setfacl -Rm default:​user:​mary:​rwx,​user:​mary:​rwx home/​Partage/</​code>​
 +pour autoriser mary uniquement a faire ce qu'​elle veut dans ce dossier et ses sous dossiers .
 +
 +Si on désire mettre à disposition au sein d'un groupe (pour plusieurs utilisateurs donc) on fera une commande de la sorte pour y autoriser le groupe ''​partageurs''​ en lecture écriture exécution :
 +<​code>​setfacl -Rm default:​group:​users:​rwx,​group:​users:​rwx /​home/​Partage/</​code>​
 +
 +Le fait de définir des [[:ACL]] par défaut permet d'​outrepasser la limitation de copie de fichiers, et absolument tout les dossiers et fichiers crées //ou copiés// dans ce répertoire seront accessibles pour ''​mary''​ pour la 1ere commande et pour le groupe ''​users''​ et appartenant tous au groupe ''​users''​ pour le cas de la 2eme commande.
 +
 +lorsqu'​un répertoire ''/''​ est concerné par des [[:ACL]], lorsqu'​on fait un ''​ls''​ dessus, à la fin de l'​énumération des permissions il apparaît un ''​+''​ qui indique que des permissions avancées ([[:ACL]]) sont attribuées.
 +pour les consulter il faut alors faire :
 +<​code>​getfacl /home partage</​code>​
 +par exemple qui retournera alors quelque chose comme :
 +<​code>​drwxr-x---+ ​ 2 john john 4096 mars  27 09:12 </​code>​
 +
 +Pour plus d'​explications sur les [[:ACL]], consultez la page //​[[:​acl|Access Control List : Gestion avancée des droits sous linux]]//.
  • tutoriel/dossier_de_partage.txt
  • Dernière modification: Le 31/10/2025, 15:12
  • par geole