Dossier partagé entre utilisateurs sous Linux

La problématique du jour est de faire un répertoire partagé entre les utilisateurs d’un même ordinateur sous linux.

Permissions Unix, la mauvaise solution

Les permissions Unix sont très performants pour restreindre les accès mais rendent la création d’un répertoire partagé impossible en pratique.

La solution classique serait de créer un groupe qui regroupe les utilisateurs et de faire en sorte que tous les fichiers partagés appartiennent à ce groupe. Ca fonctionne en théorie, mais dans la pratique, les utilisateurs créent/modifient/copient  des fichiers sans vouloir mettre à jour les permission groupes. Et seul le propriétaire du fichier peut modifier la permission de groupe du fichier, ce qui rend la chose ingérable.

Le SGID est également une fausse bonne idée pour propager les droits aux fichiers créés car il ne se propage pas aux fichiers copiés par l’utilisateur vers le dossier partagé.

ACL

La solution élégante et performante passe par les ACL ou Access Control List. Elle permet un contrôle bien plus fin et explicite.

Pour avoir accès aux droits ACL vous devez avoir ajouté l’option à votre /etc/fstab .
Ex :

/dev/hda6 /home ext3 options1,option2,option3,acl 0 0

Une fois fait, remontez le point de montage.

# mount -o remount,acl /home

Assignation des droits ACL

On crée un dossier en root /home/dossier_partage. Personne peut y accéder à part root. Jusqu’ici rien de spécial.

# cd /home
# mkdir dossier_partage
# chmod 770 dossier_partage

On crée un groupe « partage » et on ajoute les utilisateurs à ce groupe.

# addgroup partage
# usermod -a -G partage bob
# usermod -a -G partage alice

On ajoute des droits étendus pour que les membres du groupe « partage » puissent tout faire dans ce dossier. La deuxième ligne fait en sorte que les fichiers nouvellement créés héritent aussi de cette règle ACL.

# setfacl -Rm g:partage:rwX dossier_partage
# setfacl -Rm d:g:partage:rwX dossier_partage

On peut vérifier les droits finaux ainsi :

$ getfacl dossier_partage/

# file: dossier_partage/
# owner: root
# group: root
user::rwx
group::rwx
group:partage:rwx
mask::rwx
other::—
default:user::rwx
default:group::rwx
default:group:partage:rwx
default:mask::rwx
default:other::—

Astuce sécurité

Par défaut, le /home/user des utilisateurs n’est pas privé sous Debian ! Si bien que Alice peut lire les fichier dans /home/bob .

Je vous recommande la lecture de ce document sur comment sécuriser Debian, surtout ces 2 points

  • 4.11.13.1 Limiter l’accès aux informations d’autres utilisateurs
  • 4.11.12 Positionner des umasks aux utilisateurs

Le plus important : Pour tous vos utilisateurs existants, assurez que le dossier home bloque bien l’accès aux autres utilisateurs :

# chmod 750 /home/bob

Ensuite, vous pouvez faire en sorte que soit créé automatiquement comme ça quand vous créez un utilisateur:

# dpkg-reconfigure adduser

et choississez Non

Vous pouvez également faire en sorte que les utilisateurs créént par défaut des fichiers que seuls eux peuvent voir :

# echo session optional pam_umask.so umask=027 >> /etc/pam.d/common-session

Dans /etc/login.defs, changez la valeur à UMASK 027

Pour vérifier les droits de l’utilisateur courant :

$ umask

10 réactions sur “ Dossier partagé entre utilisateurs sous Linux ”

  1. Elessar

    « Une fois fait, redémarrez » : non, c’est inutile, on n’est pas sous Windows, que diable ! Il suffit de faire un :

    mount -o remount,acl /home

  2. Ping Partager dossier | Pearltrees

  3. Feadurn

    Un tout grand merci pour cette astuce :)

  4. jahman

    un grand merci!!!!
    J’ai eu la problématique au taf de créer un repertoire partagé aujourd’hui! j’étais parti sur un cron qui fixe les droits et tu me files LA solution élégante. Chapeau bas :)

  5. philippe

    Bonjour,
    Si je souhaite que le dossier_partage soit seulement lu (pas de possibilité d’écrire ni de supprimer) par le groupe, pourrais-je mettre par exemple le chmod à 740 et le setfacl :
    setfacl -Rm g:partage:r– dossier_partage
    ?
    Quand on dit r– c’est seulement lecture ou bien la copie est possible ?
    Merci par avance.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.