comando 'chmod g + s'


45

Ciao, voglio capire il ruolo del chmod g+scomando in Unix.

Vorrei anche sapere cosa fa in questo particolare contesto:

cd /home/canard;
touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

Comprendo tutti i ruoli dei comandi tranne chmod g+se voglio conoscere le differenze tra i file une deuxrisultanti da questa serie di comandi.

Risposte:


61
chmod g+s .;

Questo comando imposta l'ID del gruppo (setgid) sulla directory corrente, scritto come ..

Ciò significa che tutti i nuovi file e le sottodirectory creati nella directory corrente ereditano l'ID gruppo della directory, anziché l'ID gruppo primario dell'utente che ha creato il file. Questo verrà anche passato a nuove sottodirectory create nella directory corrente.

g+s influisce sull'ID del gruppo del file ma non sull'ID del proprietario.

Si noti che questo vale solo per i file appena creati . I file che vengono spostati ( mv) nella directory non sono interessati dall'impostazione setgid. Anche i file che vengono copiati non cp -psono interessati.

Esempio

touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

In questo caso, deuxapparterrà al gruppo canardma unapparterrà al gruppo dell'utente che lo crea, qualunque esso sia.

Nota minore sull'uso dei punti e virgola nei comandi Shell

A differenza di co perl, un comando di shell deve essere seguito da un punto e virgola se è presente un altro comando di shell che lo segue sulla stessa riga di comando. Pertanto, considera la seguente riga di comando:

chgrp canard .; chmod g+s .;

Il punto e virgola finale è superfluo e può essere rimosso:

chgrp canard .; chmod g+s .

Inoltre, se dovessimo posizionare i due comandi su righe separate, il punto e virgola rimanente non è necessario:

chgrp canard .
chmod g+s .

1
I file che vengono copiati (ad esempio da cp) sono in effetti appena creati. Se non ereditano l'autorizzazione del gruppo, il programma di copia sta giocando, come copiare in un file temporaneo e quindi spostarlo nella directory di destinazione.
Kaz

1
@Kaz Ottimo punto. Ho aggiornato la risposta per chiarire che è cp -pche sovrascrive l'impostazione setgid.
Giovanni 1024,

Ma cp -psovrascrive l'impostazione di setgid? Su ogni singola implementazione Unix esistente? POSIX afferma che non è specificato se un errore nella copia dell'ID utente o dell'ID gruppo in cp -p genera un messaggio diagnostico! Tuttavia, i bit S_SUID e S_SGID, rispettivamente, devono essere cancellati in quella situazione (cioè se un file è setuid bob, ma la proprietà di bob non può essere copiata in modo che il file sia di proprietà di janet, non renderlo setuid janet.)
Kaz

" cp -pignora l'impostazione di setgid?" Secondo le specifiche POSIX, questo è ciò che dovrebbe fare. Lo fa su tutti i sistemi Unix che ho usato. Hai citato la parte della specifica relativa a cosa fare per proteggere la sicurezza nel caso in cui l'ID gruppo non possa essere duplicato. Non ho mai incontrato una situazione del genere "impossibile", vero?
Giovanni 1024,

7

È possibile modificare le autorizzazioni dei file con il comando chmod. In Unix, le autorizzazioni per i file, che stabiliscono chi può avere diversi tipi di accesso a un file, sono specificate sia dalle classi di accesso che dai tipi di accesso. Le classi di accesso sono gruppi di utenti e a ciascuno può essere assegnato un tipo di accesso specifico

Unix / Linux ha utenti e gruppi di utenti che possono essere assegnati per l'accesso ai file

le opzioni g + s sono le seguenti:

g - le autorizzazioni che altri utenti nel gruppo del file hanno per esso

s - imposta l'ID utente o gruppo durante l'esecuzione

ecco un esempio di utilizzo:

chmod =rwx,g+s filename

