L'aggiunta di NOPASSWD in / etc / sudoers non funziona


47

Il 14.04 qui. Ho SSHed nella mia macchina, ho aggiunto la seguente riga a /etc/sudoers:

myuser   ALL=NOPASSWD: ALL

E poi ho provato a correre:

sudo mkdir /etc/blah

... e mi viene chiesta la mia password. Perché?!?

Io non voglio essere chiesto per la password quando si fa questa operazione. Si prega di notare che quando corro ls -ltr /ottengo:

drwxr-xr-x 94 root root  4096 Jul 30 13:28 etc

Ma non penso che questo importi perché mi sono impostato come un "sudoer", giusto?

Ancora più importante, cosa devo fare per poter funzionare sudo mkdir /etc/blahcome mio attuale utente ( myuser) senza che mi venga chiesta la password?

Ecco il mio intero /etc/sudoersfile:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root      ALL=(ALL:ALL) ALL
fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

Potresti pubblicare il tuo file sudoers? La direttiva è giusta, ma potrebbe non funzionare a causa del contesto.
Lety,

Grazie @Letizia - per favore vedi il mio aggiornamento, qualcosa ti è saltato addosso?
Zac,

Immagino che dovrei anche notare che non ho usato visudotuttavia eventuali modifiche manuali a questo file non erano lavori di copia e incolla, ho digitato tutto così com'è. Ma visudomodifica altri file oltre a questo? Potrebbe essere così ...
Zac,


Inoltre, controlla tutti i file /etc/sudoers.d/, potrebbero sovrascrivere le cose da/etc/sudoers
tokland

Risposte:


69

È la sequenza / ordinamento delle regole che ha causato questo. L'ultima regola ha la preferenza.

Per risolvere il tuo problema, sposta semplicemente le linee,

fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL

dal sudoersfile a

sudo visudo -f /etc/sudoers.d/myOverrides 

Questo è un approccio migliore rispetto alla modifica del sudoersfile con un semplice editor di testo. Se si inseriscono accidentalmente errori nel file, potrebbe non essere più possibile eseguirlo sudo. Utilizzare sempre visudo, in modo da verificare la sintassi e ricevere avvisi sugli errori!

La tua direttiva non funziona perché è sostituita da:

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

Se esegui il groupscomando dovresti vedere che il tuo utente appartiene a questi gruppi.


Il nome del file dovrebbe seguire una convenzione nn-somename, ad esempio/etc/sudoers.d/20-myoverrides
shimatai

Sì, ovviamente, se hai più di un file, questi vengono analizzati in ordine lessicale ordinato, quindi è una buona pratica usare un numero e sarà facile conoscerlo.
Lety

22

Se myuser è nel gruppo sudo , questo ordine delle linee non fornirà accesso senza password (come notato da Florian Diesch), perché la 3a riga ha la precedenza su quella 1.

myuser    ALL=(www-data:www-data) NOPASSWD: ALL
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Quindi basta mettere le linee in questo ordine:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
myuser    ALL=(www-data:www-data) NOPASSWD: ALL

Sotto myuser conto dell'uso sudo -ldi controllare ciò che i permessi myuser ha.


11

Se più voci corrispondono per un utente, viene utilizzata l' ultima . Quindi se fizzbuzze chadminsono membri dei gruppi admino sudoverrà comunque loro richiesta una password.

Inserisci le due righe alla fine del sudoersfile dopo la #includedirriga.


In effetti, quindi una combinazione di @ Letizia e le tue risposte è la migliore, poiché #includedirè l'ultima voce sudoersper impostazione predefinita.
muru,

0

Idealmente, se stai personalizzando quali comandi possono essere eseguiti tramite sudo, dovresti apportare queste modifiche in un file separato in /etc/sudoers.d/invece di modificarlo sudoersdirettamente. Dovresti anche usare sempre visudoper modificare i file. Non si dovrebbe mai concedere NOPASSWDin ALLcomandi.

Esempio: sudo visudo -f /etc/sudoers.d/mynotriskycommand

Inserisci la tua linea che concede l'autorizzazione: myuser ALL= NOPASSWD: /bin/mkdir

Quindi salva ed esci e visudoti avviserà se hai errori di sintassi.

È possibile eseguire sudo -lper visualizzare le autorizzazioni concesse all'utente, se viene visualizzato uno qualsiasi dei NOPASSWDcomandi specifici dell'utente PRIMA di qualsiasi %groupyouarein ALL=(ALL) ALLcomando nell'output, verrà richiesta la password.

Se ti ritrovi a creare molti di questi file sudoers.d, allora forse vorrai crearli nominati per utente in modo che siano più facili da visualizzare. Tieni presente che l'ordinamento dei NOMI DEI FILE e delle REGOLE all'interno del file è molto importante, quello ULTIMO caricato vince, sia che sia PIÙ o MENO permissivo rispetto alle voci precedenti.

Puoi controllare l'ordine dei nomi dei file usando un prefisso 00-99 o aa / bb / cc, anche se tieni presente che se hai QUALSIASI file che non ha un prefisso numerico, verranno caricati dopo i file numerati, sovrascrivendo le impostazioni. Questo perché, a seconda delle impostazioni della lingua, l '"ordinamento lessicale" della shell utilizza prima i numeri di ordinamento e quindi può intercalare lettere maiuscole e minuscole quando si ordina in ordine "crescente".

Prova a correre printf '%s\n' {{0..99},{A-Z},{a-z}} | sorte printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sortvedi se la tua lingua corrente stampa AaBbCcecc. O ABCpoi abcper determinare quale sarebbe il migliore "ultimo" prefisso lettera da usare.

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.