Como corrigir o arquivo sudoers na máquina virtual sem raiz e reinicialize

3

Eu quebrei o arquivo sudoers em um servidor carregado com um erro de sintaxe. E infelizmente perdi minha senha de root. O servidor é crítico e gostaria de evitar a reinicialização. Portanto, nenhum sudo, nenhuma raiz, nenhuma reinicialização, nenhum kdesudo ou gksu. O servidor é uma máquina virtual em execução no kvm.

Como você resolveria isso?

    
por raacer 10.10.2013 / 22:45

6 respostas

1

Felizmente, nosso servidor é virtual e eu posso acessar o sistema host. Corrigi o problema editando os dados brutos do disco. Você também pode tentar desta forma, mas tenha muito cuidado. O método é perigoso. Você pode corromper outros arquivos, partição ou até mesmo disco rígido inteiro. Então, faça isso por seu risco e garanta que você tenha backups recentes.

  1. Instale o hexedit no sistema host.
  2. Executar sync no convidado.
  3. Abra o dispositivo hd convidado com hexedit.
  4. Encontre a string corrompida e anote sua posição (algo como 0x29221D2B8 na parte inferior da tela).
  5. Converta o número em decimal usando algum calc ou util (usei o kcalc).
  6. Tente ler o texto corrompido com dd e verifique se os números estão corretos. skip = position / ibs.

    sudo dd se = / dev / vg0 / vm-100-disco-1 contagem = 1 bs = 10 ibs = 10 pular = 1104162476

  7. Substitua o texto corrompido de alguma forma para corrigir o erro. No meu caso, apenas substituí o primeiro símbolo por '#' para comentar as coisas quebradas. Uso de / obs / seek parâmetros instaed de if / ibs / skip com os mesmos números. Tenha cuidado com novas linhas e eof.

    echo "#ncludedir" | sudo dd de = / dev / vg0 / vm-100-disco-1 contagem = 1 bs = 10 obs = 10 busca = 1104162476

  8. Você pode ler novamente com dd e verificar se fez o que precisa.

  9. Retorne ao terminal da máquina virtual e tente usar o sudo agora. Talvez você precise esvaziar o cache de leitura de disco de alguma forma. Tenha uma boa sorte neste passo! :)

por 11.10.2013 / 01:19
2

Apenas uma ideia não confirmada:

Em um sistema host, você tem acesso à imagem da partição guest, certo? Você não pode montar facilmente essa imagem desde que ela está em uso. Mas você não precisa montar a partição para editar um único arquivo.

  1. Encontre o setor de arquivos sudoers na partição - use a pesquisa de texto para alguma frase que você sabe que existe em seu arquivo sudoers e não aparece com frequência em outros arquivos, como # This file MUST be edited with the 'visudo' command as root. Provavelmente você pode usar para isso um editor hexadecimal GUI Como alternativa, acredito que o grep também pode fazer o trabalho aqui.

    Ou talvez você possa descobrir o setor onde o arquivo sudoers reside dentro do sistema operacional convidado ...

  2. Use o editor hexadecimal para editar o arquivo diretamente no disco, ou use dd - copie o setor para o arquivo de texto, edite-o e copie-o de volta para o setor original.

Dificuldades: 1. talvez o arquivo esteja em cache dentro do sistema operacional convidado, provavelmente você encontrará uma maneira de liberar caches. 2. Com a pesquisa de texto, você pode encontrar vários arquivos parecidos com seus sudoers, como versões excluídas dele, ou você descobre qual é o direito ou conserta todos eles.

    
por 11.10.2013 / 00:23
2

Esta não é uma solução geral, mas estou postando isso como uma inspiração para pessoas na mesma situação.

Eu não tinha acesso às soluções mencionadas até agora, mas tive muita sorte em ter acesso a uma tarefa Cron que era executada como root . Usei essa tarefa Cron para executar outro script que corrigiu /etc/sudoers e, a partir de agora, usarei apenas visudo .

Portanto, se você estiver nessa situação, as tarefas do cron podem ser úteis. Não há tempo de inatividade / reinicialização do servidor e não há risco de bagunçar os dados com dd .

    
por 29.06.2017 / 17:37
1

Procure a data da última atualização e pesquise uma exploração de raiz desde essa data.

    
por 10.10.2013 / 22:59
1

Inicialize seu pc de uma distro ao vivo, como o Ubuntu; montar a partição que contém o diretório raiz. Vamos supor que a partição seja / dev / sda2, você pode montá-lo com

sudo mount /dev/sda2 /mnt

Agora você faz um chroot no diretório / mnt,

sudo chroot /mnt 

Agora você está efetivamente no seu disco rígido. Você pode alterar as senhas root e dos usuários por meio de:

passwd
passwd username

Agora que você redefiniu as senhas, corrigir o arquivo sudoers é muito simples:

pkexec visudo

Ele pedirá sua senha. Estritamente falando, isso requer autorização com o PolicyKit. Você pode obter mais informações aqui . No geral, é mais fácil do que você pensa.

    
por 10.10.2013 / 23:19
1

Eu tive um problema semelhante sudoers no meu dispositivo Synology NAS.

Minha solução foi colocar o seguinte comando no "Task Scheduler"

chmod 0755 /etc/sudoers

Que eu defino para ser executado como uma raiz .

Embora meu problema fosse relacionado a permissões, aposto que uma série de linhas de comando de redirecionamentos de saída configurados corretamente eliminaria o arquivo e substituiria o conteúdo por um shell básico que o colocaria em funcionamento.

Algo como:

echo "Defaults syslog=authpriv" > /etc/sudoers

echo "%administrators ALL=(ALL) ALL" >> /etc/sudoers

echo "Cmnd_Alias SHELL = /bin/ash, /bin/sh, /bin/bash" >> /etc/sudoers

echo "Cmnd_Alias SU = /usr/bin/su" >> /etc/sudoers

echo "%wheel ALL=(ALL) NOPASSWD: ALL, !SHELL, !SU" >> /etc/sudoers

    
por 24.08.2017 / 20:55