Immagina questo scenario. Stai gestendo un server Linux a cui accedono più utenti. Tutti gli utenti hanno sudo
diritti. Vuoi testare determinati comandi Linux con utenti diversi. Come lo faresti? Accedere come un utente e testare i comandi, quindi disconnettersi e riconnettersi come un altro utente e testare i comandi? Sì, è un modo per farlo. Tuttavia, esiste un modo semplice per eseguire comandi come un altro utente tramite sudo in Linux. Continua a leggere per scoprirlo.
Ai fini di questa guida, ho creato due account utente:"senthil" e "kumar" nella mia macchina di prova AlmaLinux 8. Userò "senthil" come utente corrente e "kumar" come utente di destinazione.
Voglio che l'utente "senthil" sia in grado di eseguire qualsiasi comando come utente "kumar" su qualsiasi host, senza effettivamente accedere come "kumar". Inteso? Bene, lascia che ti mostri un esempio.
Esegui comandi come un altro utente tramite Sudo
Attualmente ho effettuato l'accesso come utente "senthil". Lascia che ti mostri l'utente attualmente connesso con whoami
comando.
$ whoami senthil

Ora eseguirò un semplice "echo
" comando con sudo
come utente di destinazione "kumar" mentre ha effettuato l'accesso come "senthil":
$ sudo -u kumar bash -c 'echo "My Username is $USER, and my user ID is $UID"'
Ti verrà chiesto di inserire la password dell'utente corrente (cioè "senthil" in questo caso). Una volta autenticato, il echo
il comando verrà eseguito come utente "kumar" e visualizzerà il nome utente e l'ID utente di "kumar".
Risultato di esempio:
[sudo] password for senthil: My Username is kumar, and my user ID is 1001
Quello che in realtà abbiamo appena fatto è eseguire il comando "echo
" comando come utente "kumar" mentre abbiamo effettuato l'accesso come "senthil". Questo è il motivo per cui vedi il nome utente e l'ID utente di kumar, ma non di senthil.
Verifichiamo se l'uid dell'utente "kumar" è corretto con id
comando.
$ id kumar uid=1001(kumar) gid=1001(kumar) groups=1001(kumar),10(wheel)

Sì, l'uid di kumar è corretto in entrambe le uscite.
Qui, il -u
flag viene utilizzato per eseguire il comando fornito come un altro utente (ad esempio kumar in questo caso) e bash -c
viene utilizzato per menzionare il nome del comando. Dovresti menzionare il comando tra virgolette singole.
Se non usi bash -c
opzione, l'echo
il comando restituirà il nome utente e l'uid dell'utente corrente invece dell'utente di destinazione.
$ sudo -u kumar echo "My Username is $USER, and my user ID is $UID"
My Username is senthil, and my user ID is 1000
Allo stesso modo, puoi eseguire qualsiasi comando come utente diverso.
Tieni presente che nel nostro precedente comando di esempio non ho inserito sudo
password per l'utente di destinazione. Come mai? Perché, l'echo
il comando non richiede sudo
parola d'ordine.
Se esegui un comando che richiede sudo
autorizzazione come un altro utente, è necessario inserire la password. Ecco un altro esempio.
$ sudo -u kumar bash -c 'sudo dnf --refresh update'
Risultato di esempio:
[sudo] password for senthil: [sudo] password for kumar: AlmaLinux 8 - BaseOS 344 B/s | 4.3 kB 00:12 AlmaLinux 8 - AppStream 388 B/s | 4.7 kB 00:12 AlmaLinux 8 - Extras 316 B/s | 3.9 kB 00:12 Dependencies resolved. Nothing to do. Complete!

Hai notato che ho inserito sudo
password per entrambi gli utenti? Sì. Perché eseguiamo "sudo dnf update
", che richiede privilegi elevati. Ecco perché è necessario inserire il sudo
password per l'utente di destinazione. Per comandi normali ad es. ls
, uname
ecc., non è necessario inserire la password dell'utente di destinazione.
Non solo i comandi Linux, puoi applicare questo metodo anche per eseguire script. Diciamo che vuoi eseguire uno script di backup che viene salvato in $HOME
directory di un altro utente. Puoi semplicemente eseguire lo script dall'utente corrente come un altro utente usando questo comando:
$ sudo -u kumar bash -c '~/backup_script_name'
Esegui comandi senza password Sudo
A volte, potresti trovarti in una situazione in cui non vuoi inserire la password sudo per ogni comando. In questi casi, puoi saltare la richiesta di password per comandi specifici aggiungendo NOPASSWD
opzione in /etc/sudoers
file.
Supponiamo che tu voglia consentire a determinati utenti di eseguire qualsiasi dnf comando senza password sudo. Per farlo, trova prima il percorso del dnf
comando usando which
o whereis
comandi.
$ which dnf /usr/bin/dnf
$ whereis dnf dnf: /usr/bin/dnf /etc/dnf /usr/share/man/man8/dnf.8.gz
Come puoi vedere, il percorso eseguibile di dnf
il comando è /usr/bin/dnf
.
Ora, modifica /etc/sudoers
file usando il comando:
$ sudo visudo
Avviso: Tieni presente che non dovresti modificare manualmente i sudoers
file utilizzando qualsiasi editor di testo. Usa sempre visudo
comando per modificare in sicurezza i sudoers
file.
Aggiungi la riga seguente alla fine del file per consentire all'utente chiamato "kumar" di eseguire dnf
comandi senza sudo password.
kumar ALL=NOPASSWD:/usr/bin/dnf
Salva il file ed esci.
D'ora in poi, l'utente "kumar" può eseguire dnf
comandi senza sudo
password.
[[email protected] ~]$ sudo -u kumar bash -c 'sudo dnf --refresh update' [sudo] password for senthil: AlmaLinux 8 - BaseOS 358 B/s | 4.3 kB 00:12 AlmaLinux 8 - AppStream 324 B/s | 4.7 kB 00:14 AlmaLinux 8 - Extras 302 B/s | 3.9 kB 00:13 Dependencies resolved. Nothing to do. Complete!
Vedere? Non è necessario inserire sudo
password per "kumar".
Per revocare questo comportamento, rimuovi semplicemente la riga sopra.
Disclaimer: Dovresti stare molto attento mentre applichi questo metodo. Questo metodo può essere utilizzato sia per scopi produttivi che distruttivi. Ad esempio, se consenti agli utenti di eseguire 'rm'
comando senza sudo
password, potrebbero eliminare accidentalmente o intenzionalmente file importanti. Non farlo a meno che non sia veramente necessario.
Conclusione
In questo breve tutorial, abbiamo discusso di come consentire agli utenti di eseguire comandi come un altro utente tramite sudo in Linux. Abbiamo anche imparato come disabilitare la richiesta della password sudo per determinati utenti durante l'esecuzione di comandi specifici modificando sudoers
file.
Come ho avvertito, è necessario prestare attenzione durante il test di questo metodo su un sistema di produzione. Potresti inconsapevolmente consentire a un utente di eseguire un comando dannoso (ad es. rm
) senza dover inserire la password sudo. Dovresti sempre fare attenzione durante il test di questo tipo di suggerimenti per Linux.
Lettura correlata:
- Esegui comandi su sistemi Linux remoti tramite SSH
- Come eseguire comandi particolari senza password Sudo in Linux