Perché l'opzione sudoers NOPASSWD non funziona?


75

Ho una linea NOPASSWD in / etc / sudoers (modificata con visudo)

gatoatigrado    ALL=(ALL) NOPASSWD: /bin/set-slow-cpufreq

Tuttavia, l'output è,

gatoatigrado@coral:~> sudo -n /bin/set-slow-cpufreq
sudo: sorry, a password is required to run sudo

Questo tipo di comando funziona su una macchina OpenSuSE, ma non su Ubuntu 11.10. Che cosa sto facendo di sbagliato?

Nota : non riesco a trovare alcun messaggio relativo al registro di sistema, ad es tail -f /var/log/syslog. Tramite .

modificare

Ecco / etc / sudoers.

Defaults    env_reset

# things I've tried copying from an opensuse machine
Defaults always_set_home
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS XDG_SESSION_COOKIE"

root    ALL=(ALL:ALL) ALL
gatoatigrado ALL=NOPASSWD: /bin/set-slow-cpufreq
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

2
Puoi mostrare il pieno sudoers, l'ordine delle regole non è irrilevante.
enzotib,

Risposte:


118

Dovresti inserire quella riga dopo la riga con la regola per il sudogruppo, perché, come sudoersafferma la pagina man:

   When multiple entries match for a user, they are applied in order.
   Where there are multiple matches, the last match is used (which is not
   necessarily the most specific match).

5
come nota aggiuntiva, ciò vale anche per gli utenti di più gruppi: ad es. l'utente è nell'amministratore di gruppo e nel gruppo sudo se la regola per sudo è dopo admin, la regola per sudo sovrascrive la regola per admin per l'utente in entrambi i gruppi.
Populus,

2
Grazie! Ho aggiunto la mia linea alla fine di /etc/sudoerse ora funziona. Spiegazione completa qui alle persone interessate: techglimpse.com/ubuntu-sudoers-nopasswd-option-not-working
elimisteve

4

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.

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

Inserisci la tua linea che concede l'autorizzazione: gatoatigrado ALL=NOPASSWD: /bin/set-slow-cpufreq

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 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ò alternare 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 sortper vedere se la tua lingua corrente stampa AaBbCcecc. O ABCpoi abcper determinare quale sarebbe il migliore "ultimo" prefisso lettera da usare.


Sono d'accordo con questo. Una parte della logica nella modifica del file / etc / sudoers sembrava contro intuitiva - Non sono riuscito a ottenere% wheel ALL = (ALL) NOPASSWD: ALL per funzionare come è stato scritto in sudoers fino a quando non ho letto un post in cui qualcuno ha detto #includedir La riga /etc/sudoers.d doveva trovarsi prima delle altre righe come% SUDO e% WHEEL. Quando ho messo la directory #include sopra le autorizzazioni dell'altro gruppo, hanno iniziato a funzionare. Quindi ho creato i file per ciascun gruppo in /etc/sudoers.d/ numerati nello stesso ordine in cui erano nel file sudoers, ma root ALL = (ALL) ALL doveva essere comunque sudoer sotto la riga #includedir. Strano.
AveryFreeman,

In realtà penso che il incluso includa la fine dei sudoers. Quello che probabilmente stavi vedendo è uno degli altri file su sudoers.d che stava annullando la modifica. Potresti anche avere una riga più in basso nel tuo file principale che stava limitando il gruppo di ruote. Tieni presente che i sudoer vengono elaborati laddove vince l'ultima regola da applicare a un comando o gruppo, quindi essere più specifici aiuta, ma se un comando ANY generale arriva alla fine e non ha NOPASSWD, sostituirà le tue precedenti eccezioni. Ecco perché dovresti avere le tue regole in file separati in modo che vengano elaborate in seguito.
dragon788,

Non credo, era una nuova installazione di arch. Tutto quello che ho fatto è stato provare e commentare quella riga. Ma è sicuramente una buona cosa da verificare, grazie.
AveryFreeman,

Alcuni sistemi in realtà non usano la ruota e invece usano un gruppo chiamato sudo o adm o admin. Non riesco a ricordare il comportamento di Arch ma puoi correre ide vedere a quali gruppi appartieni.
dragon788,

Arch usa la ruota.
AveryFreeman,

4

Mi sono appena imbattuto anche in questo.

La mia situazione è che sto configurando un sistema remoto che funzionerà senza testa. Ho abilitato la crittografia completa del disco (altrimenti un utente malintenzionato con accesso fisico può fare tutto quello che vuole) Voglio solo autorizzare con la chiave pub coppia di chiavi protetta - il login root è ovviamente completamente disabilitato)

