Premier Training & Business Partner Red Hat

Amministrazione di Utenti e Gruppi con gestione dei Permessi e ACL

Michele Milaneschi
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

 

Prima di iniziare a leggere guarda il video corso di formazione sull’amministrazione di utenti e gruppi!

In questo articolo tratteremo ciò che riguarda l’amministrazione di utenti e gruppi in un sistema Linux comprendendo il sistema di gestione dei permessi.

Ogni sistema linux per poter essere amministrato ha bisogno di un utente che abbia pieni privilegi sulla macchina e l’utente in questione è l’utente root.
Infatti durante la fase di installazione viene chiesto di inserire la password relativa ad esso.
Successivamente possiamo creare quanti utenti vogliamo per poter consentire a un bacino di utenza di poter usare la nostra macchina linux.
Ovviamente questi utenti hanno privilegi limitati e non possono di per se andare a modificare la gestione del sistema .

La creazione di un utente viene fatta con il seguente comando:

useradd nomeutente.

La creazione della password relativa all’utente viene fatta tramite il comando:

passwd nomeutente.

Ammettiamo di dover creare l’utente michele:

useradd michele

passwd michele

ut

La memorizzazione dell’utente viene effettuata nei file:

  • /etc/passwd
  • /etc/shadow
  • /etc/group

In ogni file vengono memorizzate specifiche informazioni di un utente.

Andiamo ad analizzare il file /etc/passwd alla linea relativa all’utente michele:

ut1

Ogni parametro separato dal duepunti ( : ) ci fornisce un informazione diversa:

  • michele: Indica il nome dell’utente
  • x: Indica la password che però non si trova in questo file
  • 500: Indica lo UID dell’utente ( User ID )
  • 500: Indica il GID dell’utente ( Group ID )
  • :: Adesso c’è un campo lasciato vuoto che potrebbe contenere il nome o il cognome dell’utente o altre informazioni che in questo caso non abbiamo messo
  • /home/michele: Indica la Home Directory dell’utente, ossia dove l’utente michele ha pieni privilegi e può creare e organizzare tutti i suoi file personali
  • /bin/bash: Indica l’assegnazione della shell per l’utente in questione

L’assegnazione del valore dello UID e del GID per tutti gli utenti che non sono di sistema quindi utenti normali inizia da 500 in su ( 501, 502, 503, ecc) mentre per quelli di sistema arriva fino a 499.

Andiamo ad analizzare il file /etc/shadow alla linea relativa all’utente michele:

ut2

Ogni parametro separato dal duepunti ( : ) ci fornisce un informazione diversa:

  • michele: Indica il nome utente
  • $6$AxNLDSB….: Indica la password cifrata dell’utente
  • 15911: Indica l’ultima volta che è stata cambiata la password e viene espresso in numero di giorni a partire da 1/1/1970
  • 0: Indica il numero MINIMO di giorni che devono passare prima di poter ricambiare la password dall’ultimo cambio effettuato
  • 9999: Indica il numero MASSIMO di giorni che può passare dopo che la password risulta scaduta e deve essere obbligatoriamente ricambiata
  • 7: Indica il numero di giorni in cui l’utente viene avvisato che la password sta per scadere
  • Il penultimo campo mancante indica per quanti giorni, dopo la scadenza della password, l’account viene disabilitato
  • L’ultimo campo mancante indica il giorno in cui l’utente è stato disabilitato e viene espresso in numero di giorni a a partire da 1/1/1970
  • Infine ci sarebbe anche un altro campo ma è un campo riservato

Andiamo ad analizzare il file /etc/group alla linea relativa all’utente michele:

ut3

  • michele: Indica il nome del Gruppo
  • x: Indica una possibile password da inserire per questo gruppo
  • 500: Indica il GID ( Group ID ) del gruppo
  • L’altro campo mancante indica i possibili utenti che possono far parte anche di questo gruppo

Detto questo andiamo a vedere alcune opzioni del comando:

