Bit suid ?

J’ai un répertoire partagé /alpha/, appartenant au groupe /toto/ qui un droit d’écriture dessus  :

$ mkdir alpha; chmod g+w alpha; chown .toto alpha
$ stat alpha
Accès : (0750/drwxr-x---)  UID : ( 1000/      jm)   GID : ( 1001/      toto)

Lorsque quelqu’un crée un fichier dedans, comment faire : 1. Pour qu’il appartienne au groupe toto ? 2. Pour que le groupe ait les droits d’écriture sur ce fichier ?

  1. Faire que les nouveaux fichiers du répertoire appartiennent au groupe toto ?

Le bit suid, dans les attributs d’un répertoire, fait que tout fichier créé dans ce répertoire appartiendra à celui qui possède le répertoire, et pas à celui qui crée le fichier. On peut le positionner au niveau de l’utilisateur et/ou du groupe :

$ chmod g+s alpha
$ stat alpha
Accès : (2750/drwxr-s---)  UID : ( 1000/      jm)   GID : ( 1001/      toto)

$ touch alpha/fichier
$ stat alpha/fichier
Accès : (0644/-rw-r--r--)  UID : ( 1000/      jm)   GID : ( 1001/      toto)

NB : le bit suid est hérité, de sorte que si vous créez un répertoire /alpha/beta/ puis un fichier à l’intérieur, il appartiendra également au groupe toto.

  1. Faire que le groupe ait les droits d’écriture sur ce fichier

Lorsqu’on crée un fichier, Linux applique des permissions par défaut que l’on peut voir et modifier avec la commande umask :

$ umask -S
u=rwx,g=rwx,o=rx

Sans l’option -S umask affiche les permissions qui sont /retirées/, en additionnant 4 pour r, 2 pour w et 1 pour x, et avec 3 chiffres pour les permissions u, g et o :

$ umask
0002

Le umask par défaut est rwxr-xr-x (022) pour root, et rwxrwxr-x (002) pour les autres utilisateurs. Si l’on veut modifier ces permissions par défaut :

$ umask g-w
$ umask -S
u=rwx,g=rx,o=rx

Attention ce changement ne s’appliquera qu’à la sesssion en cours. Pour le rendre permanent uniquement pour notre utilisateur il faut ajouter la ligne umask 0027à ~/.bashrc. Et si on veut le rendre permanent pour tous les utilisateurs, créer un fichier /etc/default/loginavec la ligne UMASK 022.


En lire plus sur : linux