Molti sapranno che OSX è un derivato di UNIX, in particolare delle distribuzioni BSD e FreeBSD, e come tutti i sistemi UNIX eredita il tradizionale standard POSIX per la gestione dei permessi sui file. Nel corso dell’evoluzione informatica questo standard si è rivelato insufficiente a personalizzare le varie necessità di accesso ai file e nel mondo UNIX come all’interno di OS X si sono implementati sistemi più evoluti basati su ACL e attributi estesi.
Cosa è lo standard POSIX, cosa sono le ACL e cosa sono gli attributi estesi?
Facciamo un passo alla volta. Quando all’interno del terminale di OS X chiediamo la lista dei file usando il comando
# ls -la
si ottiene la lista di file e directory al di sotto della directory dove si è eseguito il comando. Cioè una cosa del tipo
total 24 drwxr-xr-x 5 michele staff 170 18 Gen 13:03 ./ drwx------+ 55 michele staff 1870 18 Gen 13:02 ../ -rw-r--r--+ 1 michele staff 6 18 Gen 13:03 file01 -rw-r--r--@ 1 michele staff 7 18 Gen 13:03 file02 -rw-r--r--@ 1 michele staff 7 18 Gen 13:03 file03
Ogni riga (a parte la prima che indica il totale di blocchi logici utilizzati per l’archiviazione dei file) riporta i permessi di accesso a ciascun file della directory secondo lo standard POSIX. Analizzando una riga per volta troviamo le seguenti informazioni:
- Un gruppo di 11 caratteri che contiene i pemerssi di accesso al file e che indica la presenza o meno di ACL o attributi estesi:
- il primo carattere è – per indicare che l’elemento è un file, d per indicare che è una directory e l per indicare un link simbolico
- i successivi 9 caratteri si sufddividono a gruppi di 3 e possono essere r, w, x oppure – a indicare rispettivamente il permesso di leggere (r), scrivere (w), eseguire (x) o nessuno dei tre (–) sull’elemento
- i primi 3 caratteri sono riferiti all’utente proprietario del file. Nell’esempio l’utente michele ha accesso in lettura e scrittura sui file e permesso di esecuzione sulle directory
- i 3 caratteri centrali invece si riferiscono al gruppo che possiede il file. Nell’esempio il file01 è in sola lettura per il gruppo staff
- i 3 finali invece si riferiscono a tutti gli altri utenti. Nell’esempio il file01 è in sola lettura
- l’ultimo carattere può non esserci oppure essere un + a indicare che sul file sono presenti ACL, oppure un @ per indicare la presenza di attributi estesi
- Il numero di hard links associati all’elemento
- l’utente proprietario dell’elemento
- il gruppo a cui è associato l’elemento
- la dimensione dell’elemento
- la data e l’ora dell’ultima modifica dell’elemento
- il nome dell’elemento
Non starò a spiegare come modificare i permessi standard sui file (basti sapere che chmod e chown sono i due comandi per farlo), ma mi concentrerò sulle ACL e sugli attributi estesi. Le ACL sono più avanzate rispetto alle tradizionali autorizzazioni in stile UNIX poiché consentono di definire un numero arbitrario di regole di autorizzazione per utente e gruppo su ogni file. Ogni regola di autorizzazione è nota come Acces Control Entry (ACE). Ogni file e directory del sistema può avere un numero illimitato di regole ACE, da cui la “lista” che prende il nome di ACL. Un + a destra dello schema dei permessi ci segnala la presenza di ACL specifiche per quell’elemento e per poterle vedere si deve usare il comando
# ls -lae
Otterremo quindi qualcosa di questo genere
total 24 drwxr-xr-x 5 michele staff 170 18 Gen 13:03 ./ drwx------+ 55 michele staff 1870 18 Gen 13:02 ../ 0: group:everyone deny delete -rw-r--r--+ 1 michele staff 6 18 Gen 13:03 file01 0: user:mario allow read,readattr,readextattr,readsecurity -rw-r--r--@ 1 michele staff 7 18 Gen 13:03 file02 -rw-r--r--@ 1 michele staff 7 18 Gen 13:03 file03
Si possono notare le due ACL presenti nei file ../ e file01 dove rispettivamente il gruppo everyone non ha il permesso di cancellazione e l’utente mario ha i soli permessi di lettura. Per vedere invece la lista degli attributi estesi associati ad ogni elemendo dovremo eseguire invece il comando
# ls -la@
otterremo qualcosa di questo genere
total 24 drwxr-xr-x 5 michele staff 170 18 Gen 13:03 ./ drwx------+ 55 michele staff 1870 18 Gen 13:02 ../ -rw-r--r--+ 1 michele staff 6 18 Gen 13:03 file01 -rw-r--r--@ 1 michele staff 7 18 Gen 13:03 file02 com.apple.FinderInfo 32 -rw-r--r--@ 1 michele staff 7 18 Gen 13:03 file03 com.apple.FinderInfo 32 com.apple.metadata:_kMDItemUserTags 54
Si può notare la presenza di attributi estesi in file02 e file03. OS X mette a disposizione una grande quantità di attributi estesi e ciascuno è dedicato a funzioni specifiche come la messa in quarantena dei file scaricati da internet, l’etichettatura dei file con i tag colorati e moltissime altre. La gestione degli attributi estesi avviene mediante l’uso del comando xattr In UNIX è anche possibile settare dei flag che similmente (ma in maniera molto meno raffinata) agli attributi estesi permettono di associare ai file delle proprietà particolari. In questo particolare esempio a file02 sono stati applicati i flag hidden e uchg che lo rendono invisibile nella GUI di OS X e protetto da modifiche.
Per farlo si usa il comando chflags
# chflags hidden file02 # chflags uchg file02
Per vedere quali flag sono stati attivati si deve chiedere l’output completo a ls in questo modo
# ls -laO
si ottiene qualcosa di questo tipo
total 24 drwxr-xr-x 5 michele staff - 170 18 Gen 13:03 ./ drwx------+ 55 michele staff - 1870 18 Gen 13:02 ../ -rw-r--r--+ 1 michele staff - 6 18 Gen 13:03 file01 -rw-r--r--@ 1 michele staff uchg,hidden 7 18 Gen 13:03 file02 -rw-r--r--@ 1 michele staff - 7 18 Gen 13:03 file03
Si può notare che l’aggiunta del parametro -O ha mostrato una nuova colonna contenente i flag associati al file.
Link
Come approfondimento si consiglia la lettura di questi link