useradd

  • -d /percorso Indica di usare la Home Directory specificata nel percorso per l’utente in questione
  • -e DATA_SCADENZA Indica la data di scadenza per l’utente in questione
  • -g nome_gruppo Indica il gruppo PRIMARIO di cui l’utente in questione deve far parte
  • -G nome_gruppo Indica il gruppo SECONDARIO di cui l’utente in questione può far parte
  • -u UID Indica lo User ID per l’utente in questione
  • -s /sbin/nologin Indica che l’utente non ha una shell per entrare direttamente sul sistema ( si può usare ad esempio nel caso dovessimo inserire degli utenti per una condivisione di risorse tipo Samba nel quale gli utenti devono “esistere” nel sistema ma solamente per quel servizio )

Facciamo degli esempi:

Vogliamo che l’utente nicola faccia parte del gruppo primario scuola:

groupadd scuola

useradd nicola -g scuola

Per verificare possiamo utilizzare il comando id:

id nicola

ut4

Come vediamo lo UID è a 501
Il GID
Principale è anch’esso a 501
Il Gruppo Principale e Secondario
di cui fa parte è scuola

Possiamo creare un utente di nome luca e come gruppo secondario possiamo farlo far parte del gruppo scuola:

useradd luca -G scuola

ut5

Come vediamo il gruppo Principale cui non abbiamo dichiarato è uguale a quello dell’utente mentre come gruppo Secondario vediamo che fa parte anche del gruppo scuola.

Andando a dare un occhiata al file /etc/group noteremo questa cosa:

ut6

Come vediamo luca è membro anche del gruppo Secondario scuola e viene fatto vedere, mentre l’utente nicola che ha come gruppo principale scuola non viene mensionato.

Potremmo aver creato altri utenti nel sistema e potrebbe capitare di renderli membri di un gruppo secondario e qui introduciamo il comando usermod dove troviamo le stesse opzioni di prima e serve per modificare i criteri di utenti gia creati.

Nel nostro caso dobbiamo rendere gli utenti mauro e giovanni membri del gruppo secondario scuola:

usermod -G scuola mauro

usermod -G scuola ciccio

ut7

Per eliminare un gruppo utilizziamo il comando groupdel seguito dal nome del gruppo:

groupdel scuola

Nel caso in cui avessimo un utente che ha come gruppo Primario scuola dobbiamo prima eliminare l’utente in questione altrimenti avremo un messaggio di errore

ut10

Per ciò che riguarda la scadenza di account dobbiamo utilizzare il comando chage seguito dal nomeutente:

chage michele

ut8

Vediamo adesso come eliminare un utente dal sistema.

Per fare ciò utilizziamo il comando userdel seguito dall’opzione -r e dall’utente che vogliamo eliminare.

Se volessimo eliminare gli utenti michele e nicola daremo i seguenti comandi:

userdel -r nicola

usedel -r michele

Detto ciò parliamo di permessi:

Su ogni file o Directory possiamo vedere e modificare i permessi di lettura, scrittura o eseguzione.

Innanzitutto per vedere i permessi diamo il comando ll o ls -all e ci potremmo trovare davanti a una cosa del genere.

ut9

Cerchiamo di capire ciò che vediamo:

  • L’inizio di ogni file o Directory inizia con il – se è un file o con la lettera d se è una Directory
  • Successivamente abbiamo i permessi di Lettura ( r ), Scrittura ( w ) o Eseguzione ( x ) a gruppi di 3:
  • Il primo rwx appartiene all’utente proprietario ( U )
  • Il secondo appartiene al gruppo proprietario ( G )
  • Il terzo appartiene a tutti gli altri ( O )
  • Abbiamo di seguito il nome dell’utente proprietario e del gruppo proprietario

ut11

I permessi di Lettura, Scrittura ed Eseguzione oltre che alle lettere si possono associare a dei numeri e vedremo che assegnare i permessi tramite i numeri è molto più pratico.

  • Lettura: 4
  • Scrittura: 2
  • Eseguzione: 1

Il comando per assegnare o modificare i permessi è: chmod

Se ad esempio creiamo un file e vogliamo assegnare i permessi di Lettura, Scrittura ed Eseguzione al proprietario e di Lettura ed Eseguzione al gruppo e a tutti gli altri daremo il seguente comando:

