Comando sudo Linux

comando sudo

Su sistemi operativi simili a Unix, il comando sudo (sudo sta per "superutente do") consente a un utente con le autorizzazioni appropriate di eseguire un comando come un altro utente, come il superutente.

Questo documento descrive la versione Linux di sudo.

Descrizione

sudo consente a un utente autorizzato di eseguire un comando come un altro utente, in base alle specifiche nel file / etc / sudoers. L'utente e il gid reali ed effettivi dell'utente emittente vengono quindi impostati in modo da corrispondere a quelli dell'account utente di destinazione come specificato nel file passwd.

Per impostazione predefinita, sudo richiede che gli utenti si autenticano con una password. Per impostazione predefinita, questa è la password dell'utente, non la stessa password di root.

Una volta che un utente è stato autenticato, viene registrato un timestamp e l'utente può utilizzare sudo senza password per un breve periodo di tempo (5 minuti, a meno che non sia configurato in modo diverso nei sudoers). Questo timestamp può essere rinnovato se l'utente emette sudo con il flag -v.

Se un utente non elencato in sudoers tenta di eseguire un comando utilizzando sudo, viene considerato un tentativo non riuscito di violare la sicurezza del sistema e la posta viene inviata alle autorità appropriate, come definito al momento della configurazione o nel file sudoers. L'autorità predefinita per ricevere notifiche sui tentativi di sudo non riusciti è root. Si noti che la posta non verrà inviata se un utente non autorizzato tenta di eseguire sudo con i flag -l o -v; questo consente agli utenti di determinare autonomamente se possono o meno usare sudo.

sudo può registrare tentativi (e errori) sia riusciti che non riusciti su syslog, un file di registro univoco o entrambi. Per impostazione predefinita, sudo accederà a syslog ma questo può essere modificato al momento della configurazione o nel file sudoers.

Per modificare il file sudoers, utilizzare il comando visudo.

Sintassi

sudo -V | -h | -l | -L | -v | -k | -K | -s | [-H] [-P] [-S] [-b] | [-p prompt] [-c class | -] [-a auth_type] [-r role] [-t type] [-u username | #uid] comando

Opzioni

-V L'opzione -V (versione) fa sì che sudo stampi il numero di versione ed esca. Se l'utente che sta invocando è già root, l'opzione -V stamperà un elenco delle impostazioni predefinite sudo con cui è stato compilato e gli indirizzi di rete locali della macchina.
-l L'opzione -l (elenco) stamperà i comandi consentiti (e vietati) all'utente sull'host corrente.
-L L'opzione -L (elenca i valori predefiniti) elencherà i parametri che possono essere impostati in una riga Predefiniti insieme a una breve descrizione per ciascuno. Questa opzione è utile insieme a grep.
-h L'opzione -h (aiuto) fa sì che sudo stampi e chiuda un messaggio di utilizzo.
-v Se viene data l'opzione -v (validate), sudo aggiornerà il timestamp dell'utente, richiedendo la password dell'utente, se necessario. Questo prolunga il timeout sudo per altri 5 minuti (o qualunque sia il timeout impostato su sudoers) ma non esegue un comando.
-k L'opzione -k (kill) per sudo invalida il timestamp dell'utente impostando l'ora su di esso in epoca. Alla successiva esecuzione di sudo verrà richiesta una password. Questa opzione non richiede una password ed è stata aggiunta per consentire a un utente di revocare le autorizzazioni sudo da un file .logout.
-K L'opzione -K (sure kill) per sudo rimuove del tutto il timestamp dell'utente. Allo stesso modo, questa opzione non richiede una password.
-b L'opzione -b (sfondo) dice a sudo di eseguire il comando dato in background. Si noti che se si utilizza l'opzione -b non è possibile utilizzare il controllo del processo shell per manipolare il processo.
-p L'opzione -p (prompt) consente di sovrascrivere la richiesta della password predefinita e utilizzarne una personalizzata. Sono supportate le seguenti percentuali di escape ('%'):% u viene espanso nel nome di accesso dell'utente che invoca;% U viene espanso nel nome di accesso dell'utente, il comando verrà eseguito come (il valore predefinito è root);% h è espanso al nome host locale senza il nome del dominio;% H viene espanso al nome host locale incluso il nome del dominio (solo se il nome host della macchina è completo o se è impostata l'opzione sudoers "fqdn"); %% (due caratteri% consecutivi) sono compressi in un singolo carattere%.
-c L'opzione -c (class) fa sì che sudo esegua il comando specificato con risorse limitate dalla classe di login specificata. L'argomento class può essere un nome di classe come definito in /etc/login.conf o un singolo carattere '-'. Specificare una classe di – indica che il comando deve essere eseguito dalle funzionalità di accesso predefinite per l'utente che esegue il comando. Se l'argomento class specifica una classe utente esistente, il comando deve essere eseguito come root oppure il comando sudo deve essere eseguito da una shell che è già root. Questa opzione è disponibile solo su sistemi con classi di accesso BSD in cui sudo è stato configurato con l'opzione –with-logincap.
-a L'opzione -a (tipo di autenticazione) fa sì che sudo utilizzi il tipo di autenticazione specificato durante la convalida dell'utente, come consentito da /etc/login.conf. L'amministratore di sistema può specificare un elenco di metodi di autenticazione specifici di sudo aggiungendo una voce "auth-sudo" in /etc/login.conf. Questa opzione è disponibile solo su sistemi che supportano l'autenticazione BSD in cui sudo è stato configurato con l'opzione –with-bsdauth.
-u L'opzione -u (utente) fa eseguire a sudo il comando specificato come utente diverso da root. Per specificare un uid anziché un nome utente, utilizzare #uid.
-s L'opzione -s (shell) esegue la shell specificata dalla variabile d'ambiente SHELL se è impostata o la shell come specificato nel file passwd.
-H L'opzione -H (HOME) imposta la variabile di ambiente HOME sulla directory home dell'utente di destinazione (root per impostazione predefinita) come specificato in passwd. Di default, sudo non modifica HOME.
-P L'opzione -P (preserva vettore gruppo) fa sì che sudo mantenga inalterato il vettore gruppo dell'utente. Per impostazione predefinita, sudo inizializza il vettore del gruppo nell'elenco dei gruppi dell'utente di destinazione. Gli ID di gruppo reali ed effettivi, tuttavia, sono ancora impostati per corrispondere all'utente di destinazione.
-r L'opzione -r (ruolo) fa sì che il nuovo contesto di sicurezza (SELinux) abbia il ruolo specificato da ROLE.
-t L'opzione -t (type) fa sì che il nuovo contesto di sicurezza (SELinux) abbia il tipo (dominio) specificato da TYPE. Se non viene specificato alcun tipo, il tipo predefinito viene derivato dal ruolo specificato.
-S L'opzione -S (stdin) fa sì che sudo legga la password dall'input standard anziché dal dispositivo terminale.
Il flag – indica che sudo dovrebbe interrompere l'elaborazione degli argomenti della riga di comando. È molto utile insieme alla bandiera -s.

