GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Una guida per principianti per comprendere sudo su Ubuntu

Hai mai ricevuto un errore "Autorizzazione negata" mentre lavoravi sulla riga di comando di Linux? È probabile che tu stia tentando di eseguire un'operazione che richiede i permessi di root. Ad esempio, lo screenshot seguente mostra l'errore generato quando stavo tentando di copiare un file binario in una delle directory di sistema:

Allora qual è la soluzione a questo problema? Semplice, usa il sudo comando.

All'utente che sta eseguendo il comando verrà richiesta la password di accesso. Una volta inserita la password corretta, l'operazione verrà eseguita correttamente.

Sebbene sudo sia senza dubbio un comando indispensabile per chiunque lavori sulla riga di comando in Linux, ci sono molti altri dettagli correlati (e approfonditi) che dovresti conoscere per utilizzare il comando in modo più responsabile ed efficace. Ed è esattamente ciò di cui parleremo qui in questo articolo.

But before we move ahead, it's worth mentioning that all the commands and instructions mentioned in this article have been tested on Ubuntu 14.04LTS with Bash shell version 4.3.11.

Cos'è sudo?

Il comando sudo, come molti di voi potrebbero già sapere, viene utilizzato per eseguire un comando con privilegi elevati (di solito come root). Un esempio di questo abbiamo già discusso nella sezione introduttiva sopra. Tuttavia, se lo desideri, puoi utilizzare sudo per eseguire il comando come un altro utente (non root).

Ciò si ottiene tramite -u opzione della riga di comando fornita dallo strumento. Ad esempio, nell'esempio mostrato di seguito, io (himanshu) ho provato a rinominare un file nella directory home di un altro utente (howtoforge), ma ho ricevuto un errore "permesso negato". E poi ho provato lo stesso comando 'mv' con 'sudo -u howtoforge', il comando ha avuto successo:

Qualche utente può usare sudo?

No. Affinché un utente possa usare sudo, una voce corrispondente a quell'utente dovrebbe trovarsi in /etc/sudoers file. Il paragrafo seguente - tratto dal sito web di Ubuntu - dovrebbe chiarire meglio:

The /etc/sudoers file controls who can run what commands as what users on what machines and can also control special things such as whether you need a password for particular commands. The file is composed of aliases (basically variables) and user specifications (which control who can run what).

Se stai usando Ubuntu, è facile assicurarsi che un utente possa eseguire il comando sudo:tutto ciò che devi fare è rendere quell'account utente di tipo "amministratore". Questo può essere fatto andando su Impostazioni di sistema... -> Account utente.

Sblocco della finestra:

Quindi selezionando l'utente di cui desideri modificare il tipo di account, quindi modificando il tipo in "amministratore"

Tuttavia, se non sei su Ubuntu o la tua distribuzione non fornisce questa funzione, puoi modificare manualmente /etc/sudoers file per apportare la modifica. Ti verrà richiesto di aggiungere la seguente riga in quel file:

[user]    ALL=(ALL:ALL) ALL

Inutile dire che [utente] dovrebbe essere sostituito dal nome utente dell'account a cui stai concedendo il privilegio sudo. Una cosa importante che vale la pena menzionare qui è che il metodo ufficialmente suggerito per modificare questo file è attraverso il visudo comando - tutto ciò che devi fare è eseguire il seguente comando:

sudo visudo

Per darti un'idea del perché esattamente è così, ecco un estratto dal manuale di visudo:

visudo edits the sudoers file in a safe fashion. visudo locks the sudoers file against multiple simultaneous edits, provides basic sanity checks, and checks for parse errors. If the sudoers file is currently being edited you will receive a message to try again later.

Per maggiori informazioni su visudo, vai qui.

Cos'è una sessione di sudo?

Se usi frequentemente il comando sudo, sono sicuro che avrai notato che dopo aver inserito correttamente la password una volta, puoi eseguire più comandi sudo senza che ti venga richiesta la password. Ma dopo qualche tempo, il comando sudo chiede di nuovo la tua password.

Questo comportamento non ha nulla a che fare con il numero di comandi sudo che esegui, ma dipende invece dal tempo. Sì, per impostazione predefinita, sudo non chiederà la password per 15 minuti dopo che l'utente l'ha inserita una volta. Pubblica questi 15 minuti, ti verrà nuovamente richiesta la password.

Tuttavia, se lo desideri, puoi modificare questo comportamento. Per questo, apri il file /etc/sudoers usando il seguente comando:

sudo visudo

E poi vai alla riga che dice:

Defaults env_reset

e aggiungi la seguente variabile (evidenziata in grassetto sotto) alla fine della riga

Defaults env_reset,timestamp_timeout=[new-value]

Il campo [nuovo-valore] dovrebbe essere sostituito dal numero di minuti che desideri che duri la tua sessione di sudo. Ad esempio, ho utilizzato il valore 40.

Nel caso in cui desideri che venga richiesta la password ogni volta che usi il comando sudo, in tal caso puoi assegnare il valore '0' a questa variabile. E per quelli di voi che desiderano che la loro sessione di sudo non vada mai in timeout, è possibile assegnare il valore '-1'.

Tieni presente che l'utilizzo di timestamp_timeout con valore '-1' è fortemente sconsigliato.

La password sudo

