Panoramica
sudo sta per superutente fare . Consente agli utenti autorizzati di eseguire il comando come un altro utente. Un altro utente può essere un utente normale o un superutente. Tuttavia, la maggior parte delle volte lo utilizziamo per eseguire comandi con privilegi elevati.
Il comando sudo funziona in combinazione con le politiche di sicurezza, la politica di sicurezza predefinita è sudoers ed è configurabile tramite /etc/sudoers file. Le sue politiche di sicurezza sono altamente estensibili. Si possono sviluppare e distribuire le proprie politiche come plugin.
Com'è diverso da su
In GNU/Linux ci sono due modi per eseguire comandi con privilegi elevati:
- Utilizzo di su comando
- Utilizzo di sudo comando
su sta per cambia utente . Usando su, possiamo passare all'utente root ed eseguire il comando. Ma ci sono alcuni inconvenienti con questo approccio.
- Dobbiamo condividere la password di root con un altro utente.
- Non possiamo fornire un accesso controllato poiché l'utente root è superutente
- Non possiamo controllare cosa sta facendo l'utente.
sudo risolve questi problemi in un modo unico.
- Prima di tutto, non è necessario compromettere la password dell'utente root. L'utente normale utilizza la propria password per eseguire il comando con privilegi elevati.
- Possiamo controllare l'accesso dell'utente sudo, il che significa che possiamo limitare l'utente a eseguire solo determinati comandi.
- Oltre a questo, tutte le attività dell'utente sudo vengono registrate, quindi possiamo sempre controllare quali azioni sono state eseguite. Su GNU/Linux basato su Debian tutte le attività sono registrate in /var/log/auth.log file.
Le sezioni successive di questo tutorial fanno luce su questi punti.
Procedi con sudo
Ora, abbiamo una buona comprensione di sudo. Sporciamoci le mani con la pratica. Per dimostrazione, sto usando Ubuntu. Tuttavia, il comportamento con un'altra distribuzione dovrebbe essere identico.
Consenti accesso a sudo
Aggiungiamo un utente normale come utente sudo. Nel mio caso il nome utente è linuxtechi
1) Modifica il file /etc/sudoers come segue:
$ sudo visudo
2) Aggiungi la riga sottostante per consentire a sudo l'accesso all'utente linuxtechi:
linuxtechi ALL=(ALL) ALL
Nel comando sopra:
- linuxtechi indica il nome utente
- Prima ALL indica di consentire l'accesso a sudo da qualsiasi terminale/macchina
- Il secondo (TUTTO) indica che il comando sudo può essere eseguito come qualsiasi utente
- Terzo TUTTO indica che tutti i comandi possono essere eseguiti come root
Esegui comando con privilegi elevati
Per eseguire il comando con privilegi elevati, anteponi semplicemente la parola sudo al comando come segue:
$ sudo cat /etc/passwd
Quando esegui questo comando, verrà richiesta la password di linuxtechi e non la password dell'utente root.
Esegui il comando come un altro utente
In aggiunta a questo possiamo usare sudo per eseguire il comando come un altro utente. Ad esempio, nel comando seguente, l'utente linuxtechi esegue il comando come utente devesh:
$ sudo -u devesh whoami [sudo] password for linuxtechi: devesh
Comportamento di comando integrato
Una delle limitazioni di sudo è:il comando integrato di Shell non funziona con esso. Ad esempio, la cronologia è integrata nel comando, se si tenta di eseguire questo comando con sudo, l'errore comando non trovato verrà segnalato come segue:
$ sudo history [sudo] password for linuxtechi: sudo: history: command not found
Accedi alla shell di root
Per superare il problema di cui sopra, possiamo ottenere l'accesso alla shell di root ed eseguire qualsiasi comando da lì, incluso quello integrato di Shell.
Per accedere alla shell di root, esegui il comando seguente:
$ sudo bash
Dopo aver eseguito questo comando, noterai che il segno del prompt cambia in cancelletto (#).
Ricette
In questa sezione parleremo di alcune utili ricette che ti aiuteranno a migliorare la produttività. La maggior parte dei comandi può essere utilizzata per completare le attività quotidiane.
Esegui il comando precedente come utente sudo
Supponiamo che tu voglia eseguire il comando precedente con privilegi elevati, quindi il trucco di seguito sarà utile:
$ sudo !4
Il comando precedente eseguirà il 4° comando dalla cronologia con privilegi elevati.
Se vuoi eseguire il comando precedente con i privilegi di root usando il comando sudo, usa il comando seguente,
$ sudo !!
comando sudo con Vim
Molte volte modifichiamo i file di configurazione del sistema e durante il salvataggio ci rendiamo conto che abbiamo bisogno dell'accesso come root per farlo. Perché questo potremmo perdere i nostri cambiamenti. Non c'è bisogno di farsi prendere dal panico, possiamo usare il comando seguente in Vim per salvare da questa situazione:
:w !sudo tee %
Nel comando sopra:
- I due punti (:) indicano che siamo nella modalità ex di Vim
- Il punto esclamativo (!) indica che stiamo eseguendo il comando della shell
- sudo e tee sono i comandi della shell
- Il segno di percentuale (%) indica tutte le righe della riga corrente
Esegui più comandi usando sudo
Finora abbiamo eseguito un solo comando con sudo ma possiamo eseguire più comandi con esso. Separa semplicemente i comandi usando punto e virgola (;) come segue:
$ sudo -- bash -c 'pwd; hostname; whoami'
Nel comando sopra:
- Il doppio trattino (–) interrompe l'elaborazione delle opzioni della riga di comando
- bash indica il nome della shell da utilizzare per l'esecuzione
- I comandi da eseguire sono seguiti dall'opzione –c
Esegui il comando sudo senza password
Quando il comando sudo viene eseguito per la prima volta, verrà richiesta la password e per impostazione predefinita la password verrà memorizzata nella cache per i prossimi 15 minuti. Tuttavia, possiamo ignorare questo comportamento e disabilitare l'autenticazione della password utilizzando la parola chiave NOPASSWD come segue:
linuxtechi ALL=(ALL) NOPASSWD: ALL
Limita all'utente di eseguire determinati comandi
Per fornire un accesso controllato, possiamo limitare l'utente sudo a eseguire solo determinati comandi. Ad esempio, la riga sottostante consente l'esecuzione solo dei comandi echo e ls
linuxtechi ALL=(ALL) NOPASSWD: /bin/echo /bin/ls
Aggiungi una riga o una stringa di testo a un file usando il comando sudo
Ci sono alcuni scenari in cui dobbiamo aggiungere alcune righe a un file esistente con un utente locale che ha i diritti sudo,
$ echo 'stringa di testo' | sudo tee -a
L'esempio è mostrato di seguito:
[email protected]:~$ echo "deb http://ftp.de.debian.org/debian buster main contrib" | sudo tee -a /etc/apt/sources.list deb http://ftp.de.debian.org/debian buster main contrib [email protected]:~$
Modo alternativo per aggiungere righe o testo a un file esistente usando il comando sudo,
sudo sh -c 'echo "deb http://ftp.de.debian.org/debian buster main contrib" >> /etc/apt/sources.list'
Approfondimenti su sudo
Esaminiamo di più sul comando sudo per ottenere informazioni dettagliate al riguardo.
$ ls -l /usr/bin/sudo -rwsr-xr-x 1 root root 145040 Jun 13 2017 /usr/bin/sudo
Se osservi attentamente le autorizzazioni dei file, setuid bit è abilitato su sudo. Quando un utente esegue questo binario, verrà eseguito con i privilegi dell'utente che possiede il file. In questo caso è l'utente root.
Per dimostrarlo, possiamo usare il comando id con esso come segue:
$ id uid=1002(linuxtechi) gid=1002(linuxtechi) groups=1002(linuxtechi)
Quando eseguiamo il comando id senza sudo, verrà visualizzato l'id dell'utente linuxtechi.
$ sudo id uid=0(root) gid=0(root) groups=0(root)
Ma se eseguiamo il comando id con sudo, verrà visualizzato l'id dell'utente root.
Conclusione
Takeaway da questo articolo è:sudo fornisce un accesso più controllato agli utenti regolari. Usando queste tecniche, più utenti possono interagire con GNU/Linux in modo sicuro.
Leggi anche:Come creare collegamenti hard e soft (collegamento simbolico) su sistemi Linux