Come modificare un file '/ etc / sudoers' non valido?


238

Come posso modificare un file sudoers non valido? Genera l'errore di seguito e non mi consente di modificare nuovamente per risolverlo.

Ecco cosa succede:

$ sudo visudo
>>> /etc/sudoers: syntax error near line 28 <<<
sudo: parse error in /etc/sudoers near line 28
sudo: no valid sudoers sources found, quitting

2
ottima domanda considerando questa pagina crea quell'errore help.ubuntu.com/community/RootSudoTimeout

Risposte:


361

Su un moderno sistema Ubuntu (e molte altre distribuzioni GNU / Linux), riparare un sudoersfile corrotto è in realtà abbastanza semplice e non richiede il riavvio, usando un CD live o l'accesso fisico alla macchina.

Per fare ciò tramite SSH, accedere alla macchina ed eseguire il comando pkexec visudo. Se si dispone dell'accesso fisico alla macchina, SSH non è necessario; basta aprire una finestra Terminale ed eseguire quel pkexeccomando.

Supponendo che tu (o qualche altro utente) sia autorizzato a eseguire programmi come rootcon PolicyKit, puoi inserire la tua password, quindi verrà eseguita visudocome roote puoi correggere il tuo /etc/sudoers.

Se è necessario modificare uno dei file di configurazione /etc/sudoers.d(che non è comune in questa situazione, ma possibile), utilizzare .pkexec visudo -f /etc/sudoers.d/filename

Se si verifica una situazione correlata in cui è necessario eseguire ulteriori comandi di amministrazione del sistema come root per risolvere il problema (anche non comune in questa circostanza, ma comune in altri), è possibile avviare una shell root interattiva con pkexec bash. In generale, invece, è sudopossibile eseguire qualsiasi comando non grafico con cui si esegue pkexec.

(Se sul sistema è presente più di un account utente autorizzato ad eseguire programmi come rootcon PolicyKit, quindi per una di quelle azioni, ti verrà chiesto di selezionare quale vuoi usare, prima che ti venga chiesta la password.)


Se ciò non funziona, ad esempio se non ci sono utenti autorizzati a eseguire programmi come root tramite PolicyKit, quindi avviare da un CD live di Ubuntu (come il CD che probabilmente hai usato per installare Ubuntu) e montare il filesystem per sistema installato. Puoi farlo eseguendo sudo parted -lper visualizzare le tue partizioni - probabilmente c'è solo una partizione ext4, ed è il filesystem di root.

Supponiamo che il filesystem di root del sistema Ubuntu sia su / dev / sda1. Quindi puoi montarlo con sudo mount /dev/sda1 /mnt. Quindi è possibile modificare il file sudoers del sistema installato con sudo nano -w /mnt/etc/sudoers. O, ancora meglio, puoi modificarlo con

sudo visudo -f /mnt/etc/sudoers

(che ti impedirà di salvare un file sudoers con sintassi errata).


7
pkexec / usr / sbin / visudo ha lavorato su debian 7
marinara il

10
MUCCA SACRA! Molte grazie! Mi ha salvato la pancetta. Aggiunto un file come suggerito nella directory etc / sudoers.d / UTILIZZANDO UN EDITOR DI TESTO REGOLARE (DON-T__D-O__T-HAT !!!). Ho perso tutta la capacità di fare privilegi elevati, COMPRESO, modificando il file offensivo. Questo ha aiutato a modificare il file. Strano però, prima ho dovuto modificare / etc / sudoers, poi ho trovato gli errori nell'altro file e l'ho aperto per me. ANCHE WEIRDER, la direttiva nel file / etc / sudoers 'inlcudedir /etc/sudoers.d' è stata commentata, e la include ancora.
Dennis,

4
@Dennis Un po 'confusamente, le #includedirettive nei sudoersfile sono trattate in modo speciale; il comando iniziale #non fa interpretare il resto della riga come un commento, in quel caso. Come man sudoersdice: "Il cancelletto ('#') è usato per indicare un commento (a meno che non faccia parte di una direttiva #include o a meno che ..." Vedi anche visudo: #includedir sudoers.d (archiviato da lzone.de/ blog )
Eliah Kagan il

5
Il mio utente è sudoer ma ho riscontrato questo errore: Errore nell'esecuzione del comando come altro utente: Non autorizzato
SuB

2
In Ubuntu 16.04, pkexec visudorichiede una password, che non accetta la password corretta. Emette un errore "AUTENTICAZIONE NON RIUSCITA".
Juha Untinen,

54

