Como modificar um arquivo '/ etc / sudoers' inválido?

238

Como edito um arquivo sudoers inválido? Ele lança o erro abaixo e não está me permitindo editar novamente para corrigi-lo.

Aqui está o que acontece:

$ 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
YumYumYum
fonte
2
grande questão considerando esta página cria esse erro help.ubuntu.com/community/RootSudoTimeout
Relacionado: O sudo pode ser reinstalado após ser removido?
Eliah Kagan 19/07

Respostas:

361

Em um sistema Ubuntu moderno (e em muitas outras distribuições GNU / Linux), a correção de um sudoersarquivo corrompido é realmente muito fácil e não requer reinicialização, usando um CD ao vivo ou acesso físico à máquina.

Para fazer isso via SSH, faça o login para a máquina e executar o comando pkexec visudo. Se você tiver acesso físico à máquina, o SSH é desnecessário; basta abrir uma janela do Terminal e executar esse pkexeccomando.

Supondo que você (ou algum outro usuário) esteja autorizado a executar programas como rootno PolicyKit, você pode digitar sua senha e, em seguida, será executada visudocomo root, e você poderá consertá-la /etc/sudoers.

Se você precisar editar um dos arquivos de configuração em /etc/sudoers.d(que é incomum nessa situação, mas possível), use .pkexec visudo -f /etc/sudoers.d/filename

Se você tiver uma situação relacionada em que precisará executar comandos adicionais de administração do sistema como raiz para corrigir o problema (também incomum nessa circunstância, mas comum em outras), poderá iniciar um shell raiz interativo pkexec bash. De um modo geral, qualquer comando não gráfico com o qual você executou sudopode ser executado pkexec.

(Se houver mais de uma conta de usuário no sistema autorizada a executar programas como rootno PolicyKit, em seguida, para qualquer uma dessas ações, você será solicitado a selecionar qual delas deseja usar antes de ser solicitada sua senha.)


Se isso não funcionar - por exemplo, se não houver usuários autorizados a executar programas como root via PolicyKit -, inicialize a partir de um CD ao vivo do Ubuntu (como o CD que você provavelmente usou para instalar o Ubuntu) e monte o sistema de arquivos para o sistema instalado. Você pode fazer isso executando sudo parted -lpara visualizar suas partições - provavelmente existe apenas uma partição ext4, e esse é o sistema de arquivos raiz.

Suponha que o sistema de arquivos raiz do sistema Ubuntu instalado esteja em / dev / sda1. Então você pode montá-lo com sudo mount /dev/sda1 /mnt. Em seguida, você pode editar o arquivo sudoers do sistema instalado com sudo nano -w /mnt/etc/sudoers. Ou, melhor ainda, você pode editá-lo com

sudo visudo -f /mnt/etc/sudoers

(o que impedirá que você salve um arquivo sudoers com sintaxe incorreta).

Eliah Kagan
fonte
7
pkexec / usr / sbin / visudo trabalhou no debian 7
marinara
10
VACA SAGRADA! Muito obrigado! Salvei meu bacon. Adicionado um arquivo conforme sugerido no diretório etc / sudoers.d / USANDO UM EDITOR DE TEXTO REGULAR (DON-T__D-O__T-HAT !!!). Perdeu toda a capacidade de obter privilégios elevados, INCLUINDO, editando o arquivo incorreto. Isso ajudou a editar o arquivo. Estranho, eu tive que editar o arquivo / etc / sudoers primeiro, depois ele encontrou os erros no outro arquivo e o abriu para mim. MESMO WEIRDER, a diretiva no arquivo / etc / sudoers 'inlcudedir /etc/sudoers.d' foi comentada e ainda a inclui.
Dennis
4
@Dennis Um pouco confuso, as #includediretivas nos sudoersarquivos são tratadas especialmente; o líder #não faz com que o restante da linha seja interpretado como um comentário, nesse caso. Como man sudoersdiz: "O sinal de cerquilha ('#') é usado para indicar um comentário (a menos que faça parte de uma diretiva #include ou a menos que ...") Veja também visudo: #includedir sudoers.d (arquivado em lzone.de/ blogue ).
Elias Kagan
5
Meu usuário é sudoer, mas recebi este erro: Erro ao executar o comando como outro usuário: Não autorizado
SuB
2
No Ubuntu 16.04, pkexec visudosolicita uma senha, que não aceita a senha correta. Emite um erro "FALHA NA AUTENTICAÇÃO".
Juha Untinen
54