(consenti a tutti di leggere, scrivere ed eseguire un determinato file e attivare l'ID gruppo impostato)

Per impostare / modificare le autorizzazioni di un file è necessario utilizzare il programma chmod. Naturalmente, solo il proprietario di un file può utilizzare chmod per modificare le autorizzazioni di un file. chmod ha la seguente sintassi: chmod [opzioni] modalità file La parte 'mode' specifica le nuove autorizzazioni per i file che seguono come argomenti. Una modalità specifica quali autorizzazioni dell'utente devono essere modificate e successivamente quali tipi di accesso devono essere modificati. Diciamo ad esempio: chmod ax socktest.pl

Ciò significa che il bit di esecuzione deve essere cancellato (-) per tutti gli utenti. (proprietario, gruppo e resto del mondo) Le autorizzazioni iniziano con una lettera che specifica quali utenti dovrebbero essere interessati dalla modifica, che potrebbe essere una delle seguenti:

u the owner user
g the owner group
o others (neither u, nor g)
a all users

Questo è seguito da un'istruzione change che consiste in un + (set bit) o ​​- (clear bit) e la lettera corrispondente al bit che dovrebbe essere modificato. Vediamo alcuni esempi:

$ ls -l socktest.pl 
-rwxr-xr-x   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod a-x socktest.pl 
$ ls -l socktest.pl 
-rw-r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod g+w socktest.pl 
$ ls -l socktest.pl 
-rw-rw-r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod ug+x socktest.pl 
$ ls -l socktest.pl 
-rwxrwxr--   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod ug-wx socktest.pl 
$ ls -l socktest.pl 
-r--r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

Numeri strani ... Potresti aver incontrato cose come chmod 755 qualche file e ovviamente ti starai chiedendo di cosa si tratta. Il fatto è che puoi cambiare l'intero modello di autorizzazione di un file in una volta sola usando un numero come quello in questo esempio. Ogni modalità ha un numero di codice corrispondente e, come vedremo, esiste un modo molto semplice per capire quale numero corrisponde a qualsiasi modalità. Ognuna delle tre cifre sul numero della modalità corrisponde a una delle tre terzine di autorizzazione. (u, geo) Ogni bit di autorizzazione in una tripletta corrisponde a un valore: 4 per r, 2 per w, 1 per x. Se il bit di autorizzazione si aggiunge questo valore al numero della tripletta di autorizzazione. Se viene cancellato, non aggiungi nulla. (Alcuni di voi potrebbero notare che in effetti,

Tripletta per te: rwx => 4 + 2 + 1 = 7

Tripletta per g: r-x => 4 + 0 + 1 = 5

Tripletta per o: r-x => 4 + 0 + 1 = 5

Che rende : 755

Quindi, 755 è un modo conciso per dire "Non mi importa se altre persone leggono o eseguono questo file, ma solo dovrei essere in grado di modificarlo" e 777 significa "tutti hanno pieno accesso a questo file"

riferimento perfetto


0

Il risultato del comando ls dipenderà da umask.

g + s imposterà sgid sul file. Controlla qui per informazioni più approfondite su SUID SGID

quindi se la tua umask per esempio è 022 il risultato sarà qualcosa del tipo:

-rw-r--r--    1 romeo    canard     0 Jan 31 20:58 deux
-rw-r-Sr--    1 romeo    UsersGrp   0 Jan 31 20:58 un

0

In Linux una delle opzioni di mount predefinite per ext? fs è 'nogrpid | sysvgroups'. Quindi il primo tocco un, crea un file con ID gruppo uguale a fsgid del processo di creazione in cui fsgid = egid.

chmod g + s., fa in modo che la successiva creazione di file / dir erediti l'ID del gruppo dalla cartella principale e se l'oggetto creato è una directory anche g + s viene impostato come suo padre.

Qui tocca deux, crea deux, con canard di gruppo.

La semantica cambia se l'opzione mount era 'grpid | bsdgroups 'in quel caso, la creazione di un nuovo file / dir erediterebbe l'ID del gruppo dalla sua cartella genitore anche senza impostare g + s per il genitore stesso.

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.