Come fa sudo a decidere se chiedere una password, quando viene dato un comando che in realtà non ha bisogno di `sudo`?


10

Quando si applica sudoa un comando che non è effettivamente necessario sudo,

  • a volte non mi chiede la mia password. Per esempio sotto la mia $HOME, sudo ls.

  • Ma ricordo che lo fa per qualche altro comando, anche se dimentico quale.

Quindi mi chiedevo come sudodecide se chiedere una password, quando viene dato un comando che in realtà non è necessario sudo? C'è qualche regola nel /etc/sudoersspecificarlo?

Il mio vero problema è che quando lo uso du, a volte mostra "permesso negato" per alcune directory, e talvolta no, probabilmente perché non ho il permesso per alcune directory? Mi rivolgo sudoa duprescindere, e ho pensato che avrei chiesto una password a prescindere, ma in realtà non nelle mie directory.


15
Decidere se un programma potrebbe tentare di fare qualcosa che solo root può fare, o accedere a un file che l'utente che esegue il richiamo è vietato l'accesso, senza realmente eseguire il programma, è l'arresto problema sotto mentite spoglie. Quindi puoi essere sicuro che non è quello che sta facendo sudo.
zwol,

2
+1 perché sebbene la domanda si basi su un malinteso, i sintomi sono chiaramente spiegati e ha una risposta inequivocabile.
apertura del

Risposte:


22

In una configurazione tipica, il comando è irrilevante. Devi inserire la tua password la prima volta che usi sudo e non hai bisogno della tua password in quella particolare shell per i prossimi 15 minuti.

Dal punto di vista del computer, non esiste un "comando che necessita di sudo". Qualsiasi utente può tentare di eseguire qualsiasi comando. Il risultato potrebbe essere nient'altro che un messaggio di errore come "Autorizzazione negata" o "Nessun file o directory", ma è sempre possibile eseguire il comando.

Ad esempio, se si esegue dusu un albero di directory con contenuti a cui non si dispone dell'autorizzazione per accedere, verranno visualizzati errori di autorizzazione. Ecco cosa significa "permesso negato". Se esegui sudo du, sudo viene eseguito ducome root, quindi non ottieni errori di autorizzazione (questo è il punto dell'account root: root¹ ha sempre l'autorizzazione). Quando corri sudo du, duviene eseguito come root e sudonon è affatto coinvolto dopo l' duavvio. Se du incontra errori di autorizzazione è completamente irrilevante per il funzionamento di sudo.

Ci sono comandi che richiedono sudo per fare qualcosa di utile . L'utilità è un concetto umano. Devi usare sudo (o altri metodi per eseguire il comando come root) se il comando fa qualcosa di utile quando viene eseguito come root ma non quando viene eseguito con il tuo account.

Il fatto che sudo richieda la tua password dipende da due cose.

  1. In base alla configurazione, sudo decide se è necessario eseguire l'autenticazione. Per impostazione predefinita, sudo richiede una password. Questo può essere disattivato in diversi modi, inclusa l'impostazione authenticatedell'opzione su false e la presenza di una regola applicabile con il NOPASSWDtag.
  2. Se sudo richiede la tua password, potrebbe essere contenuto utilizzare un valore memorizzato nella cache. Va bene perché il motivo per cui sudo ha bisogno della tua password non è autenticare chi la sta chiamando (sudo sa quale utente l'ha invocata), ma per confermare che sei ancora tu ai comandi e non qualcuno che ha preso il controllo della tastiera. Per impostazione predefinita, sudo è disposto a credere di essere ancora ai comandi se hai inserito la password meno di 15 minuti fa (questo può essere modificato con l' timeoutopzione). Devi aver inserito la password nello stesso terminale (in modo che se rimani connesso su un terminale, lascia quel terminale incustodito e utilizzi un altro terminale, qualcuno può "tty_tickets

¹ quasi, ma questo va oltre lo scopo di questo thread.


Potrebbero esserci file con il bit eseguibile impostato solo per root, non per altri. Questo potrebbe non rientrare in "bisogno di root per eseguire". (
Sto solo scherzando

@ PaŭloEbermann Ho scritto che "qualsiasi utente può tentare di eseguire qualsiasi comando" per evitare di rispondere a questo caso (raro). C'è sempre un nitpicker :(
Gilles 'SO- smetti di essere malvagio'

45

sudonon sa se il comando che deve eseguire deve essere eseguito come un altro utente (in genere root), tutto ciò che sa è la sua configurazione. Ciò determina quali utenti possono eseguire sudo, con quali utenti come "target" e per quali comandi; determina inoltre se è necessaria una password, quale e se mantenere un token di autenticazione.

Se stai usando la configurazione Debian predefinita, è molto probabilmente quest'ultimo a essere coinvolto qui: sudoti chiederà la tua password la prima volta che la usi in un determinato terminale, quindi manterrà un token di autenticazione per un certo periodo di tempo. Se riutilizzi sudonello stesso terminale entro tale periodo di tempo, non ti verrà richiesta una password.


Grazie. Vuoi dire che sudo du /path/to/some/dirdovrebbe sempre aver bisogno della mia password o mai, indipendentemente da /path/to/some/dir?
Tim

12
Sì. Avrà sempre bisogno della tua password (o meno). Chiaramente, se ha bisogno della tua password ma l'ha già memorizzata nella cache, non ti chiederà di inserirla.
dr_

5
A rigor di termini, potrebbe dipendere dal percorso, perché /etc/sudoerspuò specificare i comandi e i loro argomenti. Tuttavia, se non hai aggiunto nulla del genere a sudoers(e se lo hai fatto, dovrei sperare che tu ne sia consapevole), gli argomenti non contano (né il comando se hai accesso generale a root tramite sudo ).
Stephen Kitt,

19
sudonon memorizza la tua password nella cache, solo le informazioni che la tua identità è già stata verificata una volta con un controllo della password. Poiché sudoè un programma setuid-root, ha già tutte le autorizzazioni necessarie per eseguire qualsiasi cosa come chiunque - ma si ritiene che consenta agli utenti di utilizzarlo esattamente come specificato nel sudoersfile e di rifiutare tutti gli altri tentativi di utilizzarlo . Ecco perché è importante che sudosia un programma così piccolo e molto ben studiato.
telcoM,

6

a un comando che in realtà non ha bisogno di sudo

Non è che un comando abbia bisogno o non abbia bisogno di sudo. Quando corri

sudo -u user command

il sistema viene eseguito commandcome user.

Se l'invocazione ha esito positivo o meno e se viene richiesta o meno una password, dipende dalla politica di sicurezza sudoers(generalmente configurata in /etc/sudoers).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.