Eseguire sudo senza password?


292

Ispirato da questa domanda ....

Sono l'unica persona che utilizza il mio sistema con 12.04.
Ogni volta che emetto un sudocomando; il sistema richiede la password dell'utente (che è buona a modo suo).
Comunque stavo pensando; senza attivare l' account root ; come posso eseguire i comandi sudo che non chiederanno la password dell'utente per l'autenticazione.

NOTA: voglio eseguire il comando sudo senza autenticare tramite password; solo quando vengono eseguiti tramite terminale.
Non voglio rimuovere questo ulteriore livello di sicurezza da altre funzioni, ad esempio usando 'Ubuntu software center' o eseguendo uno script bash trascinando il file Something.sh sul terminale.


2
quindi vuoi solo che ti venga chiesta la password nel terminale e per altre cose no, o viceversa ?! in entrambi i modi, penso che sia una violazione della sicurezza elevata
Dr_Bunsen il

Voglio che il sistema non possa chiedere la password solo quando si trova nel terminale ... per qualsiasi altro scopo il sistema deve chiedere una password. Questo requisito è solo temporaneo e deve essere utilizzato durante la configurazione di n l'installazione di nuovi server .. durante le nuove installazioni di server, ci vogliono davvero ore di configurazione con i comandi sudo .. emissione della password ogni 15 min. è mal di testa. Non voglio usare l'account di root.
Bhavesh Diwan,

Devi leggere la discussione in: askubuntu.com/questions/135428/…
david6

1
Di sicuro puoi prolungare il timeout. Inoltre, se stai spesso eseguendo nuove configurazioni del server, dovresti pensare di automatizzare il processo. Non sei pagato per scrivere, sei pagato per risolvere i problemi e per farcela.
MauganRa,

Risposte:


82

sudo -i è la strada da percorrere se non si desidera digitare una password ogni 10 minuti mentre si apportano modifiche al proprio sistema (o altri sistemi) e non si desidera modificare alcun file di sistema.

Passerà al root usando la tua sudopassword utente, quando chiudi la console o digiti exit, torni al tuo normale utente.


2
Sarà vero che inserisco la password solo una volta ... e fino al momento in cui non esco; tempo 5 ore o 15 .... il sistema non chiederà l'autenticazione tramite password quando viene emesso un comando sudo.
Bhavesh Diwan,

2
@ Z9iT fino a quando non si digita exito fino alla chiusura della finestra dell'emulatore di terminale.
Bruno Pereira,

2
Grazie .. Ha accettato questa risposta perché serve allo scopo di inviare comandi sudo senza autenticazione password per n-ore fino al momento in cui non usciremo. Non modificare i file di sistema è un vantaggio.
Bhavesh Diwan,

3
Questo in realtà non risponde alla domanda, perché è ancora necessario inserire la password per diventare root a quel punto.
Adam F,

2
Non se stai eseguendo una macchina virtuale in un ambiente protetto e vuoi solo che la cosa faccia qualcosa immediatamente e non vuoi gestire le password. Questa risposta non risponde alla domanda, mentre è probabilmente un'informazione utile. Concordo con Adam F
Jonathan Komar il

573

Puoi configurare sudoper non chiedere mai la tua password.

Apri una finestra Terminale e digita:

sudo visudo

Nella parte inferiore del file, aggiungi la seguente riga:

$USER ALL=(ALL) NOPASSWD: ALL

Dov'è il $USERtuo nome utente sul tuo sistema. Salva e chiudi il file sudoers (se non hai modificato il tuo editor terminale predefinito (saprai se ce l'hai), premi ctl + x per uscire nanoe ti chiederà di salvare).

A partire da Ubuntu 19.04, il file ora dovrebbe assomigliare a qualcosa

#
# 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:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) 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

YOUR_USERNAME_HERE ALL=(ALL) NOPASSWD: ALL

Successivamente è possibile digitare sudo <whatever you want>una finestra Terminale senza che venga richiesta la password.

