File Sudoers, abilita NOPASSWD per l'utente, tutti i comandi


142

Prefazione

Questa è una domanda abbastanza complessa relativa al file Sudoers e al comando sudo in generale.

NOTA: ho apportato queste modifiche su una macchina dedicata che esegue Ubuntu Desktop 13.04, che utilizzo esclusivamente a scopo di apprendimento. Capisco che è un enorme rischio per la sicurezza abilitare NOPASSWD sudo.

Domanda

Inizialmente, la mia unica modifica al file sudoers (/ etc / sudoers) era una riga, una specifica dell'utente che avrebbe dovuto consentire a 'nicholsonjf' di eseguire tutti i comandi con sudo senza dover inserire una password (vedere la riga che inizia con 'nicholsonjf '):

# 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
nicholsonjf    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

Tuttavia, questo non ha funzionato e mi è stata comunque richiesta la password ogni volta che ho eseguito un comando come 'nicholsonjf'. Sono stato in grado di iniziare a eseguire i comandi sudo come 'nicholsonjf' solo dopo aver rimosso 'nicholsonjf' dai gruppi sudo e admin.

Qualcuno può spiegare perché questo ha funzionato?

È perché l'utente "nicholsonjf" ereditava i diritti sudo dalle due specifiche del gruppo "admin" e "sudo" (visualizzate di seguito nel file sudoers), che sostituivano le specifiche dell'utente "nicholsonjf" perché erano più in basso nella file di configurazione?


7
nota: ALL = NOPASSWD: ALL deve essere ALL = (ALL) NOPASSWD: ALL oppure non funziona ...
André Verwijs


Risposte:


164

La riga che hai aggiunto è stata sostituita. Da man sudoers:

Quando più voci corrispondono per un utente, vengono applicate in ordine. In caso di più corrispondenze, viene utilizzata l'ultima corrispondenza (che non è necessariamente la corrispondenza più specifica).

Nel tuo caso nicholsonjfera un membro del gruppo, sudoquindi per lui questa linea si applicava:

%sudo   ALL=(ALL:ALL) ALL

Se vuoi sovrascrivere le voci, /etc/sudoersinserisci semplicemente le nuove voci dopo di esse.

La nuova voce dovrebbe apparire come

myuser ALL=(ALL) NOPASSWD: ALL per un singolo utente o

%sudo ALL=(ALL) NOPASSWD: ALL per un gruppo.


6
Per una soluzione completa, vorrei vedere qualcosa NOPASSWDin questa risposta ...
Daniel Alder,

22
Penso che la soluzione dovrebbe essere:%sudo ALL=(ALL) NOPASSWD:ALL
Daniel Alder l'

3
@DanielAlder: la riga delle specifiche dalla domanda nicholsonjf ALL=NOPASSWD: ALLè corretta. Era proprio in un posto sbagliato, come ho spiegato nella risposta. ------ La Runasspecifica - nel tuo caso (ALL)- è facoltativa. Se si omette la specifica, è possibile eseguire i comandi come roote non è possibile utilizzare -ue le -gopzioni di sudo.
pabouk,

Questo è un rischio per la sicurezza peggiore in quanto offre a più utenti l'accesso senza password. Se è il tuo PC personale, non è significativo, forse. Spostai solo la linea personale, per durare.
Mark Williams,

4
Un'aggiunta, piuttosto che correzione, se si utilizza qualcosa basato su debian / ubuntu (può essere generalmente applicato, non visto altrove) La scommessa migliore in assoluto è aggiungere comandi personalizzati a un file in /etc/sudoers.d/ e lasciare sudoers stesso gestito dal gestore pacchetti.
Aquarion,

120

Per un singolo utente, aggiungi questa riga alla fine del tuo sudoersfile usandosudo visudo

superuser ALL=(ALL) NOPASSWD: ALL

Per un gruppo

%supergroup  ALL=(ALL) NOPASSWD: ALL

8
Prima di leggere questa risposta l'ho fatto %sudo ALL=NOPASSWD: ALLe funziona. Sono l'unico che trova davvero difficile comprendere la Extended Backus-Naur Form?
Vince il

4
@Vince Quando usato il tuo comando non posso sudosenza password come utente senza i privilegi di sudo. Ad esempio sudo -u root -i, funziona, ma sudo -u git -inon lo fa.
NeverEndingQueue

Questa è una risposta molto più utile di quella accettata, che sebbene risponda alla domanda del PO, probabilmente non è ciò che la maggior parte delle persone raggiunge questa pagina tramite Google cercando.
Mahmoud Al-Qudsi,

3

Non richiedere mai all'utente corrente una password quando l'utente lo sudofa

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-password

questo creerà un file chiamato /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-passworde significherà che all'utente su cui è stato eseguito quel comando non verrà richiesta la password durante l'esecuzione del sudocomando. Ti verrà comunque richiesta la password in altri contesti, come l'installazione di elementi dall'app grafica del software Ubuntu .

I vantaggi di farlo in questo modo rispetto all'aggiunta della riga nel echocomando /etc/sudoersall'utilizzo sudo visudo(come suggerito dalle altre risposte) sono

  1. /etc/sudoersa volte viene modificato dagli aggiornamenti di sistema, mentre i file /etc/sudoers.dnon lo sono
  2. il sudo visudometodo è soggetto a errori (come evidenziato da questa stessa domanda), mentre copiare / incollare un comando è molto più difficile da confondere

Secondo sudo cat /etc/sudoers.d/READMEquesta funzione (di inserire file extra sudoer /etc/sudoers.d) è stata abilitata di default da Debian 1.7.2p1-1, che è uscito alla fine degli anni '90 (Ubuntu è basato su Debian ).


(sentiti libero di modificare la mia risposta se riesci a trovare un nome file migliore)
Boris

0

Come ha detto Vince in un commento , puoi usare questa linea:

%sudo ALL=NOPASSWD: ALL

(Questo è diverso dalle righe mostrate in quelle risposte e ha risolto il problema per me.)


@Eliah non è così diverso dalle altre risposte. Tutto ciò che fa è sostituire il segnaposto supergroupnella risposta di Fedir con sudo. E poi, un altro utente per il gruppo wheel? O qualsiasi altro gruppo che l'utente sta usando?
muru,

1
@muru "Tutto ciò che fa è sostituire il segnaposto supergroupnella risposta di Fedir con sudo." Che cosa? Sostituendo supergroupcon sudonei %supergroup ALL=(ALL) NOPASSWD:ALLrendimenti di riga %sudo ALL=(ALL) NOPASSWD:ALL, no %sudo ALL=NOPASSWD: ALL.
Eliah Kagan,

Il che è probabilmente peggiore, poiché ora NOPASSWD è solo per root come utente di destinazione. Quindi, non risponde nemmeno correttamente alla domanda!
muru,

@muru Ciò che non è nemmeno discutibile , tuttavia, è una sostituzione di supergroupcon sudo. Questa è la sua risposta, non un post di ringraziamento o una copia di un'altra risposta. Ma sì, sono d'accordo: a meno che non lo intendano , questo non sarà buono per la maggior parte degli utenti come i metodi nelle altre risposte. (Ma soprattutto considerando che la domanda dice "tutti i comandi", non "tutti gli utenti target", non penso che questo sia in effetti nemmeno tentando di rispondere alla domanda che è stata posta.)
Eliah Kagan

Questo ha funzionato per me e volevo condividerlo con altri utenti :) (rimuovere il mio commento se lo si desidera).
E. Fortes,
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.