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

207

Como edito um arquivo inválido de sudoers? Ele joga abaixo do erro e não está permitindo que eu edite 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
    
por YumYumYum 30.10.2011 / 20:15

12 respostas

320

Em um sistema Ubuntu moderno (e muitas outras distribuições GNU / Linux), consertar um arquivo sudoers corrompido é realmente muito fácil, e não requer reinicialização, usando um live CD ou acesso físico à máquina. / p>

Para fazer isso via SSH, faça o login na máquina e execute 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 comando pkexec .

Assumindo que você (ou algum outro usuário) esteja autorizado a executar programas como root com o PolicyKit, você poderá inserir sua senha e, em seguida, executará visudo como root e poderá corrigir seu /etc/sudoers .

Se você precisar editar um dos arquivos de configuração em /etc/sudoers.d (o 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 precisa executar comandos adicionais de administração do sistema como root para corrigir o problema (também incomum nessa circunstância, mas comum em outros), inicie um shell raiz interativo com pkexec bash . De modo geral, qualquer comando não gráfico executado com sudo pode ser executado com pkexec .

(Se houver mais de uma conta de usuário no sistema autorizada para executar programas como root com o PolicyKit, então, para qualquer uma dessas ações, será solicitado que você selecione qual delas deseja usar, antes de ser solicitado para sua senha.)

Se isso não funcionar - por exemplo, se não houver usuários autorizados a executar programas como root via PolicyKit - então inicialize a partir de um live CD 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 -l para visualizar suas partições - provavelmente há apenas uma partição ext4, e esse é o sistema de arquivos raiz.

Suponha que o sistema de arquivos raiz do sistema Ubuntu 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

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

    
por Eliah Kagan 30.10.2011 / 20:45
46

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

    
por Caesium 20.11.2011 / 18:08
20

Digite:

pkexec visudo

Em seguida, altere a última linha

#includedir /etc/sudoers

Para:

#includedir /etc/sudoers.d

Isso deve resolver seu problema.

    
por Andrej Burcev 21.02.2013 / 19:23
10

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

  • reinicializar
  • segure a tecla Shift enquanto inicializa para ter opção para o modo de recuperação (digite-o)
  • insira a linha de comando como raiz (segunda última opção no menu do grub)
  • remonte o dispositivo de inicialização para rw e aplique o direito de execução para o usuário e edite o arquivo

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

conserte esse erro e seja feliz:)

    
por Kresimir Pendic 20.10.2014 / 23:40
6

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

Mas, por favor, verifique se você não tem erros de sintaxe. Eu tive o mesmo problema, mas passei horas para consertar e descobri que são erros de sintaxe. Consulte o manual e faça-o certo.

Por exemplo Digamos que seu nome de usuário seja: dolly Eu usei seguindo o que está errado

 dolly ALL = (ALL) ALL NO PASSWD: ALL

a 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 isso ajude

    
por Thusitha Nuwan 03.07.2012 / 01:15
6

Se você errou o arquivo sudoers , será necessário:

  • Reinicie no modo de recuperação (pressione "escapar" durante a inicialização, escolha a opção do modo de recuperação na tela do grub)
  • Escolha a opção "Ativar a rede" (se você não fizer isso, seu sistema de arquivos será montado como somente leitura. Quem conheceu)
  • Chosee a opção "Ignorar a shell de raiz"
  • execute visudo , corrija seu arquivo
  • Reinicialize com a opção normal do grub

source: - link

    
por streak 14.12.2012 / 11:59
3

execute o modo de recuperação e digite este

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/*

apenas o grupo e o usuário root devem ter lido privilégio

    
por kosaidpo 20.11.2011 / 18:11
2

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

Simplesmente reinicie seu computador e espere o grub mostrar. Em seguida, pressione "e" na entrada "Ubuntu" para editá-lo.

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

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

Em seguida, reinicie e pronto.

    
por Markus Ressel 13.01.2013 / 05:41
2

Você também pode logar como root em um console tty com Ctrl + Fn ( Fn de 1 a 6) e rodando visudo .

    
por magisterludi 09.03.2013 / 08:12
2
pkexec visudo

depois, reverta seus erros

    
por Bhavesh Gabani 01.01.2014 / 09:23
0

Eu encontrei o bug. Está nas duas últimas linhas do arquivo /etc/sudoers padrão. Remova as seguintes entradas do final do arquivo / etc / sudoers com visudo .

#includedir /etc/sudoers.d
    
por George Van Tuyl 23.02.2012 / 22:57
0

No Ubuntu 16.04 rodando em um VirtualBox (não deveria 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 o boot normalmente, até que ele solicite seu nome de usuário & amp; senha no console
  3. Faça login normalmente com seu nome de usuário
  4. Então, quando você acabar no console (desde que sua caixa não inicialize em uma GUI), simplesmente forneça o comando su - e, em seguida, forneça a senha do seu próprio nome de usuário.
  5. Agora, ele deve terminar em root@ubuntu-xenial:~# prompt, se o /etc/sudoers não estiver muito corrompido ou vazio. Não tenho certeza do que aconteceria nesse caso.
  6. Você pode simplesmente executar visudo e corrigir o arquivo.
  7. Em seguida, Ctrl + X e ele solicitará para salvar o buffer modificado. Pressione Y e Enter
  8. Reinicie a caixa e ela deve funcionar agora.

Caso o /etc/sudoers esteja vazio ou faltando alguma coisa e você possa editá-lo, aqui está o conteúdo do meu:

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
    
por Juha Untinen 14.08.2018 / 11:40