Il programma di installazione di Ubuntu richiede un utente amministratore non root che viene aggiunto al gruppo sudo. Mi ero quindi aggiunto manualmente al sudoersfile usando sudo visudo:

my_username ALL=(ALL:ALL) NOPASSWD:ALL

NOTA: se usi nopasswd sul tuo laptop, devi sempre bloccare il computer mentre ti allontani, altrimenti un utente malintenzionato può scendere a compromessi mentre ti alzi per mettere la panna nel caffè

Dovevo ancora autenticare la password.

La risposta di enzotib è la chiave di ciò che sta succedendo. Il gruppo sudo viene visualizzato in sudoer dopo la voce relativa al mio nome utente.

Invece di spostare la mia voce sotto la riga sudo ho semplicemente rimosso la riga che avevo precedentemente aggiunto e quindi aggiunto NOPASSWDalla voce per%sudo

Sembra funzionare. Usa di nuovo nopasswd solo se ne hai davvero bisogno (Nel mio caso era esattamente quello di cui avevo bisogno, per la maggior parte degli utenti che richiedono una password per l'attività sudo è la cosa migliore)

AVVERTENZA aggiuntiva: modifica sempre i sudoer con visudo. (sudo visudo) Inoltre, avere un'altra finestra aperta commutata all'utente root consente di recuperare eventuali errori che si possono fare durante la modifica del file sudoers.


Non è mai una buona idea abilitare NOPASSWD contro qualsiasi / tutti i comandi, ciò significa che chiunque salga sul tuo sistema e riesca a far entrare un utente nel gruppo sudo sarà in grado di fare QUALSIASI COSA MALE al tuo sistema MOLTO rapidamente. Posso facilmente farlo con solo pochi minuti di accesso utilizzando un LiveCD o inducendo l'utente a eseguire un cmd chiamato sudoche utilizza le proprie autorizzazioni per aggiungere un altro utente al gruppo sudo oltre a eseguire il comando richiesto.
dragon788,

2
Non fare dichiarazioni coperte come questa. Su un sistema senza testa non è desiderabile impostare una password di accesso (basandosi invece sulle coppie di chiavi) Ho abilitato la crittografia del disco completo, quindi buona fortuna con quel cd live. (che tra l'altro ti permetterebbe di fare ogni sorta di cose divertenti su un sistema non crittografato indipendentemente dal file sudoers) Inoltre non puoi scrivere in nessuna delle posizioni nel mio PERCORSO e non ti darò la shell per cominciare a meno che non mi fidi di te per non tentare di sovvertire il sistema. Il tuo problema di sicurezza non è invalido, è semplicemente obsoleto e non universalmente applicabile come intendi.
Jorfus,

Per coloro che non hanno una profonda conoscenza della sicurezza come te, questo tipo di raccomandazione è probabilmente migliore dell'alternativa, ma sono d'accordo che non sia l'ideale.
dragon788,

@ dragon788 Abbastanza vero, forse possiamo entrambi modificare le nostre risposte per aiutare gli utenti di tutti i livelli a fare un passo verso una migliore sicurezza. Aggiungerò un avviso per abilitare la crittografia del disco completo per prevenire compromessi quando un utente malintenzionato ha accesso fisico e una nota che se un utente di laptop dimentica di bloccare il proprio computer in pubblico, sudo nopasswd potrebbe portare a un rapido compromesso. (Anche se proporrei di impostare un tasto rapido di blocco e blocco schermo di cinque minuti potrebbe effettivamente portare a una migliore sicurezza.)
Jorfus

Ottimo aggiornamento, la mia risposta non ha alcun consiglio forte oltre a questi commenti qui, e ironicamente abbastanza sul lavoro in cui utilizzo la crittografia del disco completo Ho finito per abilitare NOPASSWD perché ho una password molto sicura che diventa un problema da digitare ripetutamente e utilizzo xautolock per bloccare la macchina dopo un breve periodo di inattività.
dragon788,

0

Sul sistema remoto, rilascia la crittografia, ma lascia che tutto sia di proprietà di un root come nel gruppo di "Amministratori" - che non è 0!
È possibile modificare #sudo -g Administrators quelli che richiedono l'accesso completo, non nel sudo file, ma nel .loginprofilo. Qualsiasi script standard ora può avere accesso al telecomando come "root" e puoi proteggere i file che devono essere protetti.
Un altro "gruppo" utile è "Sandbox" con una directory di accesso nella cache del browser e può leggerlo liberamente e nient'altro. Usa il primo carattere maiuscolo.

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.