chmod 755 file1

Il 7 è riferito al Proprietario e si ottiene facendo la somma dei valori sopra citati (4+2+1)
Il primo 5 è riferito al Gruppo e si ottiene facendo la somma dei valori sopra citati (4+1)
Il secondo 5 è riferito a tutti gli altri e si ottiene facendo la somma dei valori sopra citati (4+1)

Se volessimo assegnare invece i permessi di Lettura e Scrittura al proprietario mentre solamente di lettura al gruppo e a tutti gli altri faremo nel seguente modo:

chmod 644 file2

file2

Ricordiamo che le Directory devono obbligatoriamente avere il permesso di lettura ed eseguzione se vogliamo poter dare l’accesso al loro contenuto

Il comando per cambiare gruppo invece è chgrp:

Se vogliamo cambiare gruppo ad un file da root a scuola per esempio daremo il seguente comando:

chgrp scuola file2

file3

Se invece volessimo cambiare sia Proprietario che Gruppo ad un file in un colpo solo useremo il comando: chown proprietario:gruppo file

chown nicola:scuola file2

file4

Se volessimo cambiare gruppo ad una Directory e al suo contenuto dobbiamo eseguire il comando in maniera ricorsiva ossia con l’opzione -R

chgrp -R scuola dati/

file5
Detto questo parliamo di permessi speciali ossia di SUID, SGID e Stick Bit:

  • SUID serve per far eseguire un file con i privilegi dell’utente proprietario
  • SGID si applica alle Directory invece che ai file e qualsiasi file creato all’interno della stessa cartella erediterà lo stesso gruppo di appartenenza della directory.
  • Stick Bit invece permette la cancellazione dei file solo ai legittimi proprietari

SUID

Per attivare il SUID usiamo l’opzione u+s seguita dal nome del file:

chmod u+s nome_file

Per disattivarlo usiamo l’opzione u-s

chmod u-s nome_file

Un esempio potrebbe essere il comando ping che ci consente di aprire una connessione anche se non siamo utenti root.

Nella Directory /bin vediamo infatti che il comando ping ha lo SUID:

st1

Proviamo a disattivarlo:

chmod u-s ping

st2

E come vediamo non ci è più permesso effettuare l’operazione di ping.

Se gli ridiamo lo SUID l’operazione di ping sarà accessibile anche agli utenti non privilegiati:

st3

SGID

Per attivare il SGID usiamo l’opzione g+s seguita dalla Directory:

chmod g+s directory

Per disattivarlo usiamo l’opzione g-s:

chmod g-s directory

Un esempio potrebbe essere se in una Directory vogliamo cambiare il gruppo da root a scuola, ma vogliamo che anche i file creati al suo interno ereditino il gruppo di appartenenza della Directory.

Per fare questo diamo i seguenti comandi:

st4

Nel momento in cui togliamo l’ SGID i file creati al suo interno assumono il gruppo dell’utente proprietario che li crea, in questo caso root:

st5

Stick Bit

Per implementare lo stick bit usiamo l’opzione o+t quindi scriviamo:

chmod o+t directory

Per disattivarlo invece usiamo l’opzione o-t:

chmod o-t directory

Se ad esempio abbiamo una Directory con dentro più file appartenenti a più utenti e abbiamo impostato i permessi 777 ( Assolutamente sconsigliabile, ma serve per capire il funzionamento) per fare in modo che ogni utente possa eliminare solamente i file di cui è legittimo proprietario implementiamo lo Stick Bit:

st6
Se non ci fosse stato lo Stick Bit i file di claudio potrebbero essere stati tranquillamente eliminati

PARLIAMO DELLE ACL

Per concludere parliamo delle ACL e di quando implemetarle:

Le ACL ci vengono incontro nel momento in cui su uno stesso file dobbiamo dare dei permessi specifici per degli utenti specifici ossia abilitare ad esempio la scrittura su un file solamente per uno specifico utente mentre per tutti gli altri lasciare tutto invariato.

Per fare questo usiamo le ACL tramite i seguenti comandi: getfacl e setfacl

