La gestione dei permessi dei file

16 / 100

Ciascun permesso corrisponde ad uno specifico bit di una variabile che viene mantenuta nell’inode del file insieme a tutte le altre proprieta dello stesso. Assegnare un permesso signi ca attivare il bit ad esso associato in questa variabile. La disposizione completa dei bit dei permessi, compresi quelli relativi ai permessi speciali, e riportata in fig. 1.6

Sfruttando questa disposizione e possibile utilizzare una notazione compatta che esprima lo stato dei permessi usando il valore di questa variabile. Dato che i permessi sono raggruppati a blocchi di tre bit, risulta naturale esprimere questo valore in notazione ottale,vale a dire con numeri in base 8, con le cifre che vanno da 0 a 7, in modo che ciascuna cifra corrisponda ad un gruppo di permessi. Se si fa riferimento allo schema di g. 1.6, in questo modo si avr che, partendo dalla meno signi cativa, la prima cifra esprime il valore dei permessi per gli altri, la seconda quello dei permessi per il gruppo, e la terza quello dei permessi per il proprietario. Con questa notazione allora i permessi presenti nel caso illustrato in g. 1.6 si possono indicare con la cifra 750.

Qualora serva specificare anche uno dei permessi speciali, occorrera usare anche la quarta cifra, se di nuovo si fa riferimento allo specchietto di g. 1.6, e lo si confronta con i permessi del comando passwd che si sono visti in precedenza, considerato che questo ha attivo il bit suid, si otterra che questi si possono esprimere con il valore 4755. Per la sua compattezza questa notazione, nonostante costringa l’utente a fare un po’ di conti in binario ed ottale, e molto utilizzata, ed una volta che ci si e abituati, finisce in genere anche col risultare piu immediata di quella ordinaria.

Il kernel prevede comunque una modalità per controllare i permessi assegnati di default.

Il sistema prevede che si parta da uno stato in cui alla creazione di un nuovo le i permessi di lettura e scrittura sono attivati per tutti, dove con tutti qui si vuole intendere sia il proprietario, che il gruppo, che tutti gli altri.

Si parte cioè da dei permessi espressi in forma numerica dal valore ottale di 666. Per la creazione di una nuova directory invece lo stato di partenza prevede anche l’assegnazione del permesso di esecuzione, con un valore corrispondente a 777.

Ovviamente lasciare aperti a chiunque i permessi di scrittura non e cosa molto saggia dal punto di vista della sicurezza. Per questo motivo il kernel mantiene per ogni processo una proprieta, chiamata umask, che viene ereditata nella creazione di un processo figlio. La umask specifica una maschera di bit che serve ad indicare quali permessi devono essere rimossi alla creazione di un nuovo file o directory. Il valore di default per la umask usato dalla gran parte delle distribuzioni e di 022; questo significa che i permessi di scrittura relativi al gruppo e a tutti gli altri sono cancellati alla creazione di un nuovo le o directory: i nuovi le saranno creati cioe con permessi 644 (lettura e scrittura per il proprietario e sola lettura per il gruppo e gli altri), mentre le nuove directory saranno create con permessi 755 (tutti i permessi per il proprietario ma solo lettura e attraversamento per il gruppo e gli altri).

Se invece si vuole cambiare solo il gruppo proprietario il comando da usare e chgrp, che prende di nuovo come primo argomento il nome del gruppo (o il valore numerico del group ID) seguito dalla lista dei le a cui applicare il cambiamento. I comandi chown e chgrp sono simili e prevedono opzioni analoghe: in particolare con -R si eseguono i cambiamenti ricorsivamente su tutto il contenuto di una directory e con –reference si puo fare riferimento alle credenziali prese da un altro le.

Inoltre entrambi i programmi, quando usati su un link simbolico, operano sul le a cui questo fa riferimento, a meno che non si usi l’opzione -h, nel qual caso si operera direttamente sul link.

Questa operazione in realtà assume un significato soltanto se il link e una directory con lo sticky bit attivo, dove cambiare proprietario del link simbolico significa modificare l’identità dell’utente che può cancellarlo.

Infine si tenga conto che modificare il proprietario di file è una operazione privilegiata, che su Linux puo essere eseguita solo dall’amministratore. Questa e una caratteristica di sicurezza mutuata da BSD che consente di evitare aggiramenti delle quote disco ; non e detto che sia presente su altri sistemi unix-like. In questo modo un utente normale non puo assegnare ad un altro utente i suoi le, e puo cambiare il gruppo proprietario soltanto per i le che gli appartengono, ed assegnare a questi ultimi soltanto gruppi a cui egli stesso appartiene. Solo l’amministratore ha la capacit piena di cambiare proprietario e gruppo di un le qualunque.

Altre operazioni privilegiate

Oltre al rispetto delle restrizioni imposte dai permessi dei le, il sistema sottopone gli utenti a controllo di accesso per una lunga serie di altre operazioni. Alcune le abbiamo gia incontrate, come il cambiamento di proprietario o gruppo proprietario, o la possibilita di inviare segnali ad un processo, che per un utente normale è ristretta ai soli processi lanciati da lui, o la possibilita di aumentare la priorita di esecuzione di un processo che è possibile solo all’amministratore. Oltre a queste ci sono una lunga serie di altre operazioni privilegiate che riguardano la rete , per cui solo l’amministratore può attivare e disattivare interfacce, modificare la tabella di instradamento dei pacchetti, applicare o rimuovere regole al sistema di firewall. All’amministratore inoltre e riservata l’allocazione delle prime 1024 porte usate dai protocolli UDP e TCP, per cui di norma soltanto lui e in grado di lanciare demoni che usano una di queste porte (dette per questo riservate) come un server web, di posta o un DNS.

Alcuni di questi attributi, in particolare quelli che permettono di imporre delle speciali re-strizioni all’accesso, possono essere impostati soltanto dall’amministratore, questo e il motivo per cui si e scelto di trattare questo argomento in questa sezione.

Facendo riferimento a delle estensioni che non e detto siano presenti su un qualunque tipo di filesystem gli attributi spe-ciali dei le non possono essere visualizzati con il comando ls; per visualizzarli è stato creato un apposito comando, lsattr.

Il comando che permette di impostare gli attributi speciali è chattr, questo prende come pri-mo argomento una stringa che identifica quali attributi attivare o disattivare, e come argomenti successivi una lista di file.

Il comando supporta anche l’opzione -R per eseguire ricorsivamente le operazioni quando nella lista dei le si e inclusa una directory, mentre se invocato con l’opzione -V diventa prolisso e descrive le operazioni effettuate.

La stringa che permette di speci care quali attributi attivare o disattivare e analoga a quella usata con chmod per i permessi, ciascun attributo e identi ficato da una lettera fra quelle riportate in cui pero non si sono menzionati alcuni attributi sperimentali, per i quali si rimanda alla lettura della pagina di manuale di chattr.

Per attivare un attributo occorrerà farla precedere dal carattere “+“, mentre se si vuole cancellare un attributo gia impostato si dovra usare il carattere ““.

Come per chmod si possono specificare insieme anche piu attributi, ed usare il carattere \=” per impostare la lista esatta di quelli che si vogliono impostare.