Questo vale solo per l'utilizzo del sudocomando nel terminale. Ti verrà comunque richiesta la password se (ad esempio) provi a installare un pacchetto dal centro software

richiesta password gui


15
Si consiglia di utilizzare sudo visudoinvece di modificarlo direttamente. Anche la modifica delle autorizzazioni dei sudoer potrebbe bloccarti. Durante la modifica con vim, utilizzare :wq!per scrivere in file di sola lettura ed uscire dall'editor. In questo modo, le autorizzazioni 644 non sono necessarie.
Lekensteyn,

8
Questo è un grave rischio per la sicurezza, chiunque acquisisca qualsiasi account con diritti sudo può assumere il controllo dell'intero sistema e bloccare qualsiasi ulteriore accesso a questo computer, seriamente sconsigliato.
Bruno Pereira,

6
@ wil93 ti manca il punto: uno script che richiede sudo install crapwarenon chiederà una password in questo caso e potrebbe rovinare tutto quello che hai, e non è necessario essere fisicamente vicino a una macchina per distribuire gli script l'ultima volta che ho controllato. .. Questo è solo un esempio.
Bruno Pereira,

12
@BrunoPereira Se hai intenzione di eseguire script non attendibili, questo è il rischio per la sicurezza (anche se sudo richiede una password, uno script dannoso potrebbe sempre fare rm -rf ~confusione). Nel complesso, non definirei «grave rischio per la sicurezza» la semplice rimozione della richiesta password da sudo.
Wil93,

5
Sono d'accordo con @ wil93. Quando si esegue uno script non attendibile, l'immissione della password non è altro che un'opportunità per annullare il processo, mentre dubito che sia inutile per la maggior parte delle persone. Il punto è che sai da dove proviene la sceneggiatura e cosa fa.
Chad,

36

I timeout di sudo root sono il modo più semplice e sicuro per farlo. Presenterò tutti gli esempi ma ti avverto che è molto rischioso in ogni modo, anche se in questo modo è molto più sicuro:

sudo visudo

Questo apre un editor e lo punta al file sudoers - Ubuntu è il default su nano, altri sistemi usano Vi. Ora sei un super utente che modifica uno dei file più importanti sul tuo sistema. Niente stress!

(Istruzioni specifiche per Vi indicate con (vi!) . Ignorale se stai usando nano.)

Utilizzare i tasti freccia per spostarsi alla fine della Defaultslinea.

