Quel est le but du répertoire setgid?

11

Je sais comment fonctionne setgid, mais je ne sais pas pourquoi il est conçu, existe-t-il un exemple pour illustrer les problèmes qu'il résout?

Xiè Jìléi
la source

Réponses:

18

Bien qu'un fichier / binaire setgid ne soit évidemment pas utile, je trouve certainement le bit setgid très utile appliqué sur les répertoires. En supposant que vous faites partie de différents groupes de travail, qui ont chacun leurs propres groupes Unix (autorisation). Vous voudrez sûrement alors mettre le bit setgid sur les dossiers de projet, en vous assurant que la bonne propriété du groupe est appliquée lorsque vous créez de nouveaux fichiers, et en permettant ainsi à vos collègues de ce groupe de projet d'accéder à ces fichiers?

andol
la source
2
Si vous utilisez CVS, vous le connaissez probablement très bien pour cette raison (si les répertoires du référentiel ne sont pas setgid, vous obtenez de nombreuses erreurs d'autorisation lorsque différents utilisateurs essaient de retirer et de valider les fichiers)
Suppressingfire
Oui, vous avez raison, d'autres utilisateurs peuvent partager (lire) les fichiers créés par vous dans les répertoires setgid, mais l'autorisation de groupe inscriptible (g + w) n'est pas héritée dans le répertoire setgid, et donc un autre utilisateur ne peut pas ajouter à un sous- répertoire créé par vous dans le répertoire setgid, cela a limité son utilisation. Et donc j'ai cette question, elle résout le problème de lecture partagée CVS mais pas d'écriture partagée dans les répertoires nouvellement créés. ??
Xiè Jìléi
1
C'est pourquoi vous souhaitez également utiliser des paramètres umask appropriés. Par exemple, umask 007 laisserait des autorisations complètes pour l'utilisateur et le groupe, mais aucune pour les autres.
andol
13

L'utilisation principale est de conserver le propriétaire du groupe d'une arborescence de fichiers:

[lockie@bubbles tmp]$ mkdir dir1 && touch dir1/file && mkdir dir1/dir
[lockie@bubbles tmp]$ mkdir dir2 && chgrp staff dir2 && chmod 2755 dir2 && touch dir2/file && mkdir dir2/dir
[lockie@bubbles tmp]$ ls -al dir1
total 32
drwxrwxr-x   3 lockie  lockie   4096 Dec 13 19:32 .
drwxrwxrwt 125 root root 20480 Dec 13 19:32 ..
drwxrwxr-x   2 lockie  lockie   4096 Dec 13 19:32 dir
-rw-rw-r--   1 lockie  lockie      0 Dec 13 19:32 file
[lockie@bubbles tmp]$ ls -al dir2
total 32
drwxr-sr-x   3 lockie  staff  4096 Dec 13 19:32 .
drwxrwxrwt 125 root root  20480 Dec 13 19:32 ..
drwxrwsr-x   2 lockie  staff  4096 Dec 13 19:32 dir  < note new dir is g+s, owned by "staff" group, so the setgid behaviour acts recursively
-rw-rw-r--   1 lockie  staff     0 Dec 13 19:32 file < note new file is owned by "staff" group
[lockie@bubbles tmp]$

Cela a tendance à être utile dans des environnements où différents utilisateurs créeront / modifieront des fichiers / répertoires sous un répertoire: lorsque tous les fichiers / répertoires partagent le même groupe, tous les utilisateurs peuvent modifier / modifier les fichiers / répertoires (si les autorisations le permettent): cela évite les situations comme "xyz possède le fichier abc, donc je ne peux pas le modifier".

Une alternative à l'utilisation de setgid de cette manière est l' option de montage du système de fichiers grpid .

Depuis l'homme:

grpid ou bsdgroups / nogrpid ou sysvgroups

Ces options définissent l'ID de groupe qu'un fichier nouvellement créé obtient. Lorsque grpid est défini, il prend l'ID de groupe du répertoire dans lequel il est créé; sinon (par défaut), il prend le fsgid du processus en cours, sauf si le répertoire a le bit setgid défini, auquel cas il prend le gid du répertoire parent et obtient également le bit setgid s'il s'agit d'un répertoire lui-même.

Lorsqu'ils sont activés, les fichiers / répertoires créés sur un système de fichiers monté grpid héritent également du groupe du répertoire parent:

[lockie@bubbles ~]$ mount | grep /home
/dev/mapper/VolGroup00-home on /home type ext3 (rw,grpid)
[lockie@bubbles ~]$ mkdir dir3 && touch dir3/file && mkdir dir3/dir
[lockie@bubbles ~]$ ls -al dir3
total 12
drwxrwxr-x  3 lockie users 4096 Dec 13 19:37 .
drwxrwxr-x 12 lockie users 4096 Dec 13 19:37 ..
drwxrwxr-x  2 lockie users 4096 Dec 13 19:37 dir < inherited "users" group from parent dir
-rw-rw-r--  1 lockie users    0 Dec 13 19:37 file  < inherited "users" group from parent dir
[lockie@bubbles ~]$

J'ai trouvé que l'utilisation de l' option grpid réduit de manière appropriée le risque d'erreur humaine (puisque le système de fichiers fait le travail, indépendamment des autorisations dir).

Lockie
la source