Valori di ritorno

In caso di esecuzione corretta di un programma, il valore restituito da sudo sarà il valore restituito dal programma che è stato eseguito.

Altrimenti, sudo si chiude con un valore di uscita pari a 1 se si verifica un problema di configurazione / autorizzazione o se sudo non è in grado di eseguire il comando dato. In quest'ultimo caso la stringa di errore viene stampata su stderr. Se sudo non è in grado di stabilire una o più voci nel PERCORSO dell'utente, viene stampato un errore su stderr. (Se la directory non esiste o se in realtà non è una directory, la voce viene ignorata e non viene stampato alcun errore.) Ciò non dovrebbe accadere in circostanze normali. Il motivo più comune per cui stat deve restituire "permesso negato" è se si sta eseguendo un auto-mounter e una delle directory nel proprio PERCORSO si trova su un computer attualmente non raggiungibile.

Note di sicurezza

sudo cerca di essere sicuro durante l'esecuzione dei comandi. Le variabili che controllano la modalità di caricamento dinamico e associazione possono essere utilizzate per sovvertire il programma eseguito da sudo. Per contrastare ciò, alcune variabili d'ambiente specifiche del sistema vengono rimosse dall'ambiente che viene passato ai comandi eseguiti. Altre variabili che sudo rimuove dall'ambiente includono:

  • IFS
  • ENV
  • BASH_ENV
  • KRB_CONF
  • KRBCONFDIR
  • KRBTKFILE
  • KRB5_CONFIG
  • LOCALDOMAIN
  • RES_OPTIONS
  • HOSTALIASES
  • NLSPATH
  • PATH_LOCALE
  • TERMINFO
  • TERMINFO_DIRS
  • TERMPATH

poiché anche loro possono rappresentare una minaccia. Se la variabile TERMCAP è impostata ed è un nome percorso, anch'essa viene ignorata. Inoltre, se alcune variabili contengono i caratteri / o%, verranno ignorate.

Se sudo è stato compilato con il supporto SecurID, anche le variabili VAR_ACE, USR_ACE e DLC_ACE vengono cancellate. L'elenco delle variabili di ambiente che sudo cancella è contenuto nell'output di sudo -V quando eseguito come root.

Per impedire lo spoofing dei comandi, sudo controlla "." e "" (entrambi che indicano la directory corrente) durano quando si cerca un comando nel PERCORSO dell'utente (se uno o entrambi si trovano nel PERCORSO). Si noti, tuttavia, che la variabile d'ambiente PATH effettiva non viene modificata e viene passata invariata al programma che sudo esegue.

Per motivi di sicurezza, se il tuo sistema operativo supporta librerie condivise e non disabilita i percorsi di ricerca delle librerie definite dall'utente per i programmi setuid (molti lo fanno), dovresti utilizzare un'opzione linker che disabilita questo comportamento o collegare sudo staticamente.