Usa sempre visudoper modificare il tuo file sudoers, non modificarlo mai da solo. Ti impedirà di salvarlo su disco a meno che non sia valido.


17
il senno di poi è 20/20
code_monk

4
Non previene il disastro. È abbastanza facile negare validamente te stesso.
Giosuè,

Visudo può essere utilizzato da Scritps? Se é cosi, come?
Lukas,

Non ho visudo installato. Quindi ho fatto pkexec vim. Quindi mostra l'elenco degli utenti e chiede la password. Quando fornisco la password, viene visualizzato l'errore "Errore nell'esecuzione del comando come altro utente: non autorizzato". Per favore aiutate
Shyamkkhadka,

24

Digitare:

pkexec visudo

Quindi cambia l'ultima riga

#includedir /etc/sudoers

Per:

#includedir /etc/sudoers.d

Dovrebbe risolvere il tuo problema.


2
Ho notato che la rimozione dei principali #da #includedircause errori di sintassi, l' #è parte della direttiva, almeno su Ubuntu 12.10.
SAFX,

1
Mi ha fatto risparmiare un sacco di mal di testa. Grazie mille :)
Addo Solutions

1
Non ho visudo installato. Quindi ho fatto pkexec vim. Quindi mostra l'elenco degli utenti e chiede la password. Quando fornisco la password, viene visualizzato l'errore "Errore nell'esecuzione del comando come altro utente: non autorizzato". Per favore aiutate
Shyamkkhadka,

11

se qualcun altro come me non aveva installato pkexec o non era in grado di eseguire vi, visudo, nano o qualsiasi altro editor per modificare il file sudoers, puoi essere sicuro di questo processo .. Sono stato salvato con questo:

  • riavvio
  • tieni premuto il tasto MAIUSC durante l'avvio per avere l'opzione per la modalità di recupero (inseriscilo)
  • inserisci la riga di comando come root (seconda ultima opzione nel mio menu di grub)
  • rimontare il dispositivo di avvio per rw e applicare exec giusto per l'utente e modificare il file

    mount -n -o remount,rw /
    chmod u+x /etc/sudoers
    nano /etc/sudoers
    

correggi quell'errore e sii felice :)


Mentre la soluzione pkexec suggerita da @ eliah-kagan sembra essere più semplice, questa è più universale. Sulla mia macchina si è scoperto che non è installato pkexec e ovviamente non sono riuscito a installarlo perché sudo apt-get install pkexec in qualche modo non ha funzionato.
running.t

Anche all'interno di questo approccio userei visudoinvece nano /etc/sudoers.
pa4080,

7

Se hai incasinato il tuo sudoersfile, dovrai:

  • Riavvia in modalità di ripristino (premi Esc durante l'avvio, scegli l'opzione della modalità di ripristino nella schermata di grub)
  • Scegli l'opzione 'Abilita rete' (in caso contrario il tuo filesystem verrà montato in sola lettura. Chi lo sapeva)
  • Scegli l'opzione 'Drop to root shell'
  • corri visudo, correggi il tuo file
  • Riavvia con la normale opzione grub

fonte: - http://mario.net.au/content/recover-etcsudoers-ubuntu-1204


Ciao, rimuove gli iptables, i file del sistema esistente?
Shyamkkhadka,

6

Non c'è niente di sbagliato #include sudoer.d rimuovere #include sudoer.d non farà alcuna differenza.

Ma assicurati di non avere errori di sintassi. Ho avuto lo stesso problema ma ho passato ore a risolvere e ho appena capito che si trattava di errori di sintassi. Fare riferimento al manuale e renderli corretti.

Ad esempio Dì che il tuo nome utente è: dolly che ho usato in seguito a quello che è sbagliato

 dolly ALL = (ALL) ALL NO PASSWD: ALL

la sintassi corretta è

dolly ALL = (ALL) ALL //give permission to everything, not good

o

dolly ALL=(ALL) NOPASSWD:/usr/bin/thurderbird //good, give specific permission

spero che sia di aiuto


Un approccio migliore rispetto visudoall'accertarsi di non avere errori di sintassi è quello di utilizzare sempre quando si modificano questi file, il che assicura che non si abbiano errori di sintassi prima di modificare il file. visudonon è solo per la modifica, /etc/sudoersma creerà e modificherà anche i file /etc/sudoers.d. Funzionerà anche con qualsiasi editor di testo che desideri. Vedi la manpage per i dettagli.
Eliah Kagan,

