OS X – ACL e Attributi Estesi

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

https://it.wikipedia.org/wiki/Permessi_(Unix)

https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/chflags.1.html

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

3 × 4 =