Outils pour utilisateurs

Outils du site


commun_utilisateur

Créer un répertoire commun pour les utilisateurs

[testé sur l'opensuse 10.2 et la debian etch]

Objectif

Nous voulons créer un répertoire que tous les utilisateurs auront en commun, non seulement pour créer et modifier leurs propres fichiers, mais aussi pour modifier les fichiers des autres utilisateurs.

Pour ceux qui connaissent Windows, cela correspond à la configuration par défaut des “documents partagés” (“SharedDocs”).

Probléme

C'est une préoccupation élémentaire à laquelle, curieusement, il n'est pas facile de répondre.

Vous vous dites: “facile, il suffit de créer un répertoire /home/partage avec des droits rwxrwxrwx (ou 777), et c'est fait!”

Et bien non: dans ce cas, chaque utilisateur ne pourrait pas modifier les documents créés par les autres utilisateurs, parce qu'ils seraient créés avec eux comme propriétaire, et des droits “rw-r–r–” (=droits correspondant au “umask” par défaut)!

Solution avec les ACL

La solution la plus performante utilise les “ACL” (Access Control Lists), qui sont des droits étendus linux.

Références pour les ACL

  • pages man de acl, setfacl, getfacl (si, bien sûr, le paquet acl est installé!)

Disposez-vous des ACL ?

Même si le paquet “acl” n'est pas encore installé, votre noyau doit avoir les fonctions acl activées.

Pour savoir si vous disposez des fonctions ACL dans votre noyau, faites (en console sous root):

# cat /boot/config-`uname -r` | grep _ACL

La réponse sera du genre (exemple de l'opensuse 10.2):

CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_JFFS2_FS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_GENERIC_ACL=y

Si vous avez, comme ici, “CONFIG_FS_POSIX_ACL=y”, c'est OK pour vous.

Ensuite, vous regardez si le formatage que vous avez est concerné. Par exemple pour ext3: “CONFIG_EXT3_FS_POSIX_ACL=y”

Si vous n'avez pas les fonctions ACL activées dans votre noyau (c'est dommage!), vous pouvez le recompiler pour les activer, ou utiliser la dernière solution de cette page (“sans ACL”).

Mode opératoire

On créé le répertoire à partager entre tous les utilisateurs, par exemple, /home/partage. Ce répertoire “partage” peut être n'importe où ailleurs que dans /home. L'avantage de ce choix, c'est que si votre /home est dans une partition séparée, le sous-répertoire “partage” s'y trouvera aussi (ce sont tout de même des données d'utilisateurs!). Bien sûr, le choix de /home/partage vous interdit d'avoir un utilisateur appelé “partage”…:-D

# mkdir /home/partage

On le fait appartenir à root:users avec un droit “rwxrwxr-x”.

# chown root:users /home/partage
# chmod 775 /home/partage

On pourrait d'ailleurs interdire l'accès aux non-users par un chmod 770 au lieu de 775.

Il faut vérifier que tous les utilisateurs font partie du groupe “users”, et les y mettre s'ils n'y sont pas. Il n'est pas nécessaire que ce groupe soit le groupe principal. Mais si on veut que chaque nouvel utilisateur soit créé avec “users” comme groupe principal, il suffit de mettre “USERGROUPS=no” dans le fichier /etc/adduser.conf.

On installe ensuite le paquet “acl” (par synaptic, apt-get, …)

Dans le fichier fstab, on ajoute “acl” aux options de montage de la partition concernée (ou de toutes, si ça marche avec les formatages linux que vous avez). Par exemple, si /home/partage fait partie d'une partition séparée /home (vous ajustez en fonction de votre config!):

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

Ensuite ⇒ prise en compte par reboot (ou remontage par “mount -o remount,acl /home”, mais je n'ai pas essayé).

Configuration des acl pour le répertoire partagé:

# setfacl -m d:g:users:rwX  /home/partage

Commentaires sur cette commande:

  • -m ⇒ modifier les acl. Si le répertoire /home/partage a déjà des données, on remplace “-m” par “-Rm” qui va appliquer ces règles ACL à tous les fichiers et sous-répertoires de façon récursive.
  • d: ⇒ “default” = c'est ce qui permettra aux membres du groupe users de créer des fichiers “rw-rw-r–” (et pas “rw-r–r–” comme le demanderait le umask de /etc/profile), ce qui permettra à chaque utilisateur de pouvoir modifier les fichiers créés par les autres utilisateurs.
  • g:users ⇒ groupe = “users”
  • rwX ⇒ droits à mettre. le “X” majuscule veut dire que “x” ne sera mis que pour les répertoires (les simples fichiers n'auront que “rw-”).

Après cette commande, on peut vérifier la configuration par:

# getfacl /home/partage

Ce qui donnera comme sortie:

# file: home/partage
# owner: root
# group: users
user::rwx
group::rwx
group:users:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:users:rwx
default:mask::rwx
default:other::r-x

A partir de là:

  • a)- tout fichier créé par un utilisateur dans /home/partage aura comme droit: rw-rw-r–. Ce fichier sera donc modifiable par tous les utilisateurs (groupe “users”) et seulement par eux.
  • b)- tout répertoire créé par un utilisateur dans /home/partage aura comme droit: rwxrwxr-x. Ce répertoire sera donc modifiable par tous les utilisateurs (groupe users) et seulement par eux.
  • c)- à l'intérieur de ce sous-répertoire ainsi créé, l'effet décrit en “a)-” sera vrai aussi!
  • d)- à l'extérieur de /home/partage, rien n'a changé: tout fichier créé le sera donc avec le umask prévu dans /etc/profile (en général “rw-r–r–” pour les fichiers et “rwxr-xr-x” pour les répertoires).


