• permessi-file-directory-linux

    Permessi per file e directory su Linux

    In questo post vedremo cosa sono i permessi su file e directory in base all’utente o al gruppo di appartenenza e come impostarne le restrizioni.

    Operazioni sui file e permessi

    Ciascun utente possiede una propria directory personale (ad esempio /home/os per l’utente os), all’interno della quale si può muovere liberamente, occupando spazio fisico su disco (l’utente collocherà qui i propri file) e accedendo a file e directory.

     

    Mediante i permessi viene delineato ciò che un utente può fare o meno in base ai privilegi che gli sono stati attribuiti dall’amministratore. In altre parole i permessi di un file (o di una directory) sono le autorizzazioni concesse all’utente che permettono di fare o non fare alcune operazioni sul file(o sulla directory). Per i file le operazioni possibili essi possono essere di tre tipi:

    • lettura (r): è il privilegio di un utente di poter vedere il contenuto di un file. Il file /etc/shadow è un esempio di file la cui lettura non è consentita a un utente normale. La lettera r associata al permesso di lettura sta per “read”.
    • scrittura (w): è il privilegio che consente di modificare (o cancellare) un file o il contenuto di una directory. Un esempio di file con l’accesso in scrittura negato a un normale utente è il file /etc/passwd. La lettera w associata al permesso di scrittura sta per “write”.
    • esecuzione (x): è il privilegio che consente eseguire un file o di poter entrare in una directory. Ogni file può esser reso eseguibile, cosa che ha senso ovviamente se si tratta di uno script o di un binario compilato. La lettera x associata al permesso di esecuzione sta per “execute”.

    La mancanza di uno di questi permessi viene rappresentata con il simbolo “-“.

    Per le directory le operazioni possibili essi possono essere di tre tipi:

    • r: è il privilegio di un utente di poter vedere il contenuto di una directory.
    • w: è il privilegio che consente di creare/modificare/cancellare una directory o il contenuto di una directory.
    • x: è il privilegio che consente attraversare directory, ad esempio con il comando cd.

     

    Come vedere i permessi

    Per vedere i permessi dei file e delle directory all’interno della directory /home/os/script, è sufficiente entrare nella directory e digitare il comando ls-al:

    linux-visione-permessi-file-directory

    Ciascuna riga fornisce informazioni per ciascun elemento. Ad esempio, il file hello.sh ha la seguente configurazione:

    -rwxr-xr-x  1  os  os  29  Oct  11  11:43   hello.sh

    Ciascuno dei nove campi dell’output del comando ls -al ha il seguente significato:

    1. permessi e tipo (-rwxr-xr-x)
    2. hard links (1)
    3. owner (os)
    4. group (os)
    5. dimensione (20)
    6. mese dell’ultima modifica (Oct)
    7. giorno dell’ultima modifica (11)
    8. ora dell’ultima modifica (11:43)
    9. file (hrllo.sh)

    I campi di interesse per quanto riguarda i permessi sono il primo (permessi e tipo), il terzo (owner) e il quarto (group).

     

    Proprietario e gruppo dei file/directory

    Il terzo campo indica chi è il proprietario del file (owner), mentre il quarto campo qual è il gruppo di appartenenza (group). Nell’esempio il proprietario è os e il gruppo è os. Più avanti nell’articolo vedremo come si modificano utente proprietario e gruppo.

    Come funzionano i permessi

    Il primo campo indica la tipologia della risorsa e i permessi. La stringa dei permessi di un file è composta da 10 caratteri e può essere divisa in quattro sezioni.

    linux-permessi

    La prima sezione (evidenziata in grigio in figura) corrisponde al primo carattere e indica la tipologia della risorsa. Le possibilità sono tre:

    1. file normale (-)
    2. directory (d)
    3. link (l)

    In figura il trattino indica che la risorsa è un file normale.

    Le successive tre sezioni indicano i permessi rispettivamente delle seguenti categorie di utente, rappresentate dall’acronimo ugo (user group others):

    • l’utente (u), dove la lettera u significa user.
    • il gruppo (g), dove la lettera g significa group.
    • gli altri utenti (o), dove la lettera o significa others.

    I permessi dell’utente

    I tre caratteri della seconda sezione (nella figura in azzurro, rwx) dalla seconda alla quarta posizione rappresentano i permessi dell’utente a cui appartiene il file.

    Ogni posizione della tripletta “rwx” è associata a un particolare permesso:

    • Il permesso di lettura (r). Il primo carattere della tripletta indica il permesso di lettura (r) o la mancanza di questo permesso (-) sul file da parte dell’utente proprietario.
    • Il permesso di scrittura (w). Il secondo carattere della tripletta indica il permesso di scrittura (w) o meno (-) sul file da parte dell’utente.
    • Il permesso di esecuzione (x). Il terzo carattere della tripletta indica il permesso di esecuzione (x) o meno (-) sul file da parte dell’utente.

    Nell’esempio, essendo presenti tutti e tre i permessi “rwx”, l’utente os può leggere, modificare ed eseguire il file hello.sh.

     

    I permessi del gruppo

    I tre caratteri della terza sezione (nella figura in giallo, r-x) dalla seconda alla quarta posizione rappresentano i permessi del gruppo associato al file.

    Ogni posizione della tripletta “r-x” è associata a un particolare permesso:

    • Il permesso di lettura (r). Il primo carattere della tripletta indica il permesso di lettura (r) o la mancanza di questo permesso (-) sul file da parte del gruppo.
    • Il permesso di scrittura (w). Il secondo carattere della tripletta indica il permesso di scrittura (w) o meno (-) sul file da parte del gruppo.
    • Il permesso di esecuzione (x). Il terzo carattere della tripletta indica il permesso di esecuzione (x) o meno (-) sul fileda parte del gruppo.

    Nell’esempio, essendo presenti solo i permessi di lettura ed esecuzione “r-x”, l’utente appartenente al gruppo os può leggere ed eseguire il file hello.sh, ma non modificarlo.

     

    I permessi degli altri utenti

    I tre caratteri della quarta sezione (nella figura in rosso, r-x) dalla seconda alla quarta posizione rappresentano i permessi degli “altri utenti” associato al file.

    Ogni posizione della tripletta “r-x” è associata a un particolare permesso:

    • Il permesso di lettura (r). Il primo carattere della tripletta indica il permesso di lettura (r) o la mancanza di questo permesso (-) sul file da parte degli altri utenti.
    • Il permesso di scrittura (w). Il secondo carattere della tripletta indica il permesso di scrittura (w) o meno (-) sul file da parte degli altri utenti.
    • Il permesso di esecuzione (x). Il terzo carattere della tripletta indica il permesso di esecuzione (x) o meno (-) sul file da parte degli altri utenti.

    Nell’esempio, essendo presenti solo i permessi di lettura ed esecuzione “r-x”, gli altri utenti possono leggere ed eseguire il file hello.sh, ma non modificarlo.

     

    Il formato numerico dei permessi

    Per ciascuna tripletta, l’informazione rappresentata dalle lettere “rwx” o dal simbolo “-” può essere rappresentata anche in forma numerica binaria (e corrispondente trasposizione in decimale), sostituendo per ogni posizione il carattere (rwx) con 1 e il carattere (-) con 0.

    DecimaleBinarioStringa dei permessiSignificato
    0000---nessun permesso
    1001--xesecuzione
    2010-w-scrittura
    3011-wxscrittura ed esecuzione
    4100r--lettura
    5101r-xlettura ed esecuzione
    6110rw-lettura e scrittura
    7111rwxlettura, scrittura ed esecuzione

    La rappresentazione in forma decimale è molto compatta. Il suo funzionamento è basato su delle combinazioni numeriche che ci danno univocamente i permessi di un file. Con questa rappresentazione viene assegnato il valore 1 al permesso di esecuzione, 2 a quello di scrittura e 4 a quello di lettura. La somma di questi valori (il range è da 0 a 7) ci dà il permesso risultante per l’utente, il gruppo o gli altri utenti.

    Vediamo alcuni esempi:

    • la stringa di permessi “rwx rwx rwx” diventa “111 111 111” in binario o “777” in decimale;
    • la stringa di permessi “rwx — —” diventa “111 000 000” in binario o “700” in decimale;
    • la stringa di permessi “rwx r-x r–” diventa “111 101 100” in binario o “754” in decimale;
    • la stringa di permessi “rw- r– r–” diventa “110 100 100” in binario o “644” in decimale;

    Il formato numerico è utile per modificare i permessi in modo rapido.

    Il comando chmod per modificare i permessi

    Per cambiare i permessi per i file si utilizza il comando chmod, la cui sintassi ammette due modi di indicare i permessi, uno sotto forma di 3 cifre decimali (nel range da 0 a 7 inclusi), e uno attraverso degli operatori simbolici. La sintassi per entrambi è la seguente:

    chmod permessi nomefile

    Dove permessi cambia in base alla sintassi numerica o mediante operatori simbolici.

    Sintassi numerica del comando chmod

    La sintassi numerica utilizza la numerazione delle tre cifre decimali nel range 0-7 per impostare i permessi. Ad esempio:

    chmod 777 hello.sh

    imposta i permessi del file hello.sh al valore “rwx rwx rwx”.

    Altro esempio:

    chmod 754 hello.sh

    imposta i permessi del file hello.sh al valore “rwx r-x r–“.

    Sintassi con operatori simbolici del comando chmod

    La sintassi che utilizza gli operatori simbolici indica un identificativo (u per l’owner, g per il gruppo, o per gli altri, a per tutti e tre) per gli utenti che accedono al file dei quali vogliamo cambiare i permessi seguito da un + o un – a o un = a seconda che vogliamo aggiungere o togliere o impostare quel determinato permesso e da r, w oppure x in base alle modifiche da attuare. La sintassi del comando diventa:

    chmod [ugoa] [+-=] nomefile

    Ad esempio:

    chmod u+w hello.sh

    aggiunge i permessi di scrittura all’utente per il file hello.sh. Se prima ad esempio era “r– r– r–” diventa “rw- r– r–“.

    Altro esempio:

    chmod ug+rwx hello.sh

    aggiunge i permessi di lettura, scrittura ed esecuzione all’utente e al gruppo per il file hello.sh. Se prima ad esempio era “r– r– r–” diventa “rwx rwx r–“.

    Altro esempio:

    chmod a-w hello.sh

    toglie i permessi di scrittura a tutti per il file hello.sh. Se prima ad esempio era “rwx rwx r–” diventa “r-x r-x r–” .

    Ultimo esempio:

    chmod a=rwx hello.sh

    assegna i permessi di lettura, scrittura ed esecuzione a tutti per il file hello.sh. Se prima ad esempio era “rwx rwx r–” diventa “rwx rwx rwx” .

     

    Il comando chown per modificare il proprietario del file

    Il comando chown (change owner) viene utilizzato per modificare l’utente proprietario e/o il gruppo assegnato ad un file o ad una directory. Per poterlo fare però l’utente che modifica il proprietario deve avere i privilegi. Di solito è un’operazione che viene eseguita come root. La sintassi di chown è la seguente:

    chown nomeutente file

    oppure

    chown nomeutente:nomegruppo file

    Nel primo caso si modifica solo il proprietario, nel secondo il proprietario e il gruppo.

    Ad esempio:

    chown giulio elenco.txt

     

    Il comando chgrp per modificare il gruppo

    Il comando chgrp (change group) viene utilizzato per modificare il gruppo assegnato ad un file o ad una directory. Per poterlo fare però l’utente che modifica il gruppo deve avere i privilegi. Di solito è un’operazione che viene eseguita come root. La sintassi di chgrp è la seguente:

    chgrp nomegruppo file

    Ad esempio:

    chgrp root elenco.txt

     

    Ricorsività per il comando chmod, chown e chgrp

    I comandi chmod, chown e chgrp supportano la modalità ricorsiva, che risulta molto comoda se si deve agire su una cartella e su tutto quanto è in essa contenuto.
    Per attivare la modalità ricorsiva si utilizza l’opzione -R:

    chmod -R permessi nomecartella
    chown -R nomeproprietario nomecartella
    chown -R nomeproprietario:nomegruppo nomecartella
    chgrp -R nomegruppo nomecartella

     

    Giulio Cantali – IT Consultant

    Creatore di Database Master, il primo percorso per diventare esperti di database

Lascia un commento

Se vuoi condividere la tua opinione, lascia un commento

Puoi usare questi tag e attributi: HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">