104.5 Lezione 1
Certificazione: |
LPIC-1 |
---|---|
Versione: |
5.0 |
Argomento: |
104 Dispositivi, Il Filesystem Linux, Filesystem Hierarchy Standard |
Obiettivo: |
104.5 Gestire le autorizzazioni e le proprietà dei file |
Lezione: |
1 di 1 |
Introduzione
Essendo un sistema multiutente Linux ha bisogno di un modo per tenere traccia del possesso di ogni file e se un utente è autorizzato o meno a eseguire azioni su un file. Questo per garantire la privacy degli utenti che potrebbero voler mantenere riservato il contenuto dei propri file, nonché per garantire la collaborazione rendendo alcuni file accessibili a più utenti.
Tutto ciò viene gestito attraverso un sistema di autorizzazioni a tre livelli. Ogni file su disco è di proprietà di un utente e di un gruppo di utenti e dispone di tre serie di autorizzazioni: una per il suo proprietario, una per il gruppo che possiede il file e una per tutti gli altri. In questa lezione imparerai come interrogare i permessi di un file, il significato di questi permessi e come manipolarli.
Richiedere Informazioni Riguardo File e Directory
Il comando ls
viene utilizzato per ottenere un elenco dei contenuti di qualsiasi directory. In questa forma base, tutto ciò che ottieni sono i nomi dei file:
$ ls Another_Directory picture.jpg text.txt
Ma sono disponibili molte più informazioni per ogni file, inclusi il tipo, le dimensioni, la proprietà e altro ancora. Per vedere queste informazioni devi chiedere a ls
un elenco in forma lunga
, usando il parametro -l
:
$ ls -l total 536 drwxrwxr-x 2 carol carol 4096 Dec 10 15:57 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Ogni colonna dell’output sopra ha un significato. Diamo uno sguardo alle colonne rilevanti per questa lezione.
-
La prima colonna nell’elenco mostra il tipo di file e le autorizzazioni. Per esempio su
drwxrwxr-x
:-
Il primo carattere,
d
, indica il tipo di file. -
I successivi tre caratteri,
rwx
, indicano i permessi per il proprietario del file, denominato anche user ou
. -
I successivi tre caratteri,
rwx
, indicano i permessi del gruppo che possiede il file, denominato anche group og
. -
Gli ultimi tre caratteri,
r-x
, indicano i permessi per chiunque altro, noto anche come others oo
.
-
Tip
|
È anche comune indicare il set di permessi others come permessi mondiali, come in “Tutti gli altri nel mondo hanno questi permessi”. |
-
La terza e la _quarta colonna mostrano le informazioni sulla proprietà: rispettivamente l’utente e il gruppo che possiede il file.
-
La settima e ultima colonna mostra il nome del file.
La seconda colonna indica il numero di hard link che puntano a quel file. La quinta colonna mostra la dimensione del file. La sesta colonna mostra la data e l’ora dell’ultima modifica del file. Ma queste colonne non sono rilevanti per l’argomento corrente.
E Riguardo le Directory?
Se provi a ricercare informazioni su una directory usando ls -l
, ti verrà mostrato invece un elenco dei suoi contenuti:
$ ls -l Another_Directory/ total 0 -rw-r--r-- 1 carol carol 0 Dec 10 17:59 another_file.txt
Per evitare ciò e richiedere informazioni sulla directory stessa, aggiungi il parametro -d
a ls
:
$ ls -l -d Another_Directory/ drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory/
Visualizzare i File Nascosti
L’elenco delle directory che abbiamo recuperato utilizzando in precedenza ls -l
è incompleto:
$ ls -l total 544 drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Ci sono altri tre file in quella directory, ma sono nascosti. Su Linux, i file il cui nome inizia con un punto (.
) vengono automaticamente nascosti. Per vederli dobbiamo aggiungere il parametro -a
a ls
$ ls -l -a total 544 drwxrwxr-x 3 carol carol 4096 Dec 10 16:01 . drwxrwxr-x 4 carol carol 4096 Dec 10 15:56 .. drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt -rw-r--r-- 1 carol carol 0 Dec 10 16:01 .thisIsHidden
Il file .thisIsHidden
è semplicemente nascosto perché il suo nome inizia con .
.
Le directory .
e ..
tuttavia sono speciali. .
è un puntatore alla directory corrente. E ..
è un puntatore alla directory padre, quella che contiene quella corrente. In Linux, ogni directory contiene almeno queste due directory.
Tip
|
Puoi combinare più parametri per |
Comprendere i Tipi di File
Abbiamo già detto che la prima lettera in ogni output di ls -l
descrive il tipo di file. I tre tipi di file più comuni sono:
-
(normal file)-
Un file può contenere dati di qualsiasi tipo e aiutarci a gestirli. I file possono essere modificati, spostati, copiati ed eliminati.
d
(directory)-
Una directory contiene altri file o directory e aiuta a organizzare il file system. Tecnicamente, le directory sono un tipo speciale di file.
l
(symbolic link)-
Questo “file” è un puntatore a un altro file o directory memorizzato altrove nel filesystem.
Oltre a questi, ci sono altri tre tipi di file che dovresti conoscere, ma che non rientrano nell’ambito di questa lezione:
b
(block device)-
Questo file sta per un dispositivo virtuale o fisico, solitamente dischi o altri tipi di dispositivi di memorizzazione, come il primo disco rigido che potrebbe essere rappresentato da
/dev/sda
. c
(character device)-
Questo file sta per un dispositivo virtuale o fisico. I terminali (come il terminale principale su
/dev/ttyS0
) e le porte seriali sono esempi comuni di dispositivi a caratteri. s
(socket)-
I socket servono come “tramite” per il passaggio di informazioni tra due programmi.
Warning
|
Non modificare nessuna delle autorizzazioni su dispositivi a blocchi, dispositivi a caratteri o socket, a meno che tu non sappia cosa stai facendo. Questo potrebbe impedire al tuo sistema di funzionare! |
Comprendere i Permessi
Nell’output di ls -l
i permessi del file sono mostrati subito dopo il tipo di file, come tre gruppi di tre caratteri ciascuno, nell’ordine r
, w
e x
. Ecco di seguito il loro significato. Tieni presente che un trattino -
rappresenta la mancanza di un’autorizzazione.
Permessi sui File
r
-
Sta per lettura (read) e ha un valore ottale di
4
(non preoccuparti, discuteremo a breve degli ottali). Ciò indica il permesso di aprire un file e leggerne il contenuto. w
-
Sta per scrittura (write) e ha un valore ottale di
2
. Ciò indica il permesso di modificare un file. x
-
Sta per esecuzione (execute) e ha un valore ottale di
1
. Ciò indica che il file può essere eseguito come eseguibile o script.
Quindi, per esempio, un file con i permessi rw-
può essere letto e modificato, ma non può essere eseguito.
Permessi sulle Directory
r
-
Sta per lettura (read) e ha un valore ottale di
4
. Ciò indica il permesso di leggere il contenuto della directory, come i nomi dei file. Ma non implica il permesso di leggere i file stessi. w
-
Sta per scrittura (write) e ha un valore ottale di
2
. Ciò indica il permesso di creare o eliminare file in una directory o di modificarne nomi, permessi e proprietari.Se un utente ha il permesso
w
su una directory, l’utente può modificare i permessi di qualsiasi file nella directory (i contenuti della directory), anche se l’utente non ha i permessi sul file o se il file è di proprietà di un altro utente.Tieni presente che avere i permessi di scrittura su una directory o un file non significa avere il permesso di rimuovere o rinominare la directory o il file stesso.
x
-
Sta per esecuzione (execute) e ha un valore ottale di
1
. Ciò indica il permesso di entrare in una directory, ma non di elencare i suoi file (per questo è necessaria lar
).
L’ultima parte sulle directory può sembrare un po' confusa. Immaginiamo, per esempio, di avere una directory chiamata Another_Directory
, con i seguenti permessi:
$ ls -ld Another_Directory/ d--x--x--x 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Immagina anche che all’interno di questa directory tu abbia uno script di shell chiamato hello.sh
:
-rwxr-xr-x 1 carol carol 33 Dec 20 18:46 hello.sh
Se sei l’utente carol
e cerchi di elencare il contenuto di Another_Directory
, riceverai un messaggio di errore, poiché il tuo utente non ha i permessi di lettura per quella directory:
$ ls -l Another_Directory/ ls: cannot open directory 'Another_Directory/': Permission denied
Tuttavia, l’utente carol
dispone dei permessi di esecuzione, il che significa che può entrare nella directory. Pertanto, l’utente carol
può accedere ai file all’interno della directory, purché abbia i permessi corretti per il rispettivo file. Supponiamo che l’utente abbia i permessi completi (rwx
) per lo script hello.sh
. Quindi può eseguire lo script, anche se non_può leggere il contenuto della directory che lo contiene se conosce il nome completo del file:
$ sh Another_Directory/hello.sh Hello LPI World!
Come abbiamo detto prima, i permessi sono specificati in sequenza: prima per il proprietario del file, poi per il gruppo proprietario e poi per tutti gli altri utenti. Ogni volta che qualcuno tenta di eseguire un’azione sul file, le autorizzazioni vengono verificate allo stesso modo.
Per prima cosa il sistema controlla se l’utente corrente abbia il possesso del file e, se questo è vero, applica solo il primo insieme di permessi. In caso contrario, controlla se l’utente corrente appartiene al gruppo proprietario del file. In tal caso, applica solo la seconda serie di autorizzazioni. In ogni altro caso, il sistema applicherà la terza serie di autorizzazioni.
Ciò significa che se l’utente corrente è il proprietario del file, solo le autorizzazioni del proprietario sono effettive, anche se il gruppo o altre autorizzazioni sono più permissive delle autorizzazioni del proprietario.
Modificare i Permessi sui File
Il comando chmod
è usato per modificare i permessi di un file, e richiede almeno due parametri: il primo descrive quali permessi cambiare; il secondo indica il file o la directory dove verrà effettuata la modifica. Tieni presente che solo il proprietario del file o l’amministratore di sistema (root) può modificare le autorizzazioni su un file.
I permessi per cambiare possono essere descritti in due modalità differenti, o “modi” (modes).
Il primo, chiamato modo simbolico (symbolic mode), offre un controllo granulare, consentendo di aggiungere o revocare un singolo permesso senza modificare gli altri sul set generale. L’altra modalità, chiamata modo ottale (octal mode), è più facile da ricordare e più veloce da usare se desideri impostare tutti i valori dei permessi contemporaneamente.
Entrambe le modalità porteranno allo stesso risultato finale. Quindi, per esempio, i comandi:
$ chmod ug+rw-x,o-rwx text.txt
e
$ chmod 660 text.txt
produrranno esattamente lo stesso output, un file con le autorizzazioni impostate:
-rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Vediamo ora come funziona ciascuna modalità.
Modalità Simbolica
Quando si descrivono quali permessi cambiare in modalità simbolica i primi caratteri indicano quali permessi si modificheranno: quelli per l’utente (u
), per il gruppo (g
), per gli altri (o
) e/o per tutti (a
).
Quindi devi dire al comando cosa fare: puoi concedere un’autorizzazione (+
), revocare un’autorizzazione (-
) o impostarla su un valore specifico (=
).
Infine, si specifica su quale autorizzazione si desidera agire: leggere (r
), scrivere (w
) o eseguire (x
).
Per esempio, immagina di avere un file chiamato text.txt
con il seguente set di autorizzazioni:
$ ls -l text.txt -rw-r--r-- 1 carol carol 765 Dec 20 21:25 text.txt
Se desideri concedere i permessi di scrittura ai membri del gruppo che possiede il file, dovresti usare il parametro g+w
. È più facile se ci pensi in questo modo: “Per il gruppo (g
), concedi (+
) i permessi di scrittura (w
)”. Quindi, il comando sarebbe:
$ chmod g+w text.txt
Controlliamo il risultato con ls
:
$ ls -l text.txt -rw-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Vuoi rimuovere i permessi di lettura per il proprietario dello stesso file? Pensalo come: “Per l’utente (u
), revoca (-
) i permessi di lettura (r
)”. Quindi il parametro è u-r
, in questo modo:
$ chmod u-r text.txt $ ls -l text.txt --w-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
E se volessimo impostare i permessi esattamente come rw-
per tutti? Pensalo come: “Per tutti (a
), imposta esattamente (=
) leggi (r
), scrivi (w
) e non eseguire (-
)”. Così:
$ chmod a=rw- text.txt $ ls -l text.txt -rw-rw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
Ovviamente è possibile modificare più permessi contemporaneamente. In questo caso, separali con una virgola (,
):
$ chmod u+rwx,g-x text.txt $ ls -lh text.txt -rwxrw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
L’esempio sopra può essere letto come: “Per l’utente (u
), concedi (+
) i permessi di lettura, scrittura ed esecuzione (rwx
), per il gruppo (g
), revoca (-
) i permessi di esecuzione (x
)”.
Quando viene eseguito su una directory, chmod
modifica solo i permessi della directory. chmod
ha anche una modalità ricorsiva, che è utile quando vuoi cambiare i permessi per “tutti i file all’interno di una directory e le sue sottodirectory”. Per usarlo, aggiungi il parametro -R
dopo il nome del comando, prima dei permessi da modificare:
$ chmod -R u+rwx Another_Directory/
Questo comando può essere letto come: “Ricorsivamente (-R
), per l’utente (u
), concedi (+
) i permessi di lettura, scrittura ed esecuzione (rwx
)”.
Warning
|
Fai attenzione e pensaci due volte prima di usare l’opzione |
Modalità Ottale
Nella modalità ottale i permessi sono specificati in un modo diverso: come un valore a tre cifre su notazione ottale (un sistema numerico in base 8).
Ogni permesso ha un valore corrispondente, e sono specificati nel seguente ordine: prima viene lettura (r
), che è 4
, poi scrittura (w
), che è 2
e l’ultimo è esecuzione (x
), rappresentato da 1
. Se non ci sono permessi, usa il valore zero (0
). Quindi, un permesso di rwx
sarebbe 7
(4+2+1
) e r-x
sarebbe 5
(4+0+1
).
La prima delle tre cifre sul set di autorizzazioni rappresenta i permessi per l’utente (u
), la seconda per il gruppo (g
) e la terza per gli altri (o
). Se volessimo impostare i permessi per un file su rw-rw----
, il valore ottale sarebbe 660
:
$ chmod 660 text.txt $ ls -l text.txt -rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Oltre a questo, la sintassi nella modalità ottale è la stessa della modalità simbolica: il primo parametro rappresenta i permessi che desideri modificare, e il secondo parametro punta al file o alla directory in cui verrà effettuata la modifica.
Tip
|
Se un valore di autorizzazione è dispari, il file è sicuramente eseguibile! |
Quale sintassi dovresti usare? La modalità ottale è consigliata se si desidera modificare i permessi con un valore specifico, per esempio 640
(`rw-r----- `).
La modalità simbolica è più utile se si desidera cambiare solo un valore specifico, indipendentemente dalle autorizzazioni correnti per il file. Per esempio, puoi aggiungere i permessi di esecuzione per l’utente usando semplicemente chmod u+x script.sh
senza considerare, o anche toccare, i permessi correnti per il gruppo e altri.
Modificare la Proprietà di un File
Il comando chown
viene utilizzato per modificare la proprietà di un file o di una directory. La sintassi è abbastanza semplice:
chown USERNAME:GROUPNAME FILENAME
Per esempio, controlliamo un file chiamato text.txt
:
$ ls -l text.txt -rw-rw---- 1 carol carol 1881 Dec 10 15:57 text.txt
L’utente che possiede il file è carol
e anche il gruppo proprietario è carol
. Ora, cambieremo il gruppo che possiede il file in un altro gruppo, come students
:
$ chown carol:students text.txt $ ls -l text.txt -rw-rw---- 1 carol students 1881 Dec 10 15:57 text.txt
Tieni presente che l’utente che possiede un file non ha bisogno di appartenere al gruppo che possiede un file. Nell’esempio sopra, l’utente carol
non ha bisogno di essere un membro del gruppo students
.
Il set di autorizzazioni utente o gruppo può essere omesso se non si desidera modificarlo. Quindi, per cambiare solo il gruppo che possiede un file dovresti usare chown :students text.txt
. Per cambiare solo l’utente, il comando sarebbe chown carol: text.txt
o semplicemente chown carol text.txt
. In alternativa, potresti usare il comando chgrp students text.txt
.
A meno che tu non sia l’amministratore di sistema (root), non puoi cambiare la proprietà di un file a un altro utente o gruppo a cui non appartieni. Se provi a farlo, riceverai il messaggio di errore Operation not permitted
.
Interrogare i Gruppi
Prima di modificare la proprietà di un file, potrebbe essere utile sapere quali gruppi esistono nel sistema, quali utenti sono membri di un gruppo e a quali gruppi appartiene un utente.
Per vedere quali gruppi esistono sul tuo sistema, digita getent group
. L’output sarà simile a questo (l’output è stato abbreviato):
$ getent group root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:syslog,rigues tty:x:5:rigues disk:x:6: lp:x:7: mail:x:8: news:x:9: uucp:x:10:rigues
Se vuoi sapere a quali gruppi appartiene un utente, aggiungi il nome utente come parametro a groups
:
$ groups carol carol : carol students cdrom sudo dip plugdev lpadmin sambashare
Per fare il contrario (vedere quali utenti appartengono a un gruppo) usa groupmems
. Il parametro -g
specifica il gruppo e -l
elencherà tutti i suoi membri:
# groupmems -g cdrom -l carol
Tip
|
|
Permessi Default
Proviamo un esperimento. Apri una finestra di terminale e crea un file vuoto con il seguente comando:
$ touch testfile
Ora, diamo un’occhiata alle autorizzazioni per questo file. Potrebbero essere diversi sul tuo sistema, ma supponiamo che abbiano il seguente aspetto:
$ ls -lh testfile -rw-r--r-- 1 carol carol 0 jul 13 21:55 testfile
I permessi sono rw-r-r-
: lettura e scrittura per l’utente e lettura per il gruppo e gli altri, o 644
in modalità ottale. Ora prova a creare una directory:
$ mkdir testdir $ ls -lhd testdir drwxr-xr-x 2 carol carol 4,0K jul 13 22:01 testdir
Ora i permessi sono rwxr-xr-x
: lettura, scrittura ed esecuzione per l’utente, lettura ed esecuzione per il gruppo e altri, o 755
in modalità ottale.
Non importa dove ti trovi nel filesystem, ogni file o directory che crei avrà le stesse autorizzazioni. Ti sei mai chiesto da dove provengono?
Provengono dalla user mask o umask
, che imposta i permessi predefiniti per ogni file creato. Puoi controllare i valori correnti con il comando umask
:
$ umask 0022
Ma questo non sembra rw-r-r-
, o anche 644
. Forse dovremmo provare con il parametro -S
, per ottenere un output in modalità simbolica:
$ umask -S u=rwx,g=rx,o=rx
Queste sono le stesse autorizzazioni ottenute dalla nostra directory di test in uno degli esempi precedenti. Ma perché quando abbiamo creato un file i permessi erano diversi?
Bene, non ha senso impostare le autorizzazioni di esecuzione globali per tutti su qualsiasi file per impostazione predefinita, giusto? Le directory richiedono autorizzazioni di esecuzione (altrimenti non è possibile accederci), ma i file no, quindi non le ottengono. Da qui il rw-r-r-
.
Oltre a mostrare i permessi predefiniti, umask
può anche essere usato per cambiarli per la tua attuale sessione di shell. Per esempio, se usiamo il comando:
$ umask u=rwx,g=rwx,o=
Ogni nuova directory erediterà i permessi rwxrwx---
, e ogni file rw-rw----
(dato che non ottengono i permessi di esecuzione). Se ripeti gli esempi sopra per creare un testfile
e testdir
e controlli i permessi, dovresti ottenere:
$ ls -lhd test* drwxrwx--- 2 carol carol 4,0K jul 13 22:25 testdir -rw-rw---- 1 carol carol 0 jul 13 22:25 testfile
E se controlli umask
senza il parametro -S
(modalità simbolica), ottieni:
$ umask 0007
Il risultato non sembra familiare perché i valori utilizzati sono diversi. Ecco una tabella con ogni valore e il suo rispettivo significato:
Valore | Permesso per i File | Permesso per le Directory |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Come puoi vedere, 007
corrisponde a rwxrwx---
, esattamente come abbiamo richiesto. Lo zero iniziale può essere ignorato.
Permessi Speciali
Oltre ai permessi di lettura, scrittura ed esecuzione per utente, gruppo e altri, ogni file può avere altri tre permessi speciali che possono alterare il modo in cui funziona una directory o come viene eseguito un programma. Possono essere specificati in modalità simbolica o ottale e sono i seguenti:
Sticky Bit
Lo sticky bit, chiamato anche indicatore di cancellazione ristretta, ha il valore ottale 1
e in modalità simbolica è rappresentato da una t
all’interno dei permessi dell’altro. Ciò si applica solo alle directory e non ha alcun effetto sui file normali. Su Linux impedisce agli utenti di rimuovere o rinominare un file in una directory a meno che non siano proprietari di quel file o directory.
Le directory con lo sticky bit impostato mostrano una t
che sostituisce la x
sui permessi per gli altri sull’output di ls -l
:
$ ls -ld Sample_Directory/ drwxr-xr-t 2 carol carol 4096 Dec 20 18:46 Sample_Directory/
In modalità ottale i permessi speciali vengono specificati usando una notazione a 4 cifre, con la prima cifra che rappresenta il permesso speciale su cui agire. Per esempio, per impostare lo sticky bit (valore 1
) per la directory Another_Directory
in modalità ottale, con i permessi 755
, il comando sarebbe:
$ chmod 1755 Another_Directory $ ls -ld Another_Directory drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Set GID
Set GID, noto anche come SGID o bit di Set Group ID, ha il valore ottale 2
e in modalità simbolica è rappresentato da una s
sui permessi di gruppo. Questo può essere applicato a file eseguibili o directory. Sui file, eseguirà il processo con i privilegi del gruppo che possiede il file. Quando applicato alle directory, farà in modo che ogni file o directory creato sotto di esso erediti il gruppo dalla directory principale.
I file e le directory con bit SGID mostrano una s
che sostituisce la x
sui permessi per il gruppo sull’output di ls -l
:
$ ls -l test.sh -rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
Per aggiungere autorizzazioni SGID a un file in modalità simbolica, il comando sarebbe:
$ chmod g+s test.sh $ ls -l test.sh -rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
Il seguente esempio ti aiuterà a comprendere meglio gli effetti di SGID su una directory. Supponiamo di avere una directory chiamata Sample_Directory
, di proprietà dell’utente carol
e del gruppo users
, con la seguente struttura dei permessi
$ ls -ldh Sample_Directory/ drwxr-xr-x 2 carol users 4,0K Jan 18 17:06 Sample_Directory/
Ora, passiamo a questa directory e, usando il comando touch
, creiamo un file vuoto al suo interno. Il risultato sarebbe:
$ cd Sample_Directory/ $ touch newfile $ ls -lh newfile -rw-r--r-- 1 carol carol 0 Jan 18 17:11 newfile
Come possiamo vedere il file è di proprietà dell’utente carol
e del gruppo carol
. Tuttavia, se la directory avesse il set di autorizzazioni SGID, il risultato sarebbe diverso. Per prima cosa, aggiungiamo il bit SGID a Sample_Directory
e controlliamo i risultati:
$ sudo chmod g+s Sample_Directory/ $ ls -ldh Sample_Directory/ drwxr-sr-x 2 carol users 4,0K Jan 18 17:17 Sample_Directory/
La s
sui permessi del gruppo indica che il bit SGID è impostato. Ora, passeremo a questa directory e, di nuovo, creeremo un file vuoto con il comando touch
:
$ cd Sample_Directory/ $ touch emptyfile $ ls -lh emptyfile -rw-r--r-- 1 carol users 0 Jan 18 17:20 emptyfile
Il gruppo che possiede il file è users
. Questo perché il bit SGID ha fatto in modo che il file ereditasse il proprietario del gruppo della sua directory padre, che è users
.
Set UID
SUID, noto anche come Set User ID, ha il valore ottale 4
ed è rappresentato da una s
sui permessi utente in modalità simbolica. Si applica solo ai file e non ha alcun effetto sulle directory. Il suo comportamento è simile al bit SGID, ma il processo verrà eseguito con i privilegi dell' utente che possiede il file. I file con il bit SUID mostrano una s
che sostituisce la x
sui permessi per l’utente sull’output di ls -l
:
$ ls -ld test.sh -rwsr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
È possibile combinare più autorizzazioni speciali su un parametro. Quindi, per impostare SGID (valore 2
) e SUID (valore 4
) in modalità ottale per lo script test.sh
con i permessi 755
, dovresti digitare:
$ chmod 6755 test.sh
E il risultato sarà:
$ ls -lh test.sh -rwsr-sr-x 1 carol carol 66 Jan 18 17:29 test.sh
Tip
|
Se il tuo terminale supporta il colore, e oggigiorno la maggior parte di loro lo fa, puoi vedere rapidamente se questi permessi speciali sono impostati dando uno sguardo all’output di |
Esercizi Guidati
-
Crea una directory chiamata
emptydir
usando il comandomkdir emptydir
. Ora, usandols
, elenca i permessi per la directoryemptydir
. -
Crea un file vuoto chiamato
emptyfile
con il comandotouch emptyfile
. Ora, usandochmod
in modalità simbolica, aggiungi i permessi di esecuzione per il proprietario del fileemptyfile
, e rimuovi i permessi di scrittura ed esecuzione per tutti gli altri. Fallo usando un solo comandochmod
. -
Quali sarebbero i permessi predefiniti per un file se il valore
umask
fosse impostato su027
? -
Supponiamo che un file chiamato
test.sh
sia uno script di shell con i seguenti permessi e proprietà:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Quali sono le autorizzazioni per il proprietario del file?
-
Usando la notazione ottale, quale sarebbe la sintassi di
chmod
per “rimuovere” il permesso speciale concesso a questo file?
-
-
Considera il file:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Quale tipo di file è
sdb1
? Chi può scriverci? -
Considera i seguenti quattro file:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Annotare le autorizzazioni corrispondenti per ogni file e directory utilizzando la modalità ottale utilizzando la notazione a 4 cifre.
Another_Directory
foo.bar
HugeFile.zip
Sample_Directory
Esercizi Esplorativi
-
Prova questo su un terminale: crea un file vuoto chiamato
emptyfile
con il comandotouch emptyfile
. Ora “azzera” i permessi per il file conchmod 000 emptyfile
. Cosa succederà se modifichi i permessi peremptyfile
passando solo un valore perchmod
in modalità ottale, come per esempiochmod 4 emptyfile
? E se ne usi due, come inchmod 44 emptyfile
? Cosa possiamo imparare sul modo in cuichmod
legge il valore numerico? -
Considera i permessi per la directory temporanea su un sistema Linux,
/ tmp
:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Utente, gruppo e altri dispongono di autorizzazioni complete. Ma un utente normale può eliminare qualsiasi file all’interno di questa directory? Perché?
-
Un file chiamato
test.sh
ha i seguenti permessi:-rwsr-xr-x
, il che significa che il bit SUID è impostato. Ora, esegui i seguenti comandi:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Che cosa abbiamo fatto? Che cosa significa la
S
maiuscola? -
Come creereste una directory chiamata
Box
in cui tutti i file sono automaticamente di proprietà del gruppousers
e possono essere eliminati solo dall’utente che li ha creati?
Sommario
In questa lezione hai imparato come usare ls
per ottenere (e comprendere) informazioni sui permessi dei file, come controllare o cambiare chi può creare, eliminare o modificare un file con chmod
, sia in modalità ottale sia simbolica, come per cambiare la proprietà dei file con chown
e chgrp
e come interrogare e modificare la maschera dei permessi predefinita per file e directory con umask
.
In questa lezione sono stati discussi i seguenti comandi:
ls
-
Elenca i file, includendo facoltativamente dettagli come le autorizzazioni.
chmod
-
Modifica le autorizzazioni di un file o di una directory.
chown
-
Modifica l’utente e/o il gruppo proprietario di un file o di una directory.
chgrp
-
Modifica il gruppo proprietario di un file o di una directory.
umask
-
Interroga o imposta la maschera delle autorizzazioni predefinita per file e directory.
Risposte agli Esercizi Guidati
-
Crea una directory chiamata
emptydir
usando il comandomkdir emptydir
. Ora, usandols
, elenca i permessi per la directoryemptydir
.Aggiungi il parametro
-d
als
per vedere gli attributi di una directory, invece di elencarne il contenuto. Quindi, la risposta è:ls -l -d emptydir
Punti bonus se unisci i due parametri in uno, come in
ls -ld emptydir
. -
Crea un file vuoto chiamato
emptyfile
con il comandotouch emptyfile
. Ora, usandochmod
in modalità simbolica, aggiungi i permessi di esecuzione per il proprietario del fileemptyfile
, e rimuovi i permessi di scrittura ed esecuzione per tutti gli altri. Fallo usando un solo comandochmod
.Pensaci in questo modo:
-
“Per l’utente che possiede il file (
u
) aggiungi il permesso (+
) di esecuzione (x
)”, quindiu+x
. -
“Per il gruppo (
g
) e altri utenti (o
), rimuovi i permessi (-
) scrittura (w
) ed esecuzione (x
)”, quindigo-wx
.Per combinare questi due set di autorizzazioni, aggiungiamo una virgola tra di loro. Quindi il risultato finale è:
chmod u+x,go-wx emptyfile
-
-
Quali sarebbero i permessi predefiniti per un file se il valore
umask
fosse impostato su020
?I permessi sarebbero
rw-r-----
-
Supponiamo che un file chiamato
test.sh
sia uno script di shell con i seguenti permessi e proprietà:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Quali sono le autorizzazioni per il proprietario del file?
I permessi per il proprietario (dal secondo al quarto carattere nell’output di
ls -l
) sonorwx
, quindi la risposta è: “leggere, scrivere ed eseguire il file”. -
Usando la notazione ottale, quale dovrebbe essere la sintassi di chmod per “rimuovere” il permesso speciale concesso a questo file?
Possiamo “rimuovere” i permessi speciali passando una quarta cifra,
0
, a “chmod”. I permessi correnti sono755
, quindi il comando dovrebbe esserechmod 0755
.
-
-
Considera il file:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Quale tipo di file è
sdb1
? Chi può scriverci?Il primo carattere sull’output di
ls -l
mostra il tipo di file.b
è un device a blocchi, solitamente un disco (interno o esterno), connesso alla macchina. Il proprietario (root
) e qualsiasi utente del gruppodisk
possono scrivere su di esso. -
Considera i seguenti quattro file:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Annotare le autorizzazioni corrispondenti per ogni file e directory utilizzando la modalità ottale utilizzando la notazione a 4 cifre.
I permessi corrispondenti, in modalità ottale, sono i seguenti:
Another_Directory
1755
.1
per lo sticky bit,755
per i permessi regolari (rwx
per l’utente,r-x
per gruppo e altri).foo.bar
0044
. Nessun permesso speciale (quindi la prima cifra è0
), nessun permesso per l’utente (---
) e sola lettura (r—r--
) per il gruppo e altri.HugeFile.zip
0664
. Nessun permesso speciale, quindi la prima cifra è0
.6
(rw-
) per l’utente e il gruppo,4
(r--
) per gli altri.Sample_Directory
2755
.2
per il bit SGID,7
(rwx
) per l’utente,5
(r-x
) per il gruppo e altri.
Risposte agli Esercizi Esplorativi
-
Prova questo su un terminale: crea un file vuoto chiamato
emptyfile
con il comandotouch emptyfile
. Ora “azzera” i permessi per il file conchmod 000 emptyfile
. Che cosa succederà se modifichi i permessi peremptyfile
passando solo un valore perchmod
in modalità ottale, come per esempiochmod 4 emptyfile
? E se ne usi due, come inchmod 44 emptyfile
? Cosa possiamo imparare sul modo in cuichmod
legge il valore numerico?Ricorda che abbiamo “azzerato” i permessi per
emptyfile
. Quindi, il suo stato iniziale sarebbe:---------- 1 carol carol 0 Dec 11 10:55 emptyfile
Ora, proviamo il primo comando,
chmod 4 emptyfile
:$ chmod 4 emptyfile $ ls -l emptyfile -------r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Si vede? Le autorizzazioni per gli altri sono state modificate. E se provassimo due cifre, come in
chmod 44 emptyfile
?$ chmod 44 emptyfile $ ls -l emptyfile ----r--r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Ora le autorizzazioni per il gruppo e gli altri sono state interessate. Possiamo concludere che in modalità ottale
chmod
legge il valore “all’indietro”, partendo dalla cifra meno significativa (others) a quella più significativa (user). Se indichi una cifra, modifichi i permessi per gli altri. Con due cifre modifichi group e others, e con tre modifichi user, group e others e con quattro cifre modifichi user, group, others e le autorizzazioni speciali. -
Considera i permessi per la directory temporanea su un sistema Linux,
/ tmp
:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Utente, gruppo e altri dispongono di autorizzazioni complete. Ma un utente normale può eliminare qualsiasi file all’interno di questa directory? Perché?
/ tmp
è ciò che chiamiamo una directory scrivibile dal mondo, il che significa che qualsiasi utente può scriverci. Ma non vogliamo che un utente giochi con file creati da altri, quindi lo sticky bit è impostato (come indicato dallat
sui permessi per others). Ciò significa che un utente può eliminare i file in/tmp
, ma solo quelli creati da lui stesso. -
Un file chiamato
test.sh
ha i seguenti permessi:-rwsr-xr-x
, il che significa che il bit SUID è impostato. Ora, esegui i seguenti comandi:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Che cosa abbiamo fatto? Che cosa significa la
S
maiuscola?Abbiamo rimosso le autorizzazioni di esecuzione per l’utente proprietario del file. La
s
(ot
) prende il posto dellax
sull’output dils -l
, quindi il sistema ha bisogno di un modo per mostrare se l’utente ha i permessi di esecuzione o meno. Lo fa cambiando il case del carattere speciale.Una
s
minuscola sul primo gruppo di permessi significa che l’utente che possiede il file ha i permessi di esecuzione e che il bit SUID è impostato. UnaS
maiuscola indica che l’utente che possiede il file non ha (-
) i permessi di esecuzione e che il bit SUID è impostato.Lo stesso si può dire per SGID, una
s
minuscola sul secondo gruppo di permessi indica che il gruppo che possiede il file ha i permessi di esecuzione e che il bit SGID è impostato. UnaS
maiuscola indica invece che il gruppo che possiede il file non ha (-
) i permessi di esecuzione e che il bit SGID è impostato.Questo vale anche per lo sticky bit, rappresentato dalla
t
nel terzo gruppo di permessi. Lat
minuscola significa che è impostato lo sticky bit e che altri hanno i permessi di esecuzione. LaT
maiuscola significa che lo sticky bit è impostato e che gli altri non hanno i permessi di esecuzione. -
Come creereste una directory chiamata
Box
in cui tutti i file sono automaticamente di proprietà del gruppousers
e possono essere eliminati solo dall’utente che li ha creati?Questo è un processo in più fasi. Il primo passo è creare la directory:
$ mkdir Box
Vogliamo che ogni file creato all’interno di questa directory venga automaticamente assegnato al gruppo
users
. Possiamo farlo impostando questo gruppo come proprietario della directory e quindi impostando il bit SGID su di esso. Dobbiamo anche assicurarci che qualsiasi membro del gruppo possa scrivere in quella directory.Dato che non ci interessa sapere quali sono gli altri permessi e vogliamo “attivare” solo i bit speciali, ha senso usare la modalità simbolica:
$ chown :users Box/ $ chmod g+wxs Box/
Nota che se il tuo utente attuale non appartiene al gruppo
users
, dovrai usare il comandosudo
prima dei comandi sopra per eseguire la modifica come root.Ora per l’ultima parte, assicurandoti che solo l’utente che ha creato un file sia autorizzato a eliminarlo. Questo viene eseguito impostando lo sticky bit (rappresentato da una
t
) sulla directory. Ricorda che è impostato sui permessi per gli altri (o
).$ chmod o+t Box/
I permessi sulla directory
Box
dovrebbero essere i seguenti:drwxrwsr-t 2 carol users 4,0K Jan 18 19:09 Box
Ovviamente puoi specificare SGID e lo sticky bit usando un solo comando
chmod
:$ chmod g+wxs,o+t Box/
Punti bonus se ci hai pensato.