sudo controllerà la proprietà della sua directory timestamp (/ var / run / sudo di default) e ignorerà il contenuto della directory se non è di proprietà di root e scrivibile solo da root. Sui sistemi che consentono agli utenti non root di distribuire file tramite chown, se la directory timestamp si trova in una directory scrivibile da chiunque (ad esempio: / tmp), è possibile per un utente creare la directory timestamp prima dell'esecuzione di sudo. Tuttavia, poiché sudo controlla la proprietà e la modalità della directory e il suo contenuto, l'unico danno che può essere fatto è "nascondere" i file inserendoli nella directory del timestamp. È improbabile che ciò accada poiché una volta che la directory temporale è di proprietà di root e inaccessibile a qualsiasi altro utente, l'utente che colloca i file lì non sarebbe in grado di recuperarli. Per ovviare a questo problema è possibile utilizzare una directory non scrivibile in tutto il mondo per i timestamp (ad esempio / var / adm / sudo) oppure creare / var / run / sudo con il proprietario appropriato (root) e le autorizzazioni (0700) in i file di avvio del sistema.

sudo non rispetterà i timestamp impostati in futuro. I timestamp con una data maggiore di current_time + 2 * TIMEOUT verranno ignorati e sudo registrerà e si lamenterà. Questo viene fatto per impedire a un utente di creare il proprio timestamp con una data falsa su sistemi che consentono agli utenti di distribuire file.

Nota che sudo registra solo il comando che esegue esplicitamente. Se un utente esegue un comando come "sudo su" o "sudo sh", i comandi successivi eseguiti da quella shell non verranno registrati, né il controllo di accesso di sudo li influenzerà. Lo stesso vale per i comandi che offrono escape della shell (inclusa la maggior parte degli editor). Per questo motivo, occorre prestare attenzione quando si dà agli utenti l'accesso ai comandi tramite sudo per verificare che il comando non dia inavvertitamente all'utente una shell root efficace.

variabili ambientali

sudo utilizza le seguenti variabili di ambiente:

PERCORSO Impostato su un valore normale se è impostato SECURE_PATH
SHELL Utilizzato per determinare la shell da eseguire con l'opzione -s
UTENTE Impostato sull'utente di destinazione (root a meno che non sia specificata l'opzione -u)
HOME Nella modalità -s o -H (o se sudo è stato configurato con l'opzione –enable-shell-sets-home), impostare la directory home dell'utente di destinazione.
SUDO_PROMPT Utilizzato come richiesta password predefinita
SUDO_COMMAND Impostato sul comando eseguito da sudo
SUDO_USER Impostato sul login dell'utente che ha invocato sudo
SUDO_UID Impostato sull'UID dell'utente che ha invocato sudo
SUDO_GID Impostato sul gid dell'utente che ha invocato sudo
SUDO_PS1 Se impostato, PS1 verrà impostato sul suo valore

Esempi

sudo shutdown-r now

Riavvia il sistema; eseguire il comando shutdown come root.

sudo -u spero ls / home / otheruser / Documents

Elenca i contenuti della directory / home / otheruser / Documents come sperano gli utenti.

sudo -u speranza -g altri utenti mkdir / home / otheruser / Documents / newfiles

Crea una nuova directory con il comando mkdir, come spera l'utente, con il gruppo corrente di Hope impostato su altri utenti. la speranza deve essere un membro del gruppo degli altri utenti.

sudo -v

Estendi / ripristina il timeout di autenticazione automatica di sudo, permettendoti di continuare ad inviare comandi sudo senza inserire una password.

sudo -k

Autenticazione sudo "Kill" per l'utente corrente. Il prossimo comando sudo richiederà una password.

Comandi correlati

su – Diventa il superutente o un altro utente.visudo – Modifica il file sudoers, che definisce chi può eseguire sudo.

#goog-gt-tt {display:none !important;}.goog-te-banner-frame {display:none !important;}.goog-te-menu-value:hover {text-decoration:none !important;}body {top:0 !important;}#gtranslate_element {display:none!important;}

var gt_not_translated_list = [“BASH_ENV”,”KRB_CONF”,”KRBCONFDIR”,”KRBTKFILE”,”KRB5_CONFIG”,”LOCALDOMAIN”,”RES_OPTIONS”,”HOSTALIASES”,”NLSPATH”,”PATH_LOCALE”,”TERMINFO”,”TERMINFO_DIRS”,”TERMPATH”,”SUDO_PROMPT”,”SUDO_COMMAND”,”SUDO_USER”,”SUDO_UID”,”SUDO_GID”,”SUDO_PS1″,”sudo -v”,”sudo -k”];
document.cookie = “googtrans=/en/it; domain=.balogs.xyz”;
document.cookie = “googtrans=/en/it”;
function GTranslateElementInit() {new google.translate.TranslateElement({pageLanguage: ‘en’,layout: google.translate.TranslateElement.InlineLayout.SIMPLE,autoDisplay: false,multilanguagePage: true}, ‘gtranslate_element’);}