Per quanto riguarda l'autorizzazione specifica, tieni presente che questo è utile solo per comandi / app molto semplici, poiché qualsiasi app sufficientemente complessa (incluso thunderbird, che non dovrebbe mai essere eseguito come root) fornirà effettivamente all'utente pieno accesso al sistema quando eseguita come root. Anche una funzionalità apparentemente semplice apre la porta al pieno accesso alla radice. Ad esempio, un utente in grado di eseguire un programma in grado di salvare un file in una posizione arbitraria come root può ottenere l'accesso root completo (può installare il proprio /etc/sudoerso, se le limitazioni della sintassi lo impediscono, può installare il proprio /etc/crontab).
Eliah Kagan,

3

eseguire la modalità di ripristino, quindi digitare questo

chown -R root: root /etc/sudoers.d
chmod u = rwx, g = rx, o = rx /etc/sudoers.d/
chmod u = r, g = r, o = /etc/sudoers.d/*

solo il gruppo e l'utente root avrebbero dovuto leggere il privilegio


3

Puoi anche accedere come root su una ttyconsole con Ctrl+ Fn( Fnda 1 a 6) ed eseguire visudo.


2

Puoi modificare la voce di avvio anche in grub.

Riavvia semplicemente il tuo PC e attendi che grub lo mostri. Quindi premere "e" sulla voce "Ubuntu" per modificarlo.

Cerca una riga con "linux =" o "kernel =" e aggiungi semplicemente un "singolo" alla fine di quella riga.

Quindi premere F10 per avviare questa voce di avvio temporaneamente modificata. Questo ti darà una shell (senza GUI) con diritti di root e puoi modificare il file sudoers con s.th. come nano / etc / sudoers al suo stato precedente.

Quindi riavviare ed è fatto.


2
pkexec visudo

quindi ripristina i tuoi errori


1
non è necessario usare pkexec
Braiam

@Braiam visudodeve essere eseguito come root. Se sudonon funziona, a pkexecvolte funziona. Questo è coperto dalla mia precedente risposta ... ma è una risposta corretta, di visudoper sé (quando non eseguito come root) non funzionerà e potrebbe esserci valore in risposte corrette e brevi anche quando i loro consigli si sovrappongono considerevolmente con altre risposte. Naturalmente, se si passa alla modalità di ripristino, si tratta di una shell di root e quindi né sudovisudoè necessario per comandi come pkexec. Forse è questo che intendi ...
Eliah Kagan,

0

In Ubuntu 16.04 in esecuzione su un VirtualBox (non dovrebbe fare la differenza), i metodi precedenti non hanno funzionato per me (riga non valida alla fine del file). Ciò che ha funzionato è stato:

  1. Riavvia VirtualBox
  2. Lascia che si avvii normalmente, fino a quando non richiede il nome utente e la password nella console
  3. Accedi normalmente con il tuo nome utente
  4. Quindi, quando finisci nella console (a condizione che la tua scatola non si avvii in una GUI), devi semplicemente dare il comando su -e quindi dare la password del tuo nome utente.
  5. Ora dovrebbe finire nel root@ubuntu-xenial:~#prompt, se /etc/sudoersnon è troppo rotto o vuoto. Non sono sicuro di cosa sarebbe successo in quel caso.
  6. Quindi puoi semplicemente eseguire visudoe correggere il file.
  7. Quindi Ctrl + Xverrà richiesto di salvare il buffer modificato. Premere YeEnter
  8. Riavvia la scatola e dovrebbe funzionare ora.

Nel caso in cui tu /etc/sudoerssia vuoto o manchi qualcosa, e puoi modificarlo, allora ecco il mio contenuto:

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL

%sudo ALL=(ALL:ALL) ALL

Il tuo passaggio 4 non ha senso, funziona solo quando la tua password di root è uguale al tuo normale utente.
Alfred

Che è molto comune in una VM locale.
Juha Untinen,

0

Buona pratica: una finestra del terminale di backup ed eseguire sudo sulì. Su un altro termianl esegui visudo o sudo vim / etc / sudoers. Se qualcosa va storto, tornare al terminale uno e correggere il file. Potresti chiedere, perché non correre sudo suprima visudoin un terminale? Anche questo funziona, ma ha un rischio maggiore di chiudere il terminale prima di conoscerlo.


-1

C'è una soluzione molto più semplice. Senza riavviare, modalità di recupero o pkgexec( pkgexecnon ha funzionato e non ho idea del perché o come dovrei usarlo), semplicemente:

su root # switch to root user, without using sudo (which is broken at this point)
your_favorite_editor /etc/sudoers # e.g. nano

E poi basta correggere l'errore di sintassi!


Cos'è il downvote? Ha funzionato perfettamente per me.
rien333
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.