Con il comando getfacl possiamo vedere le ACL assegnate
Con il comando setfacl impostiamo le ACL per un determinato file o Directory

Vediamo come fare tramite alcuni esempi:

Vogliamo ad esempio che un file che si trova dentro la directory tmp sia leggibile e scrivibile solamente dall’utente michele.
Il nome del file in questione è file1.

setfacl -m u:michele:rw file1

set1

E come vediamo il file è stato modificato dall’utente michele

Ovviamente questo è possibile se la directory superiore ( in questo caso tmp ) ci concede il permesso di entrare, infatti se proviamo a fare questa cosa nella root directory non ci viene concesso il permesso per entrare.

Stessa cosa per quanto riguarda i gruppi e tutti gli altri, solamente usiamo l’opzione g: e o: invece che u:

Facciamo un esempio su una Directory creata sulla / di nome dati dall’utente root.
Vogliamo che solamente il gruppo scuola possa leggere e modificare i file al suo interno:

set2

Come abbiamo detto precedentemente se non avessimo dato anche il permesso di eseguzione l’utente nicola ( che fa parte del gruppo scuola, è indifferente se è gruppo primario o secondario ) non sarebbe potuto nemmeno entrare nella directory

Per visualizzare le ACL usiamo il comando getfacl seguito dal nome del file:

getfacl file1

get1


Per eliminare le ACL assegnate
usiamo il comando setfacl seguito dall’opzione –remove-all

set3

Come potete norare quando su un file sono presenti anche le ACL al posto del puntino ( . ) ci viene il segno più ( + ), mentre quando le eliminamo ritorna il puntino.

E infatti dando il comando getfacl le ACL non risultano più esserci.

Per concludere il discorso è FONDAMENTALE sapere che le ACL possono essere implementate sul Logical Volume o Partizione dove è installato il sistema operativo ossia nella /.

Nel caso in cui debbano essere implementate in un Logical volume o partizione che viene creata successivamente all’installazione del sistema operativo dobbiamo rimontare quella partizione o Logical Volume con l’attributo acl che inseriamo nel file /etc/fstab.

Per fare un esempio:

Abbiamo partizionato il disco tramite LVM
In un secondo momento abbiamo creato un Logical Volume chiamato dati ( /dev/VolGroup/dati )
Ci è venuto necessatio applicare le ACL:

Dopo averlo creato e reso disponibile per il suo utilizzo siamo andati a montarlo nella Directory dati nella / del sistema, ci abbiamo creato dentro un file e siamo andati a impostare le ACL ma ci siamo trovati davanti all’impossibilità di applicarle.


Magari potrà sorgere il dubbio che stiamo montando il Logical Volume nella / e che prima abbiamo detto che sulla / ( dove viene installato il sistema operativo ) non ci sono problemi per l’utilizzo delle ACL.

Preciso maggiormente che non ci sono problemi se si applica le ACL a file o Directory che fanno parte del sistema operativo ma se le applichiamo ad una Directory o a file che fanno parte di un punto di montaggio di una partizione o Logical Volume diverso da quello di / sorgono questi “problemi”.

Per risolvere questa cosa dobbiamo rimontare il Logical Volume con l’attributo acl nel file /etc/fstab nel seguente modo:

fs2dttt
Per verificare che abbiamo fatto tutto bene diamo il comando:

mount -a

Se il comando non restituisce niente tutto è andato a buon fine, e quindi RIAVVIAMO IL SISTEMA.

A sistema riavviato il file sysem viene montato in modo tale che si può implementare le ACL.

🎯 Vuoi imparare a gestire e amministrare perfettamente gli utenti, i gruppi, permessi e ACL su Enterprise Linux?

Inizia subito dal CORSO GRATUITO UFFICIALE RH024.

Il corso Red Hat Enterprise Linux Technical Overview (RH024) basato su RHEL8 tenuto da due nostri Red Hat Certified Instructor, ed i temi saranno le pratiche di base per l’utilizzo di Linux e le attività di amministrazione del sistema.

Clicca qui per iscriverti gratis subito al corso online: www.rh024.it

Info about author

Michele Milaneschi

RHCE Consultant