Sempre use visudopara editar seu arquivo sudoers, nunca o edite diretamente. Isso impedirá que você o salve no disco, a menos que valide.

Césio
fonte
17
Em retrospecto, é 20/20
code_monk
4
Não impedirá o desastre. É bastante fácil negar-se validamente.
Joshua
O visudo pode ser usado pelos escriturários? Se sim, como?
Lukas
Eu não tenho o visudo instalado. Então eu fiz o pkexec vim. Em seguida, mostra a lista de usuários e solicita a senha. Quando eu forneço a senha, ele gera um erro como "Erro ao executar o comando como outro usuário: não autorizado". Por favor ajude
Shyamkkhadka
24

Digitar:

pkexec visudo

Então mude a última linha

#includedir /etc/sudoers

Para:

#includedir /etc/sudoers.d

Isso deve resolver seu problema.

Andrej Burcev
fonte
2
Notei que remover o líder #de #includedircausa causa erros de sintaxe, isso #faz parte da diretiva, pelo menos no Ubuntu 12.10.
SAFX
1
Isso só me salvou muita dor de cabeça. Obrigado por tonelada :)
Addo Solutions
1
Eu não tenho o visudo instalado. Então eu fiz o pkexec vim. Em seguida, mostra a lista de usuários e solicita a senha. Quando eu forneço a senha, ele gera um erro como "Erro ao executar o comando como outro usuário: não autorizado". Por favor ajude
Shyamkkhadka
11

se alguém como eu não tiver o pkexec instalado ou não puder executar o vi, visudo, nano ou qualquer outro editor para alterar o arquivo sudoers, você pode ter certeza com este processo .. Fui salvo com isso:

  • reiniciar
  • mantenha pressionada a tecla Shift durante a inicialização para ter opção para o modo de recuperação (insira-a)
  • digite a linha de comando como raiz (segunda última opção no meu menu do grub)
  • remontar o dispositivo de inicialização para rw e aplicar o direito de execução ao usuário e editar o arquivo

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

corrija esse erro e seja feliz :)

Kresimir Pendic
fonte
Embora a solução pkexec sugerida por @ eliah-kagan pareça ser mais fácil, essa é mais universal. Na minha máquina, verificou-se que não há pkexec instalado e, é claro, não pude instalá-lo porque o sudo apt-get install pkexec de alguma forma não funcionou.
running.t
Também dentro desta abordagem que eu usaria visudoem vez nano /etc/sudoers.
precisa
7

Se você estragou seu sudoersarquivo, precisará:

  • Reinicie no modo de recuperação (pressione escape durante a inicialização, escolha a opção modo de recuperação na tela do grub)
  • Escolha a opção 'Ativar rede' (se não o seu sistema de arquivos será montado como somente leitura. Quem sabia)
  • Escolha a opção 'Drop to root shell'
  • execute visudo, corrija seu arquivo
  • Reinicie com a opção normal do grub

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

à risca
fonte
Oi, ele remove o iptables, arquivos do sistema existente?
Shyamkkhadka
6

Não há nada errado #include sudoer.d remover #include sudoer.d não fará nenhuma diferença.

Mas verifique se você não possui nenhum erro de sintaxe. Eu tive o mesmo problema, mas gastei horas para corrigir e apenas descobri que são erros de sintaxe. Consulte o manual e corrija-os.

Por exemplo, digamos que seu nome de usuário seja: dolly, usei o seguinte que está errado

 dolly ALL = (ALL) ALL NO PASSWD: ALL

sintaxe correta é

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

ou

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

espero que isto ajude

Thusitha Nuwan
fonte
Uma abordagem melhor do que garantir que você não tenha erros de sintaxe é sempre usar visudoao editar esses arquivos, o que garante que você não tenha erros de sintaxe antes de modificar o arquivo. visudonão é apenas para edição /etc/sudoers- ele também cria e edita arquivos no /etc/sudoers.d. Também funcionará com o editor de texto que você desejar. Veja a página de manual para detalhes.
Eliah Kagan
Quanto à permissão específica, observe que isso só é útil para comandos / aplicativos muito simples, porque qualquer aplicativo suficientemente complexo (incluindo thunderbird, que nunca deve ser executado como root de qualquer maneira) dará efetivamente ao usuário acesso total ao sistema quando executado como root. Até uma funcionalidade aparentemente simples abre a porta para acesso root completo. Por exemplo, um usuário que pode executar um programa que pode salvar um arquivo em um local arbitrário como root pode obter acesso root completo (eles podem instalar seus próprios /etc/sudoersou, se as limitações de sintaxe impedirem, eles podem instalar seus próprios /etc/crontab).
Elias Kagan
3