Come avrai notato, ogni volta che sudo ti chiede una password e inizi a inserirla, non viene visualizzato nulla, nemmeno gli asterischi che di solito sono la norma. Anche se in generale non è un grosso problema, alcuni utenti potrebbero voler visualizzare gli asterischi per qualsiasi motivo.

La cosa buona è che è possibile e abbastanza facile da fare. Tutto quello che devi fare è modificare la seguente riga nel file /etc/sudoers:

Defaults        env_reset

a

Defaults        env_reset,pwfeedback

E salva il file.

Ora, ogni volta che digiti la password sudo, verrà visualizzato un asterisco.

Alcune importanti opzioni della riga di comando di sudo

A parte l'opzione della riga di comando -u (di cui abbiamo già discusso all'inizio di questo tutorial), ci sono altre importanti opzioni della riga di comando sudo che meritano una menzione. In questa sezione ne discuteremo alcuni.

L'opzione -k

Considera un caso in cui hai appena eseguito un comando sudo dopo aver inserito la tua password. Ora, come già sai, la sessione sudo rimane attiva per 15 minuti per impostazione predefinita. Supponiamo che durante questa sessione tu debba concedere a qualcuno l'accesso al tuo terminale, ma non vuoi che sia in grado di usare sudo. Cosa farai?

Per fortuna, esiste un'opzione della riga di comando -k che consente all'utente di revocare l'autorizzazione sudo. Ecco cosa ha da dire la pagina man di sudo su questa opzione:

-k, --reset-timestamp

When used without a command, invalidates the user's cached credentials. In other words, the next time sudo is run a password will be required. This option does not require a password and was added to allow a user to revoke sudo permissions from a .logout file.

When used in conjunction with a command or an option that may require a password, this option will cause sudo to ignore the user's cached credentials. As a result, sudo will prompt for a password (if one is required by the security policy) and will not update the user's cached credentials.

L'opzione -s

Potrebbero esserci momenti in cui il tuo lavoro richiede l'esecuzione di un bucket di comandi che richiedono i privilegi di root e non vuoi inserire la password sudo ogni tanto. Inoltre, non vuoi modificare il limite di timeout della sessione sudo apportando modifiche al file /etc/sudoers.

In tal caso, potresti voler utilizzare -s opzione della riga di comando del comando sudo. Ecco come lo spiega la pagina man di sudo:

-s, --shell

Run the shell specified by the SHELL environment variable if it is set or the shell specified by the invoking user's password database entry. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.

Quindi, in pratica, ciò che fa questa opzione della riga di comando è:

  • Avvia una nuova shell - come per quale shell, si fa riferimento alla variabile SHELL env. Nel caso in cui $SHELL sia vuoto, la shell definita in /etc/passwd il file viene prelevato.
  • Se stai passando anche il nome di un comando insieme all'opzione -s (ad esempio:sudo -s whoami ), quindi il comando effettivo che viene eseguito è: sudo /bin/bash -c whoami.
  • Se non stai tentando di eseguire nessun altro comando (ovvero, stai solo cercando di eseguire sudo -s ) quindi ottieni una shell interattiva con privilegi di root.

Ciò che vale la pena tenere a mente qui è che -s l'opzione della riga di comando ti dà una shell con privilegi di root, ma non ottieni l'ambiente di root:è il tuo .bashrc che viene originato. Ciò significa che, ad esempio, nella nuova shell sudo -s viene eseguito, eseguendo il whoami il comando restituirà comunque il tuo nome utente e non 'root'.

L'opzione -i

L'opzione -i è simile all'opzione -s di cui abbiamo appena parlato. Tuttavia, ci sono alcune differenze. Una delle differenze principali è che -i ti fornisce anche l'ambiente di root, il che significa che il tuo .bashrc (dell'utente) viene ignorato. È come diventare root senza registrarsi esplicitamente come root. Inoltre, non è necessario inserire anche la password dell'utente root.

Importante :Tieni presente che esiste un su comando che ti consente anche di cambiare utente (per impostazione predefinita, ti consente di diventare root). Questo comando richiede di inserire la password di "root". Per evitare ciò, puoi anche eseguirlo con sudo ('sudo su'); in tal caso dovrai solo inserire la tua password di accesso. Tuttavia, 'su' e 'sudo su' presentano alcune differenze di fondo:per capirli e per saperne di più su come 'sudo -i' si confronta con loro, vai qui.

Conclusione

Spero che ormai tu abbia almeno l'idea di base dietro sudo e come modifichi il suo comportamento predefinito. Prova le modifiche a /etc/sudoers che abbiamo spiegato qui, passa anche attraverso la discussione del forum (collegata nell'ultimo paragrafo) per ottenere maggiori informazioni sul comando sudo.


Ubuntu
  1. Una guida al terminale Linux per principianti

  2. Come installare MongoDB su Ubuntu 18.04 – Guida per principianti

  3. A partire da Vagrant su Ubuntu 14.10 - Una guida per principianti

  4. Diventa un utente root in Ubuntu 22.04 - Guida passo passo?

  5. Installa Apache Subversion su Ubuntu 20.04 LTS - Guida passo passo?

Guida di Ubuntu 22.04

Impostazione di un IP statico su Ubuntu:una guida per principianti

Come installare la GUI su Ubuntu Server (una guida facile)

Correggi l'errore "Nessun adattatore Wi-Fi trovato" su Ubuntu

20 comandi di base di Ubuntu per principianti

Comando Ping in Ubuntu 22.04