Et voilà : dans /home/partage (et seulement là), tous les utilisateurs (et seulement eux), peuvent non seulement créer et modifier leurs fichiers, mais aussi modifier les fichiers créés par les autres utilisateurs.

Autre solution sans les ACL

Voilà une autre solution (moins bonne) sans les ACL:

1- création d'un répertoire “/home/partage” (root:users-775) destiné aux fichiers que les utilisateurs mettront en commun.

2- faire en sorte que tous les utilisateurs concernés aient comme groupe principal le même groupe: “users”. C'est le cas par defaut pour l'opensuse, mais pas pour la debian etch. Pour celle-ci, on pourrait d'ailleurs vouloir qu'à la création de nouveaux utilisateurs, le groupe principal soit par défaut “users” (mettre “USERGROUPS=no” dans le fichier /etc/adduser.conf).

3- faire en sorte que le umask par défaut soit “002” et non “022”. Cela se modifie dans le fichier /etc/profile. Cela donnera les droits par défaut à la création des fichiers: on donne donc ici le droit d'écriture au groupe et pas seulement au propriétaire.

Pour la prise en compte des points 2 et 3, j'ai rebooté (il doit y avoir des méthodes plus subtiles).

A partir de ce moment, tout utilisateur “user1” qui créé un fichier dans /home/partage (et ailleurs!) va le créer avec un propriétaire “user1:users” et un droit “rw-rw-r–” ou 664 (et 775 pour un répertoire). Tout utilisateur pourra donc modifier les fichiers créés par les autres utilisateurs.

Pour assurer tout de même la sécurité et l'intimité de chacun, il faut ajouter une protection dans la debian (elle est déjà placée dans l'opensuse): qu'il y ait pour chaque utilisateur un répertoire comme /home/user1/documents dans lequel se trouvent tous les docs perso, répertoire qui appartiendra à user1:users avec un droit “rwx——” (700), c'est à dire qui empêchera les autres utilisateurs d'accéder au contenu.


Voilà, c'est fait: amusez-vous bien!

commun_utilisateur.txt · Dernière modification: 2007/12/15 09:28 par tyrtamos

Outils de la page