(vi!) premere il tasto A (maiuscolo "a") per spostarsi alla fine della riga corrente ed entrare in modalità di modifica (aggiungere dopo l'ultimo carattere sulla riga).

Ora digita:

,timestamp_timeout=X

dove X è la scadenza del timeout in minuti. Se si specifica 0, verrà sempre richiesta la password. Se si specifica un valore negativo, il timeout non scadrà mai. Es Defaults env_reset,timestamp_timeout=5.

(vi!) premi Esc per tornare alla modalità di comando. Ora, se sei soddisfatto delle tue modifiche, digita :w Enterper scrivere il file e :q Enterper uscire da vi. Se hai fatto un errore, forse il modo più semplice è ripetere dall'inizio, uscire senza salvare (premi Escapeper accedere alla modalità comando) e quindi digitare: q! Enter.

Premi Ctrl+ X, quindi Y, quindi Enterper salvare il file e uscire da nano.

Potresti voler leggere i sudoers e le pagine di manuale di vi per ulteriori informazioni.

man sudoers
man vi

Reimpostare il valore di timeout utilizzando:

sudo -k

Queste istruzioni sono per rimuovere la richiesta di una password quando si usa il comando sudo. Il comando sudo dovrà comunque essere usato per l'accesso root.

Modifica il file sudoers

Apri una finestra Terminale. Digita sudo visudo. Aggiungi la seguente riga alla FINE del file (se non alla fine può essere annullata da voci successive):

<username> ALL=NOPASSWD: ALL

Sostituisci <username>con il tuo nome utente (senza il <>). Ciò presuppone che Ubuntu abbia creato un gruppo con lo stesso nome del tuo nome utente, che è tipico. Puoi alternativamente utilizzare gli utenti del gruppo o qualsiasi altro gruppo in cui ti trovi. Assicurati solo di far parte di quel gruppo. Questo può essere verificato andando su Sistema -> Amministrazione -> Utenti e gruppi.

Esempio:

michael ALL=NOPASSWD: ALL

Digitare ^ X ( Ctrl+ X) per uscire. Questo dovrebbe richiedere un'opzione per salvare il file, digitare Y per salvare.

Disconnettersi e quindi riconnettersi. Ciò dovrebbe ora consentire di eseguire il comando sudo senza che venga richiesta una password.

L'account di root

Abilitazione dell'account root

L'abilitazione dell'account root è raramente necessaria. Quasi tutto ciò che devi fare come amministratore di un sistema Ubuntu può essere fatto tramite sudo o gksudo. Se hai davvero bisogno di un login root persistente, la migliore alternativa è simulare una shell di login Root usando il seguente comando:

sudo -i

Tuttavia, se è necessario abilitare gli accessi root, è possibile farlo in questo modo:

sudo passwd root

Riattivazione dell'account di root

Se per qualche motivo hai abilitato il tuo account di root e desideri disabilitarlo di nuovo, usa il seguente comando nel terminale:

sudo passwd -dl root

Sudo di gruppo a livello di sistema

root$ echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Disconnettersi e quindi riconnettersi.

Ripristina timeout sudo

Puoi assicurarti che sudo richieda la password la prossima volta eseguendo:

sudo -k

Ho postato questo prima di aggiungere, per un sistema ampio modo di fare questo e altri leggi qui:
user209328

Questa è stata una risposta tardiva, ma è la più completa in termini di opzioni che ti offre.
Jan

1
Hmm, su Ubuntu 18.04 MATE funziona perfettamente, mentre fare lo stesso su Ubuntu 18.04 GNOME mi ha causato rughe con il problema "nome utente non è nel file sudoers ...". Ora, questo è il motivo per cui così tante persone odiano Linux - perché raramente è "causale": D Nel caso in cui U incontrassi lo stesso ... Ecco come risolvi
Peter

La variabile d'ambiente EDITOR può impostare l'editor usato ... ad es. sudo env EDITOR=/bin/nano visudoPer modificare sudoersin modo affidabile in nano. (update-alternative può essere utilizzato anche per impostare l'editor)
Gert van den Berg

29

Il modo preferito di concedere autorizzazioni individuali (o di gruppo) sarebbe quello di aggiungere file in /etc/sudoers.d

Ciò separa le modifiche locali dalla politica predefinita e consente di risparmiare tempo nel caso in cui il file sudoers di distribuzione cambi.

Per rendere l'utente sudoer attualmente connesso e fare in modo che sudonon richieda una password, utilizzare

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/$USER

questo creerà un file chiamato /etc/sudoers.d/$USER(dove si $USERtrova il nome utente dell'utente con cui hai effettuato l'accesso come quando hai eseguito quel comando), chiarendo a quali utenti è stata concessa l'autorizzazione.

Se vuoi farlo per un altro utente, sostituisci entrambe le istanze $USERcon un altro nome utente nel comando sopra.

echo "otheruser ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/otheruser

Allo stesso modo, un file può essere utilizzato per gestire più direttive:

echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/local

Vedi /etc/sudoers.d/READMEe man sudoersper maggiori informazioni.


il comando echo non è riuscito, anche se sono root. ma, ho aggiunto il file e l'ho modificato direttamente e questo ha funzionato sull'ultimo Ubuntu (mentre l'aggiunta dell'utente ai sudoer direttamente non lo ha fatto!)
scape

1
Il modo giusto è farlo con teecomando.
woto

1
Questo è un modo migliore che funziona sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)'sudo chmod 440 /etc/sudoers.d/$(logname)
:,

Nella sudo ... >fileshell il reindirizzamento viene eseguito nella shell originale, quindi potrebbe funzionare solo nella shell root.
Konstantin Pelepelin,

il metodo tee, senza problemi di autorizzazione:echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/username
Carson Ip

7

Nice one-liner per rimuovere le istruzioni sudo per l'utente corrente

sudo bash -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)'

