Soluzione 1:
Mentre un file/binario setgid potrebbe non essere ovviamente utile, trovo sicuramente il bit setgid molto utile applicato alle directory. Supponendo che tu faccia parte di diversi gruppi di lavoro, ognuno dei quali ha i propri gruppi unix (autorizzazioni). Sicuramente vorrai quindi inserire il bit setgid nelle cartelle di progetto, assicurandoti che venga applicata la giusta proprietà del gruppo quando crei nuovi file e consentendo così ai tuoi colleghi in quel gruppo di progetto di accedere a quei file?
Soluzione 2:
L'uso principale è preservare il gruppo proprietario di un albero di file:
[[email protected] tmp]$ mkdir dir1 && touch dir1/file && mkdir dir1/dir
[[email protected] tmp]$ mkdir dir2 && chgrp staff dir2 && chmod 2755 dir2 && touch dir2/file && mkdir dir2/dir
[[email protected] 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
[[email protected] 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
[[email protected] tmp]$
Questo tende ad essere utile in ambienti in cui diversi utenti creeranno/modificano file/directory in una directory:quando tutti i file/dir condividono lo stesso gruppo, tutti gli utenti possono modificare/cambiare i file/dir (autorizzazioni permettendo):questo evita situazioni come "xyz possiede il file abc, quindi non posso modificarlo".
Un'alternativa all'utilizzo di setgid in questo modo è grpid opzione di montaggio del filesystem.
Da man mount:
grpid o bsdgroups / nogrpid o sysvgroups
Queste opzioni definiscono quale ID di gruppo ottiene un file appena creato. Quando grpid è impostato, prende l'id di gruppo della directory in cui è stato creato; altrimenti (impostazione predefinita) prende il fsgid del processo corrente, a meno che la directory non abbia il bit setgid impostato, nel qual caso prende il gid dalla directory padre e ottiene anche il bit setgid impostato se è una directory stessa.
Se abilitato, i file/directory creati su un filesystem montato con grpid ereditano anche il gruppo della directory padre:
[[email protected] ~]$ mount | grep /home
/dev/mapper/VolGroup00-home on /home type ext3 (rw,grpid)
[[email protected] ~]$ mkdir dir3 && touch dir3/file && mkdir dir3/dir
[[email protected] ~]$ 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
[[email protected] ~]$
Ho trovato l'uso di grpid L'opzione riduce in modo appropriato la possibilità di errore umano (poiché il filesystem fa il lavoro, indipendentemente dai permessi dir).