Qual è lo scopo della directory setgid?


11

So come funziona setgid, ma non so perché sia ​​progettato, c'è qualche esempio per illustrare quali problemi risolve?

Risposte:


18

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 (autorizzazione). Sicuramente vorresti quindi mettere il bit setgid nelle cartelle del progetto, assicurandoti che venga applicata la giusta proprietà del gruppo quando crei nuovi file, e quindi consentendo ai tuoi colleghi in quel gruppo di progetto di accedere a quei file?


2
Se stai usando CVS, probabilmente avresti molta familiarità con questo proprio motivo (se le directory nel repository non sono setgid, allora ricevi molti errori di autorizzazione mentre diversi utenti provano a fare il checkout e impegnare i file)
Sopprimere il

Sì, hai ragione, altri utenti possono condividere (leggere) i file creati da te nelle directory setgid, ma l'autorizzazione scrivibile di gruppo (g + w) non è ereditata nella directory setgid e quindi un altro utente non può aggiungere a un sotto- directory creata da te nella directory setgid, questo ne ha limitato l'uso. E quindi ho questa domanda, risolve il problema di lettura-condivisione CVS ma non di condivisione-scrittura nelle directory appena create. ??
Xiè Jìléi,

1
Ecco perché vuoi anche usare le impostazioni umask adatte. Ad esempio, umask 007 lascerebbe le autorizzazioni complete per l'utente e il gruppo, ma nessuna per gli altri.
andol

13

L'uso principale è preservare il proprietario del gruppo di un albero di file:

[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]$

Questo tende ad essere utile in ambienti in cui diversi utenti creeranno / modificheranno file / directory in una directory: quando tutti i file / directory condividono lo stesso gruppo, tutti gli utenti possono modificare / cambiare i file / directory (permessi permettendo): questo evita situazioni come "xyz possiede il file abc, quindi non posso modificarlo".

Un'alternativa all'utilizzo di setgid in questo modo è l' opzione di montaggio del filesystem grpid .

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 del gruppo della directory in cui è stato creato; altrimenti (impostazione predefinita) prende fsgid del processo corrente, a meno che la directory non abbia il setgid bit impostato, nel qual caso prende il gid dalla directory padre e ottiene anche il setgid bit se è una directory stessa.

Se abilitato, i file / directory creati su un filesystem montato su grpid ereditano anche il gruppo della directory padre:

[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 ~]$

Ho scoperto che l'uso dell'opzione grpid riduce opportunamente la possibilità di errore umano (poiché il filesystem funziona, indipendentemente dalle autorizzazioni dir).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.