Privilegi di amministrazione: differenze tra le versioni
(aggiunto pkexec) |
|||
Riga 116: | Riga 116: | ||
Rispetto a <code>su</code> e <code>sudo</code>, <code>pkexec</code> mostra sempre il comando per cui sono richiesti i privilegi assieme alla richiesta di password, sia in presenza di interfaccia grafica che da console virtuale. | Rispetto a <code>su</code> e <code>sudo</code>, <code>pkexec</code> mostra sempre il comando per cui sono richiesti i privilegi assieme alla richiesta di password, sia in presenza di interfaccia grafica che da console virtuale. | ||
=== Eseguibili con ''setuid'' === | |||
{{Warningbox | Questa sezione ha solo scopo didattico, ed è trattata per completezza. Non si dovrebbe '''mai''' ricorrere a tale permesso soltanto per evitare l'autenticazione di un proprio eseguibile, se non si è più che certi di quello che si sta facendo e non è possibile fare altrimenti. | {{Warningbox | Questa sezione ha solo scopo didattico, ed è trattata per completezza. Non si dovrebbe '''mai''' ricorrere a tale permesso soltanto per evitare l'autenticazione di un proprio eseguibile, se non si è più che certi di quello che si sta facendo e non è possibile fare altrimenti. | ||
Versione delle 18:27, 24 apr 2015
Versioni Compatibili Tutte le versioni supportate di Debian |
Introduzione
I privilegi di amministrazione (detti anche privilegi di root) permettono di svolgere qualsiasi operazione, dall'alterazione e la cancellazione di qualsiasi file al controllo di tutte le risorse del sistema. E su sistemi operativi Unix e Unix-like, come lo è GNU/Linux Debian, questi privilegi sono assegnati all'utente con UID pari a 0, ossia all'utente root.
In tutta questa Wiki, e tradizionalmente per Debian e la maggior parte delle distribuzioni GNU/Linux, si utilizza il carattere di prompt (che non va digitato, ed è già presente nel terminale o nella console virtuale utilizzata) per indicare quali comandi vanno eseguiti con privilegi:
$
: il comando che segue è utilizzabile da tutti gli utenti;#
: sono richiesti i privilegi di root.
Per esempio:
# apt-get update
significa che il comando (apt-get update
) dev'essere eseguito con privilegi di amministrazione.
Avvertenze
È altamente sconsigliato accedere al sistema come utente root per effettuare attività ordinarie. Invece i suoi privilegi andrebbero impiegati esclusivamente per lo stretto necessario a svolgere attività di amministrazione, quali per esempio l'installazione, l'aggiornamento o la rimozione di software tramite APT, o per modificare i file di configurazione del sistema.
Ovviamente si deve scegliere una buona password per l'account utilizzato per l'amministrazione, considerando che è l'unico metodo di autenticazione previsto di default, e ne va preservata la riservatezza. Si legga per maggiori informazioni questa guida.
Inoltre si raccomanda di:
- non eseguire applicazioni sconosciute con privilegi, e rifiutarsi di inserire la password necessaria per ottenerli per attività per cui non sono previsti;
- non installare software esterno ad APT, in qualsiasi forma (anche di pacchetto Debian), senza essersi accertati della sua autenticità;
- non aggiungere repository non ufficiali senza controllarne l'autenticità e senza averne un reale bisogno, limitandone il numero il più possibile ed evitando assolutamente liste di repository di terze parti;
- non inserire la password usata per svolgere attività di amministrazione da un account compromesso, non sicuro o non fidato.
Acquisire i privilegi
Con account root
Con le impostazioni di default l'account dell'utente root è abilitato, e la sua password è richiesta per svolgere attività di amministrazione.
È comunque possibile non abilitarlo durante l'installazione, o anche disabilitarlo in seguito. In tal caso non si possono utilizzare i metodi esposti in questa sezione per ottenere i privilegi di amministrazione.
Utilizzo di su
Una volta effettuato il login con il proprio utente non privilegiato, il metodo classico su Debian per poter diventare root, ed avere quindi la possibilità di svolgere operazioni di amministrazione, è quello di eseguire il comando su
(Switch User):
su -
Verrà richiesta la password di root e sarà eseguito l’accesso.
Noterete che il prompt della shell è cambiato, passando da:
$
(che identifica un utente normale) (alcune shell, come zsh
, potrebbero utilizzare il simbolo % al posto di $)
a:
#
(che identifica sempre l'utente root)
Per essere precisi è stata avviata una nuova shell di login, e le è stato assegnato il controllo della console virtuale o del terminale (all'interno di una sessione grafica) utilizzato.
L'opzione -
(trattino, oppure nelle forme -l
e --login
) dopo il comando su
serve appunto ad avviare una shell di login, che utilizza un ambiente pulito, ereditando soltanto le variabili d'ambiente $TERM
, $COLORTERM
, $DISPLAY
e $XAUTHORITY
. Queste ultime due permettono a root di accedere al server grafico associato all'utente che ha invocato su
, se presente e attivo.
Alcune variabili d'ambiente però non sono mai ereditate ($HOME
, $SHELL
, $USER
, $LOGNAME
, $PATH
e $IFS
) ed altre (come $LD_PRELOAD
e $LD_DEBUG_OUTPUT
) non hanno effetto per ragioni di sicurezza.
Si ricordi sempre comunque che può essere insicuro utilizzare su
senza una di queste tre opzioni, equivalenti, che proteggono da possibili errori accidentali causati da un ambiente non pulito: -
, -l
, --login
.
Per ritornare utenti normali è necessario terminare la shell, così che il controllo ritorni a quella che si utilizzava precedentemente, con i soli privilegi di utente. Quindi basta digitare il comando:
exit
oppure ancora più velocemente premere Ctrl-d
.
Nei comandi riportati in tutta questa Wiki, e in generale nella documentazione di tutti i sistemi Unix, il prompt è riportato prima di ogni comando da digitare per indicare se richiede o meno i privilegi di amministrazione.
Login diretto come root
Un'altra possibilità è effettuare direttamente un login come root, solo per lo stretto necessario a svolgere l'attività di amministrazione.
È sconsigliato effettuare un login da interfaccia grafica, per via dell'elevato numero di applicazioni che riceverebbero i privilegi di amministrazione. Si può invece passare a una console virtuale non utilizzata (per esempio /dev/tty2), effettuare il login come root, eseguire i soli comandi per cui sono necessari i privilegi di amministrazione e poi effettuare subito dopo il logout, ritornando alla propria console virtuale o comunque a quella utilizzata dal server grafico.
Per esempio, ecco la procedura per passi (leggerla tutta prima di provarla!):
- premere
Ctrl-Alt-F2
per passare a tty2 (oppureCtrl-Alt-F3
per tty3, ecc... ; basta che la console virtuale sia libera); - (in presenza di più persone con accesso al sistema, o se la console tty2 è stata usata in precedenza) inviare la combinazione SysRq+K premendo
Alt-RSist-k
(oppureAlt-Stamp-k
) per generare una nuova console sicura, terminando tutte le eventuali applicazioni collegate; - effettuare il login con root e la password corrispondente;
- digitare i comandi che richiedono privilegi di amministrazione, e soltanto quelli (non usare la shell per altre attività!);
- uscire con
exit
o premendoCtrl-d
per terminare la shell; - premere
Alt-FrecciaSinistra
per passare alla console precedente, e ripetere fino a tornare a quella di partenza o eventualmente al proprio server grafico.
Questo metodo, anche se molto più laborioso degli altri, è l'unico sempre sicuro anche se l'account dell'utente utilizzato per eseguire su
o sudo
fosse stato compromesso, perché ha il vantaggio di appoggiarsi unicamente sulla sicurezza del sistema.
Senza account root
Se durante l'installazione si ha disabilitato l'account root, il primo utente creato è stato automaticamente aggiunto al gruppo sudo. In tal caso l'unico modo per ottenere privilegi di amministrazione è tramite sudo.
In presenza di più persone con incarichi di amministrazione è fondamentale, per non dover condividere la stessa password e permettere il log dei comandi eseguiti da ciascuna, mentre in presenza di un unico utente è soltanto un modo per doversi ricordare un'unica password, salvo modifiche della configurazione di default.
Utilizzo di sudo
Sudo può essere usato per eseguire un comando come utente root, tramite la richiesta della password dell'utente che esegue il comando, se ha i permessi necessari.
Solitamente, se installato e configurato, si scrive sudo prima di ogni comando da eseguire con privilegi di amministrazione.
Per esempio:
$ id -u
restituisce l'UID del proprio utente, che sarà maggiore di 0 (su Debian di default è maggiore o uguale a 1000), ma:
$ sudo id -u
dopo la richiesta della propria password restituisce 0 (l'UID di root) ed è quasi equivalente a:
$ su - # id -u # exit
con la differenza che su
chiede la password dell'utente root, il cui account deve essere abilitato, mentre sudo
quella dell'utente; e inoltre sudo
di default non avvia una shell, riducendo la possibilità di errori accidentali, ma di default permette allo stesso utente l'esecuzione di nuovi comandi sulla stessa console o terminale senza password per 15 minuti dall'ultima richiesta.
Per maggiori informazioni si rimanda alla guida: Configurare SUDO per gestire le attività degli amministratori
Con polkit
Se si è installato uno degli ambienti desktop oppure direttamente il pacchetto policykit-1, che ne è una dipendenza, si può utilizzare il framework di sicurezza polkit tramite il comando pkexec
(azione: org.freedesktop.policykit.exec).
È installato su Debian con diversi profili di default, per permettere azioni privilegiate a utenti che non dispongono dei privilegi di amministrazione, e permette anche l'esecuzione di comandi che richiedono privilegi di amministrazione. Se è stato attivato l'account root verrà richiesta la sua password, altrimenti se si è configurato sudo
e si fa parte dell'omonimo gruppo verrà richiesta la password dell'utente corrente, in modo trasparente dalle scelte effettuate in fase di installazione.
L'uso è equivalente a sudo
, nel senso che il comando va scritto prima di ogni comando che si vuole eseguire con privilegi, e infatti:
$ pkexec id -u
restituisce 0, ossia l'UID di root, dopo aver richiesto la password necessaria per ottenere i privilegi.
Rispetto a su
e sudo
, pkexec
mostra sempre il comando per cui sono richiesti i privilegi assieme alla richiesta di password, sia in presenza di interfaccia grafica che da console virtuale.
Eseguibili con setuid
Un eseguibile con tale permesso abilitato, anziché ereditare i privilegi dell'utente che lo avvia, è eseguito con quelli del suo proprietario, senza nessuna richiesta di autenticazione. Ne consegue che un programma appartenente a root con setuid è sempre eseguito con privilegi di amministrazione da chiunque abbia il permesso di esecuzione.
Per maggiori informazioni si rimanda alla guida: Filesystem: i permessi sui files
Per ovvie ragioni è estremamente pericoloso aggiungere tale permesso a eseguibili che ne sono sprovvisti, e rimuoverlo dai comandi di sistema che lo richiedono può ridurre o anche compromettere le funzionalità del sistema.
Si noti che su
, sudo
e pkexec
per concedere i privilegi di amministrazione fanno uso di questo permesso, senza il quale non potrebbero funzionare per i normali utenti. E sono stati creati proprio per permettere ad altri programmi di essere eseguiti con privilegi, tramite una forma di autenticazione, in modo controllato e sicuro.
Inoltre, per ragioni di sicurezza, il permesso setuid è ignorato sugli script. E tutte le unità rimovibili, se montate da un utente normale, di default possono esserlo soltanto con il flag nosuid attivo, che renderebbe il permesso setuid privo di efficacia.
Esempio: aggiornamento periodico del sistema
Per effettuare l'aggiornamento periodico del sistema su una Debian stable, i comandi da digitare in una console virtuale o un emulatore di terminale con privilegi di amministrazione sono:
# apt-get update # apt-get upgrade
(Si legga per maggiori informazioni: Introduzione all' Apt System)
Nelle sezioni successive è mostrato brevemente come eseguire questi comandi in modo privilegiato con su
, sudo
e pkexec
.
Login diretto come root Si noti che effettuando un login diretto come root su una console virtuale, ovviamente possibile solo con account root attivo, il carattere finale del prompt sarà sempre # e basterà quindi digitare i due comandi e poi uscire dalla console (premendo Ctrl-d .)
|
Con account root attivo e su
Si avvia una console virtuale o un emulatore di terminale (in ambiente grafico) e si ottengono i privilegi con su
:
$ su - (richiesta password di root, non stampata a schermo, e INVIO) # apt-get update # apt-get upgrade # exit $
Si ricorda nuovamente che il carattere finale del prompt riportato ($
oppure #
) non si digita.
Senza account root attivo e sudo
Se non si è abilitato l'account root, si disporrà del comando sudo
, di default attivato per il primo utente creato. Il carattere finale del prompt resterà sempre $
, e anziché avviare una shell privilegiata è consigliabile utilizzare sudo
prima di ogni comando:
$ sudo apt-get update (richiesta password dell'utente, non stampata a schermo, e INVIO) $ sudo apt-get upgrade
Anche in questo caso il carattere finale del prompt ($
) non si digita.
Dopo il secondo comando non dovrebbe essere richiesta alcuna password, salvo cambiamenti al valore di default del timeout o se si è atteso troppo tra un comando e il successivo. Inoltre nuovi comandi potranno essere digitati sulla stessa console o terminale con sudo
fino allo scadere del timeout, a meno che venga chiusa (premendo Ctrl-d
) o sia invalidata con:
$ sudo -k
Con pkexec
Se si è abilitato l'account root, verrà richiesta la sua password, altrimenti verrà richiesta la propria (se si fa parte del gruppo sudo). In entrambi i casi come per sudo
il carattere finale del prompt rimarrà sempre $
, e si scriverà il comando pkexec
prima di ogni comando da eseguire con privilegi:
$ pkexec apt-get update (richiesta password di root/utente) $ pkexec apt-get upgrade (richiesta password di root/utente)
Fa parte del framework di autenticazione polkit, presente di default in ogni ambiente desktop.
Approfondimento
man su
man sudo
man pkexec
Guida scritta da: HAL 9000 20:26, 24 apr 2015 (CEST) | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |