Digamos que eu fiz algo bobo, como usar 'chsh' para alterar o shell do usuário raiz para um caminho de arquivo ruim. Futuros logons na conta raiz falharão abruptamente, citando / bin / o que não for encontrado, e você será reiniciado na tela de login. Excluindo um modo de recuperação ou inserindo um LiveCD para editar / etc / passwd, quais são as minhas opções para recuperar meu sistema? Vamos supor também (por diversão?) Que não há outros usuários na roda. Pensamentos?
23
Respostas:
Ao inicializar, anexe
init=/bin/bash
(ou um caminho para qualquer outro shell funcional) às suas opções de inicialização - você será direcionado diretamente para um único shell do usuário. Você pode precisar fazer issomount -o remount,rw /
antes de modificar a/etc/passwd
entrada nesse ambiente. Depois disso, basta reiniciar ou fazerexec /sbin/init 3
. Apenas não digiteexit
ou pressione Ctrl + D, pois isso resultaria em pânico no kernel *.Uma variação adicional desse método pode ser necessária em alguns sistemas carregados no modo de dois estágios (com uma imagem initrd). Se você perceber que as opções de inicialização contêm
init=
e, o mais importante,real_init=
o local a/bin/bash
ser colocado deve ser o último parâmetro (iereal_init=/bin/bash
).* Isso ocorre porque nesse ambiente, o shell é visto pelo kernel como o programa init - que é o único processo que o kernel conhece - representa um sistema em execução sob os olhos do kernel. De repente, encerrar esse processo, sem informar o kernel para desligar o sistema, deve resultar em pânico no kernel. (Você não entraria em pânico se de repente tudo ao seu redor ficasse preto e silencioso?)
fonte
exec
, mas acho que é melhor não mexer muito com os pontos de montagem antes./etc/passwd
)./
) antes de executar o init./bin/bash
é executado exatamente no ponto e, em seguida,/sbin/init
seria executado na inicialização normal. Portanto, não pode haver ação possível executada pelo sistema naquele momento.Você pode usar
su
e especificar um shell para executar (não tenho certeza se você está tentando sugerir que isso não é possível com sua observação sobre a ausência de outros usuárioswheel
):Caso contrário, você poderia fazer algo semelhante se o seu daemon ssh permitir o login no root:
Você também pode definir um shell como seu init no seu gerenciador de inicialização, por exemplo,
init=/bin/ksh
ou similar.fonte
Se o seu carregador de inicialização estiver configurado para permitir a edição ao vivo dos parâmetros do kernel, uma solução é reiniciar e usar um shell como processo init, por exemplo
init=/bin/bash
. Em seguida, monte o que precisar ser montado manualmente e edite/etc/passwd
.sync
e inicialize novamente com o seu habitualinit
.fonte
Se a essência da sua pergunta é que você bloqueou todas as maneiras de se tornar raiz, então, por definição, você não pode se tornar raiz.
É comum permitir três maneiras de se tornar root em um sistema unix:
root
em um prompt de login e digitando a senha root. Isso executa o shell da raiz.su
e digitando a senha root. Em alguns sistemas, isso requer estar em um grupo específico (geralmente chamadowheel
); em outros sistemas, qualquer pessoa que conheça a senha root pode se tornar root. Os sistemas que usam o PAM para autenticação usampam_wheel
para gerenciar o grupo de roda, se houver um. Se você especificar um comando comsu -c
, ele será executado via shell do root.sudo
e digitando sua própria senha. A conta do usuário deve ter recebido poderes do sudo por um administrador. A menos que restrito nosudoers
arquivo, você pode executar qualquer comando, independentemente do shell do root.Uma maneira tradicional de se proteger contra a indisponibilidade do shell raiz é definir outra conta com o UID 0 e um shell diferente (
toor
é um nome tradicional). Por exemplo, se o shell do root for um executável vinculado dinamicamente (uma boa idéia para economizar memória) e uma atualização da biblioteca der errado, o shell do root poderá ser inutilizável. A conta raiz alternativa teria um executável vinculado estaticamente, possivelmente um com utilitários comuns embutidos, como o BusyBox .fonte
As respostas acima são ótimas e aprendi lendo-as. Se você não se lembra dos detalhes dessas abordagens e não se importa de reiniciar, sempre pode inicializar seu sistema usando uma distribuição de CD ao vivo, montar a partição / e editar / etc / passwd e reiniciar. Não é tão elegante quanto as soluções acima, mas mais fácil de lembrar.
fonte
/etc/passwd
arquivo. Fora isso, bom ponto - eu só queria adicionar a mesma sugestão à minha resposta.