execute o modo de recuperação e digite este

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

somente o grupo e a raiz do usuário devem ter lido o privilégio

kosaidpo
fonte
3

Você também pode fazer login como root em um ttyconsole com Ctrl+ Fn( Fnde 1 a 6) e executar visudo.

magisterludi
fonte
2

Você também pode editar sua entrada de inicialização no grub.

Simplesmente reinicie o seu PC e aguarde o grub aparecer. Em seguida, pressione "e" na entrada "Ubuntu" para editá-lo.

Procure uma linha com "linux =" ou "kernel =" e simplesmente adicione uma "única" ao final dessa linha.

Em seguida, pressione F10 para inicializar esta entrada de inicialização modificada temporariamente. Isso fornecerá um shell (sem GUI) com direitos de root e você poderá editar o arquivo sudoers com s.th. como nano / etc / sudoers de volta ao seu estado anterior.

Em seguida, reinicie e pronto.

Markus Ressel
fonte
2
pkexec visudo

então reverta seus erros

Bhavesh Gabani
fonte
1
não é necessário usar pkexec
Braiam
O @Braiam visudodeve ser executado como root. Se sudonão funcionar, pkexecàs vezes funciona. Isso é coberto pela minha resposta anterior ... mas é uma resposta correta, visudopor si só (quando não é executada como raiz) não funciona, e pode haver valor em respostas breves e corretas, mesmo quando suas recomendações se sobrepõem consideravelmente a outras respostas. Obviamente, se alguém entra no modo de recuperação, isso é um shell raiz e, em seguida, sudonem visudoé necessário para comandos como esse pkexec. Talvez seja isso que você quer dizer ...
Elias Kagan
0

No Ubuntu 16.04 rodando em um VirtualBox (não deve fazer diferença), os métodos acima não funcionaram para mim (linha inválida no final do arquivo). O que funcionou foi:

  1. Reinicie o VirtualBox
  2. Deixe inicializar normalmente, até solicitar seu nome de usuário e senha no console
  3. Entre normalmente com seu nome de usuário
  4. Então, quando você terminar no console (desde que sua caixa não seja inicializada em uma GUI), simplesmente dê o comando su -e, em seguida, dê a senha do seu próprio nome de usuário.
  5. Agora deve terminar root@ubuntu-xenial:~#imediatamente, se /etc/sudoersnão estiver muito quebrado ou vazio. Não tenho certeza do que aconteceria nesse caso.
  6. Então você pode simplesmente executar visudoe corrigir o arquivo.
  7. Em seguida, Ctrl + Xele solicitará Salvar o buffer modificado. Pressione YeEnter
  8. Reinicie a caixa e ela deve funcionar agora.

Caso você /etc/sudoersesteja vazio ou com algo faltando, e você possa editá-lo, eis o meu conteúdo:

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
Juha Untinen
fonte
Sua etapa 4 não faz sentido, ela só funciona quando sua senha root é igual ao seu usuário normal.
alfred
O que é muito comum em uma VM local.
Juha Untinen
0

Boas práticas: uma janela do terminal de backup e execute sudo sulá. Em outro termo, execute visudo ou sudo vim / etc / sudoers. Se algo der errado, volte ao terminal um e corrija o arquivo. Você pode perguntar, por que não apenas correr sudo suantes visudoem um terminal? Isso também funciona, mas há um risco maior de você fechar o terminal antes que você perceba.

biocibernético
fonte
-1

Existe uma solução muito mais simples. Sem reiniciar, modo de recuperação ou pkgexec( pkgexecnão funcionou e não tem idéia do porquê ou como devo usá-lo), basta:

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

E então apenas corrija o erro de sintaxe!

rien333
fonte
O que há com o voto negativo? Funcionou perfeitamente para mim.
rien333 8/08