2
Penso che potresti semplicemente fare :, dopo tutto ha bisogno echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo env EDITOR="tee -a" visudosolo (e persino non sarà necessario nella configurazione predefinita, IIRC). visudosudoenv
Muru,

c'è così tanto che potrebbe andare storto qui (tutti gli errori dell'utente, ovviamente), che è preferibile, a mio modestissimo parere, modificare direttamente il file sudoer ( sudo visudo), mentre testiamo il risultato (con l'editor ancora aperto), per quei nuovi utenti che potrebbero essere tentati di provare questo "one-liner".
michael,

Grazie per il feedback! Stavo solo rapidamente cercando di rimuovere la richiesta della password sudo nelle mie VM volatili di test. Sentiti libero di suggerire miglioramenti :)
Eric Landry,

Devi ancora sudo chmod 440 /etc/sudoers.d/$(logname)correggere i permessi dei file come indicato nel README in quella directory.
paradroid

6

Ovviamente ciò che vuoi fare non è raccomandato. Dopo un po ', anche se entrare sudodiventa così automatico che la sua utilità diminuisce.

Un altro approccio è quello di lasciare il file sudoers così com'è e, mentre fai qualcosa di complicato per i tuoi milleduecento server, entra sudo bash. Questo ti darà una shell che verrà autenticata come root fino a quando non la esci.


12
sudo -so sudo -isono probabilmente entrambe idee migliori di sudo bash, perché garantiscono che l'ambiente sia sano e cose.
Darael,

2
"sano e cose" non è generalmente nel regno di "idee migliori", qualcuno potrebbe dare una spiegazione tecnica del perché sudo -s o sudo -i è meglio di sudo bash? (Modifica: ecco una domanda pertinente askubuntu.com/questions/376199/… )
Nuzzolilo,

2
un numero di sudocomandi (pensando in particolare a sudo pip ...) richiede sudo -H(imposta HOME) affinché il comando funzioni correttamente. In altri casi, sudo -Epotrebbe essere necessario (preservare env). La corsa sudo bashprobabilmente funzionerà nella maggior parte dei casi, ma non in tutti e, in caso contrario, non sarà chiaro il perché.
michael,

1
sudo su è il modo tradizionale di cambiare ruolo e iniziare a recitare un amministratore di sistema.
user1656671

3

Da Super User arriva una buona risposta:

Utilizzare l'opzione -S che legge la password da STDIN:

echo <password> | sudo -S <command>

Sostituisci <password>con la tua password.


2
Questo non è consigliato, poiché la password rimane in chiaro nel file cronologico della shell. Applicare invece una delle altre soluzioni.
HappyCactus,

1
@HappyCactus puoi posizionare uno spazio davanti in echomodo che non appaia nella storia?
WinEunuuchs2Unix

Sì, questo eviterà di esporre la password in chiaro al file della cronologia. Ma ti ricordi sempre di aggiungerlo? :-)
HappyCactus

@HappyCactus Tendo ad aggiungere spazio iniziale per caso e poi mi infastidisco quando la storia non può essere richiamata :) Comunque il Super User ha 129 voti positivi, quindi penso che sia una buona risposta lasciare qui. Le persone leggeranno i nostri commenti e conosceranno i rischi e le fasi di avversione al rischio.
WinEunuuchs2Unix

Sono totalmente d'accordo. Buona giornata!
HappyCactus,

2

Una fodera

sudo sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g'


2

Questa è una soluzione a una riga che modifica anche le autorizzazioni dei file come indicato in /etc/sudoer.d/README:

sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)' & sudo chmod 440 /etc/sudoers.d/$(logname)

0
  • Espandendosi sull'idea di @upteryx.

  • Ecco come ho implementato l'utente non root, senza password in un'immagine Docker effimera per l'uso in una pipeline CICD:

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id
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.