[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
Le informazioni amministrative su file e directory sono conservate nel file system che si utilizza. In questo senso, le informazioni gestite e gestibili dipendono dalle possibilità del sistema operativo e dal tipo di file system a disposizione.
La tabella 74.1 elenca i programmi e i comandi a cui si accenna in questo capitolo.
Tabella 74.1. Riepilogo dei programmi e dei comandi per la gestione delle proprietà, dei permessi e degli attributi di file e directory.
Ogni file e directory appartiene necessariamente a un utente e a un gruppo simultaneamente. L'appartenenza a un utente o a un gruppo particolare attribuisce significato ai permessi di accesso. Questi sono distinguibili in base al fatto che chi vuole accedere sia l'utente proprietario, o un utente del gruppo proprietario o un altro utente non appartenente a queste due categorie.
chown [opzioni] [utente][{:|.}[gruppo]] file...
Cambia la proprietà dei file. (1) Se viene fornito solo il nome dell'utente o il suo numero UID, questo diviene il nuovo proprietario dei file. Se il nome dell'utente, o il suo numero, è seguito da due punti verticali (:) oppure dal punto (.) e dal nome o dal numero di un gruppo (GID), vengono cambiate la proprietà dell'utente e la proprietà del gruppo. Se dopo : o . non segue il nome del gruppo, viene attribuito il gruppo principale a cui appartiene l'utente. Se prima di : o . non viene indicato il nome dell'utente, viene cambiata solo la proprietà del gruppo.
-R
Esegue l'operazione anche nelle sottodirectory.
#
chown tizio mio_file
L'utente root cambia l'utente proprietario del file mio_file
, facendo in modo che diventi tizio.
#
chown tizio.users mio_file
L'utente root cambia l'utente e il gruppo proprietario del file mio_file
, facendo in modo che diventino rispettivamente tizio e users.
$
chown .users mio_file
L'utente proprietario del file mio_file
cambia il gruppo. Il gruppo indicato fa parte di quelli a cui appartiene l'utente.
chgrp [opzioni] gruppo file...
Cambia il gruppo proprietario di file e directory. (2) Il gruppo, nell'argomento del comando, può essere espresso con il nome o con il numero GID. È equivalente a chown quando non si specifica l'utente.
-R
Esegue l'operazione anche nelle sottodirectory.
$
chgrp users mio_file
L'utente proprietario del file mio_file
cambia il gruppo. Il gruppo indicato fa parte di quelli a cui appartiene l'utente.
I permessi di accesso, attribuiti ai file o alle directory, definiscono le operazioni che con questi possono essere compiute a seconda dell'utente. La loro gestione è già stata introdotta nella sezione 5.7.5. Brevemente, si distinguono tre tipi di accesso:
r lettura;
w scrittura;
x esecuzione.
Il significato del tipo di accesso dipende dal tipo di file a cui si intende applicare. Per un file normale:
l'accesso in lettura permette di leggerne il contenuto;
l'accesso in scrittura permette di modificarne il contenuto;
l'accesso in esecuzione permette di eseguirlo, ammesso che si tratti di un eseguibile binario o di uno script di qualunque tipo.
Per una directory:
l'accesso in lettura permette di leggerne il contenuto, ovvero di poter conoscere l'elenco dei file in essa contenuti (di qualunque tipo essi siano);
l'accesso in scrittura permette di modificarne il contenuto, ovvero di creare, eliminare e rinominare dei file;
l'accesso in esecuzione permette di attraversare una directory.
I permessi di accesso si possono esprimere in due forme diverse: attraverso una stringa alfabetica o un numero ottale. La stringa utilizza le lettere «r», «w» e «x» per rappresentare i permessi di lettura, scrittura ed esecuzione, mentre quando si utilizza la notazione ottale, il numero quattro rappresenta un permesso di lettura, il numero due rappresenta un permesso di scrittura e il numero uno rappresenta un permesso di esecuzione. Si ottiene la combinazione di più tipi di permesso di accesso sommando le cifre necessarie.
La notazione numerica ottale è preferibile rispetto a quella simbolica, essendo più completa e immediata. In particolare, se il numero non utilizza tutte le cifre, si intende che manchino quelle anteriori e che queste siano semplicemente azzerate.
Oltre ai permessi di accesso per un file o per una directory, si annotano altre informazioni, definibili nell'insieme come modalità dei permessi. In tutto vengono usate quattro cifre ottali (12 bit), dove la prima riguarda alcune situazioni particolari:
Sticky (Save text image), se si tratta di un eseguibile, durante l'esecuzione salva l'immagine testo nella memoria virtuale;
SGID, attiva il numero del gruppo (GID) durante l'esecuzione, ovvero, attribuisce all'eseguibile in funzione i privilegi del gruppo a cui appartiene;
SUID, attiva il numero dell'utente (UID) durante l'esecuzione, ovvero, attribuisce all'eseguibile in funzione i privilegi dell'utente a cui appartiene;
Le altre tre cifre, riguardano rispettivamente i permessi di accesso attribuiti all'utente proprietario, al gruppo e agli altri utenti. Per esempio, la modalità 7558, pari a 07558, indica che l'utente proprietario può leggere, modificare ed eseguire il file, mentre, sia gli utenti del gruppo che gli altri possono solo leggere ed eseguire il file.
Il modo migliore per comprendere il funzionamento delle modalità SUID e SGID è quello di fare qualche prova. Si inizia facendo una copia dell'eseguibile touch nella propria directory personale.
tizio$
cd
[Invio]
tizio$
pwd
[Invio]
/home/tizio
tizio$
cp /bin/touch .
[Invio]
tizio$
ls -l touch
[Invio]
-rwxr-xr-x 1 tizio tizio 33156 Mar 2 08:46 touch
Si deve agire temporaneamente come utente root per cambiare la modalità dei permessi e la proprietà di questo eseguibile.
tizio$
su
[Invio]
Password:$
******
[Invio]
Si cambia la proprietà del file.
root#
chown root.root touch
[Invio]
root#
ls -l touch
[Invio]
-rwxr-xr-x 1 root root 33156 Mar 2 08:46 touch
Si attribuisce la modalità SUID.
root#
chmod u+s touch
[Invio]
root#
ls -l touch
[Invio]
-rwsr-xr-x 1 root root 33156 Mar 2 08:46 touch
Si può quindi ritornare allo stato precedente, lasciando i privilegi dell'utente root e riprendendo l'identità dell'utente tizio.
root#
exit
[Invio]
Si può provare a creare un file utilizzando l'eseguibile touch su cui è stato attivato il bit SUID.
tizio$
./touch superfile
[Invio]
tizio$
ls -l superfile
[Invio]
-rw-rw-r-- 1 root tizio 0 Mar 2 09:03 superfile
Si può osservare che il file creato appartiene all'utente root, pur essendo stato creato da un utente comune. Si può comprendere quindi, quanto sia pericoloso utilizzare queste modalità speciali, SUID e SGID, senza oculatezza.
Le modalità SUID e SGID per uno script non hanno senso, perché non si tratta di un programma autonomo, ma di qualcosa che viene eseguito da una shell. Eventualmente, è la shell a dovere avere le modalità SUID o SGID attive, perché lo script possa agire con i privilegi di un altro utente.
È chiaro che si tratta di un'ipotesi astratta: l'idea di attribuire le modalità SUID e SGID a una shell è semplicemente terribile. |
I 3 bit iniziali della modalità dei permessi meritano un po' di attenzione anche quando si tratta di directory.
La directory che abbia il bit Sticky attivo (d--x--x--t) non consente la cancellazione e la ridenominazione di un file da parte di un utente diverso da quello proprietario, anche se questo tentativo viene fatto da chi ha il permesso di scrittura sulla directory. Il bit Sticky viene attribuito generalmente alla directory /tmp/
(oltre che a /var/tmp/
) quando questa risulta accessibile da ogni utente in tutti i modi: drwxrwxrwt. Ciò permette di evitare che i file possano essere cancellati o rinominati da utenti diversi dai proprietari.
La directory con il bit SGID attivo (d--x--s--x) fa in modo che i file (e le directory) che verranno creati al suo interno appartengano al gruppo della directory stessa.
Quando viene creato un file, questo appartiene automaticamente all'utente che lo crea e al gruppo principale dell'utente stesso. I permessi gli vengono attribuiti in base alla maschera dei permessi (umask). Questa maschera rappresenta i permessi che non vengono attribuiti.
Di solito, il suo valore è 0228 e con questo, non viene attribuito il permesso di scrittura (28) né al gruppo proprietario, né agli altri utenti. Il valore di questa maschera può essere modificato attraverso un comando interno di shell: umask (64.39).
chmod [opzioni] modalità_dei_permessi file...
Cambia la modalità dei permessi sui file indicati come argomento. (3) Le modifiche della modalità dei permessi avvengono in base alle specifiche indicate nell'argomento precedente all'elenco dei file e si possono esprimere con la sintassi seguente:
[u|g|o|a]...[{+|-|=}{r|w|x|X|s|t|u|g|o}...][,...]
Una combinazione delle lettere u, g, o, a controlla il tipo di utenti a cui si vuole riferire il cambiamento di permesso:
u | Utente proprietario del file. |
g | Gruppo proprietario del file. |
o | Utente diverso. |
a | Tutti gli utenti indifferentemente. |
Se l'indicazione degli utenti su cui intervenire non viene fornita, la variazione agisce in funzione della maschera dei permessi che può essere modificata attraverso il comando di shell umask (64.39). In pratica, la variazione riguarda tutti i tipi di utente, a esclusione dei bit attivati nella maschera dei permessi.
I segni +, -, = indicano il tipo di cambiamento sui permessi:
+ | Le modalità dei permessi indicate vengono aggiunte. |
- | Le modalità dei permessi indicate vengono tolte. |
= | Le modalità dei permessi vengono modificate in modo da diventare esattamente come indicato. |
Il gruppo finale di lettere r, w, x, X, s, t, u, g, o indica i permessi su cui agire:
Non è possibile cambiare i permessi dei collegamenti simbolici: se si interviene su un collegamento simbolico si agisce in realtà sul file di destinazione. |
-R
Esegue l'operazione anche nelle sottodirectory.
$
chmod -R go-rwx ~/*
Toglie sia al gruppo che agli altri utenti la possibilità di accedere in qualunque modo ai file della propria directory personale e anche nelle sottodirectory successive.
Le caratteristiche standard di un file in un sistema Unix sono le proprietà e i permessi. In alcuni casi è possibile attribuire altri attributi come quando si utilizza un file system Ext2 o Ext3. Naturalmente, è compito del kernel fare in modo che questi attributi siano gestiti in modo corretto.
chattr [opzioni] [modalità] file...
Cambia gli attributi su un file system di tipo Ext2 o Ext3. (4) L'interpretazione corretta di questi attributi dipende dal kernel, ma per il momento non sono tutti funzionanti come progettato (in particolare, potrebbero mancare ancora gli attributi c e u).
Gli attributi vengono espressi attraverso una modalità simbolica secondo la sintassi seguente:
+|-|={A|S|a|c|d|i|s|u}...
La variazione degli attributi si esprime attraverso i simboli +, - e =, secondo lo schema seguente:
+ | Gli attributi indicati vengono aggiunti. |
- | Gli attributi indicati vengono tolti. |
= | Gli attributi vengono modificati in modo da diventare esattamente come indicato. |
Gli attributi da variare si individuano utilizzando le lettere A, S, a, c, d i, s e u:
lsattr [opzioni] file...
Elenca gli attributi dei file su un file system di tipo Ext2 o Ext3. (5)
-R
Esegue l'operazione anche nelle sottodirectory.
-a
Elenca tutti i file, anche quelli che iniziano con un punto (i cosiddetti file nascosti).
-d
Elenca anche le directory come i file, invece di elencare direttamente il loro contenuto.
Tutti i file riportano tre indicazioni data-orario:
ctime -- la data e l'ora di creazione (riferita all'inode): questa viene modificata in particolare quando si cambia lo stato del file (permessi e proprietà);
mtime -- la data e l'ora di modifica: questa viene modificata quando si modifica il contenuto del file;
atime -- la data e l'ora di accesso: questa cambia quando si accede al file anche solo in lettura.
touch [opzioni] file...
Cambia la data (si intende sia la data che l'ora) di accesso e di aggiornamento dei file. (6) Se non viene specificata una data, viene utilizzata la data e l'ora ottenuta dall'orologio del sistema nel momento in cui viene eseguito il comando. Se si specificano file che non esistono, questi vengono creati vuoti.
-a | --time=atime | --time=access | --time=use
Viene cambiata solo la data di accesso.
-c | --no-create
Non vengono creati i file che non esistono.
-m | --time=mtime | --time=modify
Cambia solo la data di aggiornamento.
-r file_di_riferimento | --file file_di_riferimento
Riproduce gli stessi dati del file indicato.
-t MMGGhhmm[[AA]AA[.ss]]
Usa l'argomento (mese, giorno, ore, minuti, secolo, anno, secondi) invece di utilizzare la data corrente.
daniele @ swlibero.org
1) GNU file management utilities GNU GPL
2) GNU file management utilities GNU GPL
3) GNU file management utilities GNU GPL
4) Second extended file system management programs GNU GPL
5) Second extended file system management programs GNU GPL
6) GNU file management utilities GNU GPL
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome propriet_agrave_permessi_e_attributi.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]