GNU/Linux e le Access Control List

In questo post viene citato spesso UGO ma non ha nulla a che fare con il Ragionier Fantozzi
Questo articolo è un po’ tecnico e quello che viene spiegato probabilmente non è molto importante per l’uso quotidiano del computer. Però permette di approfondire un argomento, quello dei permessi, che è fondamentale nei sistemi operativi.
UGO, ovvero i permessi Unix
I sistemi Unix, tutti, compreso GNU/Linux, gestiscono normalmente i permessi dei file e delle directory con uno schema chiamato “UGO” = User, Group, Others
Vediamo come interpretarli. Gestiremo tutto da grafica, senza l’ausilio della riga di comando.
Prima di tutto è bene configurare Nautilus per visualizzare i permessi nella forma tradizionale piuttosto che in quella semplificata di default. Lanciamo gconf-editor e settiamo la chiave
/apps/nautilus/preferences/show_advanced_permissions.
Come è spiegato nella documentazione che appare nella parte inferiore della finestra:
If set to true, then Nautilus lets you edit and display file permissions in a more unix-like way, accessing some more esoteric options.
Ora click destro su un file qualsiasi (che sia in una partizione non Windows), proprietà > permessi e vediamo…
Questi sono i tradizionali permessi Unix. Ogni file ha un utente proprietario (in questo caso io) e un gruppo proprietario (in questo caso il gruppo formato solo da me). Posso quindi definire cosa è possibile fare con questo file da parte del proprietario o di un gruppo di utenti. Posso concedere la lettura, la scrittura o l’esecuzione del file. O posso assegnare il file ad un altro gruppo. E posso ad esempio decidere che i membri di questo gruppo possono leggerlo o anche scriverlo (quindi modificarlo e cancellarlo).
Facciamo un esempio. Diciamo che ho tre utenti sulla macchina che chiameremo Gianni, Sabrina e Francesco. Gianni e Sabrina sono fidanzati mentre Francesco è il fratello minorenne di Sabrina.
Ora Gianni e Sabrina hanno sul pc il loro filmino erotico privato un file OpenOffice dove scrivono un diario della loro tenera storia d’amore.
Non vogliono però che il file sia accessibile a Francesco. Come fare? Basterà dare al file le seguenti caratteristiche:
Proprietario: Gianni
Gruppo: Gianni creerà un nuovo gruppo e lo chiamerà, ad esempio, “GiaSab” dalle iniziali dei loro nomi.
Permessi “UGO”: RW- | RW- | – – –
vale a dire che il proprietario (prima terna) può leggere e scrivere, lo stesso il gruppo (la seconda terna) mentre gli agli non potranno fare nulla. Questa situazione è rappresentata su Nautilus così:
Ora basterà aggiungere sia Gianni che Sabrina al gruppo GiaSab, cosa che può essere fatta agevolmente da grafica nella gestione Utenti e Gruppi (menu Sistema > Amministrazione)
Da questa interfaccia possiamo creare e gestire tutti i gruppi e gli utenti della macchina.
Questa organizzazione è più che sufficiente nel 99% dei casi, anche nei server di grandi organizzazioni o su macchine condivise da centinaia di utenti.
Mettiamo però il caso di una macchina in cui abbiamo un file particolare e … 1000 utenti. Vogliamo che questo file sia accessibile da tutti, tranne uno. E’ un caso ovviamente di fantasia, di solito non capitano cose del genere, ma è un cosiddetto “caso limite”.
Con i tradizionali permessi UGO la fatica sarebbe abbastanza immane. Bisognerebbe di fatti aggiungere 999 utenti ad un gruppo, tranne appunto l’utente discriminato. La cosa sarebbe pure fattibile con uno script, ma immaginiamo che i file siano 10 e che l’utente da escludere sia sempre uno diverso…e immaginiamo poi di dover fare questa operazione spesso, con variabili che cambiano (ad esempio 2 utenti da escludere, 10 utenti da escludere, 15 file, ecc.). Il tutto diventerebbe poco pratico.
Per fortuna GNU/Linux, come molti altri sistemi Unix (e come Windows nelle versioni Professional e Server), implementa le Access Control List (ACL). Nel caso di Unix si chiamano POSIX ACL anche se, in realtà, non fanno ufficialmente parte dello standard POSIX.
Le ACL
Il nome ACL è abbastanza esplicativo: “lista di controllo per l’accesso (ai file). Invece di avere semplicemente proprietario, gruppi e altri con una ACL posso decidere per ciascun utente, cosa può fare o non fare con quel file. Questa caratteristica prende il nome di granularità, in soldoni è il livello di dettaglio a cui posso spingermi.
Vediamo un’anteprima:
Salta subito all’occhio la caratteristica principale: ho una lista di utenti (sotto), posso aggiungerli all’ACL del file (sopra) e per ciascuno di loro decidere cosa può o non può fare. La stessa cosa è possibile per i gruppi.
Vediamo come ottenere questo risultato.
Supporremo di avere una partizione formattata in ext3 (o ext4 o ext2 o qualsiasi altro filesystem di tipo Unix) e chiamata /dev/sdb1 (potrebbe essere ad esempio una pennetta usb).
Montiamola con le ACL sul punto di mount (precedentemente creato) /media/sdb1 (o altro nome qualsiasi) :
sudo mount /dev/sdb1 /media/sdb1 -o defaults,acl
L’opzione acl dice al sistema di abilitare le acl. Ora potremmo gestire il tutto da riga di comando con alcuni noiosissimi comandi come getfacl e setfacl che troviamo nel pacchetto chiamato acl in Debian/Ubuntu. Invece voglio farvi vedere come farlo da grafica.
Installiamo quindi il pacchetto eiciel, killiamo Nautilus e riavviamolo, oppure usciamo e rientriamo nella sessione.
Ora andiamo su /media/sdb1 precedentemente montata e copiamoci dentro un file qualsiasi. Poi tasto destro del mouse, proprietà e… sorpresa:
Ecco la nostra nuova tab con i controlli per le ACL 🙂
Ora possiamo aggiungere o togliere utenti, negare e autorizzare.
Quasi nessuno le usa, però è bello sapere che ci sono.
Uno standard non-standard
Come accennavo prima, le ACL non fanno ufficialmente parte di nessuno standard Unix. Esistono però delle bozze di standard, chiamate POSIX.1e che, verso la fine degli anni ’90, avrebbero dovuto definire le ACL per i sistemi Unix, anche per non farsi scavalcare da Windows NT che le aveva di default. Ma la cosa non suscitò particolari entusiasmi, vista anche la limitata utilità anche se lo Unix più in voga nelle grandi infrastrutture (Solaris/Sun OS) le aveva già implementate nella versione 2.5 del 1995, ben prima che fosse redatto il documento di standardizzazione. L’implementazione in FreeBSD risale al 2000, quella nel kernel Linux tra il 2003 e il 2004 anche se in realtà c’è voluto molto tempo prima che tutte le utility fossero massicciamente adattate al loro uso .
Le ACL e Windows
Da sempre Windows NT gestisce i permessi tramite ACL, croce e delizia di ogni sysadmin.
La prima volta che mi trovai di fronte a questa maschera (era su Windows NT 4.0) sudai freddo. Che differenza c’è tra “Modifica” e “Scrivi”? Perché c’è “Leggi” e “Leggi ed Esegui”? Che succede quando modifico i permessi di una cartella? Quelli dei file vengono ereditati o no dalla cartella? E altre domande inquietanti.
La risposta è pure peggio. Alcuni di questi particolari cambiano un po’ a seconda della versione di Windows. E se per caso hai un disco formattato con Windows NT 4 e poi passi al 2000 … che succede? Userà le regole di NT o di 2000? E XP? E Vista? e Seven??? mmm….
Vi sembrerà strano, ma ad ogni versione di Windows gli amministratori di sistemi devono leggersi molte pagine per capire come sono cambiati i particolari di cose come le ACL del filesystem o del registro di sistema, delle Active Directory eccetera eccetera.
Tutte cose che se fossero state concepite per bene dall’inizio, sarebbero durate praticamente immutate per quarant’anni, come i vecchi e cari permessi UGO.
Approfondimenti:
Le ACL POSIX con i sistemi GNU/Linux: http://a2.pluto.it/a2227.htm








Ciao, Ottimo ottimo articolo/recensione sui permessi!!!
Ho letto tutto d’un fiato. Molte cose non le conoscevo e grazie a te ora le apprendo.
Ciao continua cosi!
"Mi piace""Mi piace"
invece il mio problema che con i filesystem Linux è questo:
come faccio a creare una cartella o una partizione (meglio una cartella in /home) e dargli i permessi in lettura e scrittura a 2 o più utenti, ma non solo per i file contenuti all’interno ma anche per file e directory creati in futuro?
ad esempio voglio creare una directory /home/MyMusic gestibile in lettura / scrittura da da 2 utenti
le info che trovo parlano sempre di condivisione samba e unix per file su rete locale, non sono mai riuscito a trovare info sulla condivisione della stessa macchina
un’altro esempio potrebbe essere rendere la mia cartella /home/utente1/Video condivisa con la cartella Video dell’utente2
spero di essermi spiegato bene
"Mi piace""Mi piace"
Mi sono sbattuto recentemente su questo problema perché a quanto ho visto alcuni programmi tra cui proprio Gnome stesso, non rispettano i permessi predefiniti con umask in /etc/profile. Per cui se il file lo crei da terminale puoi associarlo al gruppo a cui appartiene la cartella con permessi RW per il gruppo, mentre se lo fai da grafica non funziona.
Un metodo “sporco” è quello di creare una finta partizione (un file immagine) da montare e rendere accessibile a tutti gli utenti.
Mentre il metodo “pulito” è proprio quello di usare le acl come spiegato qui: http://www.linuxquestions.org/questions/linux-desktop-74/applying-default-permissions-for-newly-created-files-within-a-specific-folder-605129/
Oppure ancora meglio modificare l’umask per gnome nel file: /etc/X11/Xsession.d/55gnome-session_gnomerc
L’umask predefinito è 022 bisogna metterlo a 002 e poi settare il GID della cartella interessata (vedi sopra l’immagine di nautilus dove dice imposta ID gruppo).
Un metodo ancora migliore, che dovrebbe funzionare sempre, è usare libpam-umask come spiegato qui: http://muzso.hu/2008/01/22/default-permissions-with-libpam-umask
(ma questo non l’ho sperimentato)
"Mi piace""Mi piace"
ok, quindi
sudo mkdir /home/MyMusic
sudo ??? /home/MyMusic
"Mi piace""Mi piace"
mi segno tutto e la prossima volta che mi viene voglia di eliminare la partizione ntfs faccio degli esperimenti
"Mi piace""Mi piace"
Ciao Guido, ottimo articolo come al solito: solo due cose. Come fare per creare utenti e gruppi dalla shell invece che da grafica? (infatti preferisco usare chown e chmod dalla linea di comando per fare le cose da te indicate) . Inoltre visto che molti tuoi articoli li stampo perché utili da rileggere in qualunque momento, perché dal tuo sito non attivi un’opzione come sul forum di LinuxQualityHelp per stampare direttamente?
Mi tocca usare printwhtoyoulike poi provare a stampare la pagina in virtuale con cups.pdf ed infine se va bene la stampo? Un pò laborioso.
Grazie e alla prossima.Ciao
"Mi piace""Mi piace"
adduser crea nuovi utenti (oppure aggiunge un utente a un gruppo)
addgroup crea nuovi gruppi.
"Mi piace""Mi piace"
Ciao Guiodic (ben-ritrovato, si sente la tua [mancanza|minore presenza] sul forum…),
complimenti come sempre.
Una sola domanda: la modifica della modalità di visualizzazione dei permessi che proponi all’inizio, con gconf-editor, è solo una questione “estetica”, di leggibilità, oppure c’è qualche vantaggio concreto rispetto all’impostazione di default ?
"Mi piace""Mi piace"
Esagerato 😀
write = puoi modificare file e crearne di nuovi
modify = puoi modificare file a non crearne di nuovi
read = puoi leggere i file ma non eseguire exe o batch
read & execute = puoi leggere i file ed eseguire exe o batch
Questo vale per i singoli utenti.
Sulle acl, per file specifici imposti poi le opzioni per i vari utenti non privilegiati.
Qualsiasi admin dovrebbe comunemente saper usare queste cose, else l’agricoltura ha sempre bisogno di braccia fresche.
Il problema è il basso livello degli addetti ai lavori, dipendente dalle scadenti e ridicole cifre che le imprese riversano nella parte IT, spendono tanti soldi in HW e SW e pochissimo per le risorse umane che li devono gestire.
"Mi piace""Mi piace"
sì è chiaro che un sysadmin lo sa, sennò non è il suo mestiere. La mia era un po’ di ironia. Ma ammetterai pure che è stravagante avere “read” e “read & execute”.
Inoltre come dicevo alcuni particolari cambiano da versione a versione.
"Mi piace""Mi piace"
ah, per non parlare del fatto che i file sono eseguibili di default!
"Mi piace""Mi piace"
Molto bravo, hai scritto un ottimo articolo, Complimenti.
"Mi piace""Mi piace"
Benvenuto nel magico mondo delle ACL Posix (uno degli argomenti piu’ ostici che mi sia mai trovato a dover insegnare)
Interessante eiciel, ti e’ capitato di usarlo in situazioni “estreme” (intendo con un sacco di utenti, un sacco di gruppi, un sacco di file….cioe’ con un sacco di beghe)? E’ abbastanza robusto e affidabile?
"Mi piace""Mi piace"
no, non l’ho usato in situazioni così. Però non vedo che casini possa combinare alla fine è solo una semplice interfaccia a libacl.
"Mi piace""Mi piace"
Ehm…l’orologio del tuo blog e’ avanti di un’ora 🙂
"Mi piace""Mi piace"
Ottimo articolo come sempre…complimenti.
"Mi piace""Mi piace"
Beh diciamo che su windows avere leggi e leggi ed esegui è una ripetizione, considerando che avremmo potuto avere leggi ed esegui con la somma dei due permessi.
Anzi come ha giustamente detto Guido su windows tutti i file (indendentemente dall estensione) sono eseguibili di default, quindi leggi ed esegui è per tutti di default.
In effetti su windows abbiamo una riga per ogni coppia di permessi, per cui alcune cose son ripetute.
Dici che i particolari cambiano da versione a versione? Mi fai un esempio, che io sto usando i permessi ora con windows 7 (a casa) e a lavoro con Windows Xp pro e non mi pare di notare così tante differenze.
Comunque se esiste Acl non capisco l’ utilità di Ugo.
Se per ogni utente imposto i suoi permessi che mi interessa di settarli anche al gruppo. I permessi tanto si ereditano o spostano velocemente.
Io lavoro spesso con Ftp quindi trovo molto comodo chmod, ma devo ammettere che anche il sistema ACL è comodissimo e per alcuni punti lo trovo un evoluzione del semplice ugo o sbaglio?
"Mi piace""Mi piace"
Non si usano prchè come ho detto nel 99% dei casi sono inutili.
Riguardo le differenze, implicano alcuni particolari nella ereditarietà dei permessi nelle cartelle a altre sottigliezze che però possono essere importanti in una infrastruttura IT che è stata customizzata in modo particolare.
"Mi piace""Mi piace"
Infatti si usano prevalentemente su cartelle condivise dove ad esempio tutti gli utenti del gruppo x possono leggere i file ma solo alcuni possono scriverli o modificarli.
"Mi piace""Mi piace"
Do you have a spam issue on this site; I also am
a blogger, and I was wondering your situation; many of us have
created some nice practices and we are looking to swap techniques with other folks,
be sure to shoot me an email if interested.
"Mi piace""Mi piace"
First of all I would like to say terrific blog! I had a quick question that I’d like to ask if you do not mind. I was interested to find out how you center yourself and clear your mind prior to writing. I have had trouble clearing my thoughts in getting my thoughts out. I do take pleasure in writing however it just seems like the first 10 to 15 minutes are usually lost just trying to figure out how to begin. Any ideas or hints? Thanks!
"Mi piace""Mi piace"
Amazing things here. I am very satisfied to look your article.
Thanks so much and I’m taking a look ahead to touch you. Will you please drop me a e-mail?
"Mi piace""Mi piace"
Hello! I could habe sworn I’ve been to this sitge
before but after browsig through some off the post I realized
it’s new to me. Anyhow, I’m definitely happy I found it and I’ll be bookmarkig and checking
back often!
"Mi piace""Mi piace"
You actually make it appear so easy together with your presentation however I
to find this matter to be actually one thing that I
think I would never understand. It seems too complicated and extremely wide for me.
I’m taking a look forward to your next post, I’ll attempt to get the dangle of it!
"Mi piace""Mi piace"
I was able to find gopod advice from your content.
"Mi piace""Mi piace"
Keep onn writing, great job!
"Mi piace""Mi piace"
You could certainly see your expertise within the work you write.
The sector hopes for more passionate writers such
as you who are not afraid to mention how they believe.
Always go after your heart.
"Mi piace""Mi piace"
Undeniably consider that that you said. Your favorite justification appeared to
be on the web the easiest thing to consider of. I sayy to
you, I definitely get annoyed aat the same time as other
folks think aboout issues that they plainly don’t understand
about. You controlled to hit the nail upon tthe top and also defined out the whole thing wijth no need side
effect , people can take a signal. Will probably be again to
get more. Thank you
"Mi piace""Mi piace"
Nice blog here! Additionally your website rather a lot up fast!
What host are you using? Can I get your affiliate link to your host?
I want my site loaded up as fast as yours lol
"Mi piace""Mi piace"
I was recommended this web site by way of my cousin. I am not
positive whether this submit is written by him as no
one else recognize such special about my trouble.
You’re amazing! Thanks!
"Mi piace""Mi piace"