Con su
, diventi un altro utente - root per impostazione predefinita, ma potenzialmente un altro utente. Se dici su -
, il tuo ambiente viene sostituito anche con l'ambiente di accesso di quell'utente, in modo che ciò che vedi sia indistinguibile dall'accesso come quell'utente. Non è possibile che il sistema sappia cosa fai mentre sei su
ad un altro utente dalle azioni di quell'utente quando effettuano l'accesso.
Le cose sono molto diverse con sudo
:
I comandi che esegui vengono sudo
eseguiti come utente di destinazione - root per impostazione predefinita, ma modificabile -u
- ma registra i comandi che lo esegui, taggandoli con il tuo nome utente in modo che la colpa possa essere assegnata in seguito. :)
sudo
è molto flessibile. È possibile limitare i comandi che un determinato utente o gruppo di utenti possono eseguire, ad esempio. Con su
, è tutto o niente.
Questa funzionalità viene in genere utilizzata per definire i ruoli. Ad esempio, è possibile definire un gruppo di "backup" che può essere eseguito dump
e tar
, ognuno dei quali necessita dell'accesso root per eseguire correttamente il backup del disco di sistema.
Ne parlo qui perché significa che puoi dare a qualcuno sudo
privilegi senza dargli sudo -s
o sudo bash
abilità. Hanno solo le autorizzazioni di cui hanno bisogno per fare il loro lavoro, mentre con su
loro hanno eseguito l'intero sistema. Devi stare attento con questo, però: se dai a qualcuno la possibilità di dire sudo vi
, per esempio, può sborsare vi
e avere effettivamente lo stesso potere di con sudo -s
.
Poiché richiede la password del sudoer anziché la password di root, sudo
isola le autorizzazioni tra più sudoer.
Questo risolve un problema amministrativo su
, ovvero che quando cambia la password di root, tutti coloro che dovevano conoscerla per usare su
dovevano essere informati. sudo
consente alle password dei sudoer di cambiare in modo indipendente. In effetti, è comune bloccare con password l'account dell'utente root su un sistema sudo
per forzare l'esecuzione di tutte le attività sysadmin sudo
. In una grande organizzazione con molti sudoer fidati, questo significa che quando uno dei amministratori di sistema lascia, non è necessario modificare la password di root e distribuirla agli amministratori che rimangono.
La differenza principale tra sudo bash
e sudo -s
è che -s
è più breve e ti consente di passare i comandi per eseguire nella shell predefinita dell'utente in un paio di modi:
Puoi dire sudo -s some-command
quale corre some-command
sotto la tua shell. È praticamente una scorciatoia per sudo $SHELL -c some-command
.
È possibile invece passare i comandi all'input standard della shell, come sudo -s < my-shell-script
. Puoi usarlo con un heredoc per inviare più comandi a una singola sudo
chiamata, evitando la necessità di digitare sudo
più volte.
Entrambi questi comportamenti sono opzionali. Molto più comunemente, dai da -s
solo, quindi esegue la shell dell'utente in modo interattivo. In quella modalità, differisce dal fatto sudo bash
che potrebbe eseguire una shell diversa rispetto a quella bash
, poiché appare prima nella SHELL
variabile di ambiente, quindi se non è impostata, l'impostazione della shell di accesso dell'utente, in genere in /etc/passwd
.
La shell gestita sudo -s
eredita l'ambiente dell'utente corrente. Se ciò che si desidera effettivamente è un ambiente pulito, come quello che si ottiene subito dopo l'accesso, ciò che si desidera è invece sudo -i
un'aggiunta relativamente recente sudo
. In parole povere, sudo -i
è sudo -s
come su -
è su
: reimposta tutte le variabili d'ambiente tranne alcune e ti rimanda alla home directory dell'utente. Se non gli dai anche i comandi per essere eseguito sotto quella shell tramite input standard o sudo -i some-command
, eseguirà quella shell come shell di login interattiva, quindi gli script di avvio della shell dell'utente (ad es. .bash_profile
) Verranno eseguiti di nuovo.
Tutto ciò rende sudo -i
notevolmente più sicuro di sudo -s
. Perché? Perché se qualcuno può modificare il tuo ambiente prima sudo -s
, potrebbe causare l'esecuzione di comandi non intenzionali. Il caso più ovvio è la modifica SHELL
, ma può anche accadere meno direttamente, come via PAGER
se dici man foo
sotto sudo -s
.
Potresti dire "Se possono modificare PAGER
, possono modificare PATH
, e quindi possono semplicemente sostituire un sudo
programma malvagio ", ma qualcuno sufficientemente paranoico può dire /usr/bin/sudo /bin/bash
di evitare quella trappola. Probabilmente non sei così paranoico da evitare anche le trappole in tutte le altre variabili d'ambiente sensibili. Ti sei anche ricordato di controllare EDITOR
, ad esempio, prima di eseguire qualsiasi comando VCS ? Quindi sudo -i
.
Dato che sudo -i
cambia anche la tua directory di lavoro nella home directory del tuo utente, potresti comunque voler utilizzare sudo -s
per quelle situazioni in cui sai di voler rimanere nella stessa directory cd
in cui ti eri imbattuto durante l'esecuzione sudo
. Tuttavia, è ancora più sicuro da sudo -i
e cd
verso dove eri.
sudo su -
questo modo non hai bisogno della password di root e mi-
assicuro che la home directory sia impostata correttamente.