Home > GNU/Linux > GNU/Linux e le Access Control List

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

  1. 22 novembre 2009 alle 11:17

    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!

  2. pietro
    22 novembre 2009 alle 11:44

    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

    • 22 novembre 2009 alle 17:03

      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)

      • pietro
        22 novembre 2009 alle 18:42

        ok, quindi
        sudo mkdir /home/MyMusic

        sudo ??? /home/MyMusic

      • pietro
        22 novembre 2009 alle 18:58

        mi segno tutto e la prossima volta che mi viene voglia di eliminare la partizione ntfs faccio degli esperimenti

  3. Mitsuve
    22 novembre 2009 alle 12:05

    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

    • 22 novembre 2009 alle 16:41

      adduser crea nuovi utenti (oppure aggiunge un utente a un gruppo)
      addgroup crea nuovi gruppi.

  4. 22 novembre 2009 alle 12:47

    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 ?

  5. telperion
    22 novembre 2009 alle 13:40

    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.

    • 22 novembre 2009 alle 16:35

      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.

      • 22 novembre 2009 alle 19:07

        ah, per non parlare del fatto che i file sono eseguibili di default!

  6. Sanzo
    22 novembre 2009 alle 14:40

    Molto bravo, hai scritto un ottimo articolo, Complimenti.

  7. 23 novembre 2009 alle 1:03

    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?

    • 23 novembre 2009 alle 1:49

      no, non l’ho usato in situazioni così. Però non vedo che casini possa combinare alla fine è solo una semplice interfaccia a libacl.

  8. 23 novembre 2009 alle 1:05

    Ehm…l’orologio del tuo blog e’ avanti di un’ora🙂

  9. Scugnizzo
    23 novembre 2009 alle 9:49

    Ottimo articolo come sempre…complimenti.

  10. Alessandro
    23 novembre 2009 alle 10:27

    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?

  11. 23 novembre 2009 alle 16:37

    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.

    • telperion
      24 novembre 2009 alle 0:33

      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.

  12. 28 marzo 2013 alle 18:26

    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.

  13. 10 maggio 2013 alle 3:12

    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!

  14. 14 maggio 2013 alle 13:23

    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?

  15. 3 settembre 2014 alle 19:12

    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!

  16. 6 settembre 2014 alle 5:46

    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!

  17. 10 settembre 2014 alle 6:42

    I was able to find gopod advice from your content.

  18. 10 settembre 2014 alle 9:54

    Keep onn writing, great job!

  19. 20 settembre 2014 alle 18:26

    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.

  20. 25 settembre 2014 alle 15:54

    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

  21. 3 ottobre 2014 alle 11:53

    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

  1. No trackbacks yet.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: