Recuperando da configuração do shell do root para um arquivo inválido

23

Digamos que eu tenha feito algo bobo, como usar 'chsh' para alterar o shell do usuário root para um caminho de arquivo incorreto. Os logins futuros na conta root falharão abruptamente, citando / bin / o que não for encontrado, e inicializarão você novamente na tela de login. Bloqueando um modo de recuperação ou inserindo um LiveCD para editar / etc / passwd, quais são minhas opções para recuperar meu sistema? Vamos supor também (por diversão?) Que não há outros usuários na roda. Pensamentos?

    
por noffle 18.09.2011 / 23:28

5 respostas

30

Ao inicializar, inclua init=/bin/bash (ou um caminho para qualquer outro shell funcional) em suas opções de inicialização - você será descartado diretamente em um único shell de usuário. Pode ser necessário fazer mount -o remount,rw / antes de modificar a entrada /etc/passwd nesse ambiente. Depois disso, basta reiniciar ou fazer exec /sbin/init 3 . Apenas faça não digite exit ou pressione Ctrl + D, pois isso resultaria em kernel panic *.

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, mais importante, real_init= , o local para colocar /bin/bash deve ser o último parâmetro (ou seja, real_init=/bin/bash ).

* Isso porque, nesse ambiente, o shell é visto pelo kernel como o programa init - que é o único processo que o kernel conhece - ele representa um sistema em execução por baixo do kernel. olho do kernel. De repente, finalizar esse processo, sem avisar ao 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 negro e silencioso?)

    
por 19.09.2011 / 01:03
10

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 nenhum outro usuário estar em wheel ):

su -c /bin/bash

Caso contrário, você poderia fazer algo semelhante se seu daemon ssh permitir login para root:

ssh root@localhost /bin/bash

Você também pode definir um shell como seu init no seu gerenciador de inicialização, por exemplo, init=/bin/ksh ou similar.

    
por 18.09.2011 / 23:37
6

Se o seu gerenciador de inicialização estiver configurado para permitir a edição ao vivo dos parâmetros do kernel, uma solução é reinicializar e usar um shell como processo init, por exemplo, %código%. Em seguida, monte o que precisar ser montado manualmente e edite init=/bin/bash . /etc/passwd e inicialize novamente com seu% usualsync.

    
por 19.09.2011 / 01:03
6

Se a essência da sua pergunta é que você bloqueou todos os caminhos para se tornar root, então, por definição, você não pode se tornar root.

É comum permitir que três formas se tornem raiz em um sistema unix:

  • Faça login como root, digitando root em um prompt de login e digitando a senha de root. Isso executa o shell do root.
  • Faça login como usuário comum e torne-se root executando su e digitando a senha de root. Em alguns sistemas, isso requer estar em um grupo específico (geralmente chamado wheel ); em outros sistemas, qualquer um que conheça a senha do root pode se tornar root. Os sistemas que usam o PAM para autenticação usam pam_wheel para gerenciar o grupo wheel, se tiverem um. Se você especificar um comando com su -c , ele será executado via shell do root.
  • Faça login como usuário comum e torne-se root executando sudo e digitando sua própria senha. A conta de usuário deve ter recebido poderes sudo por um administrador. A menos que seja restrito no arquivo sudoers , você pode executar qualquer comando, independentemente do shell do root.

Uma maneira tradicional de se proteger contra o shell do root estar indisponível é 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 falhar, o shell do root poderá ficar inutilizável. A conta root alternativa teria um executável vinculado estaticamente, possivelmente um com utilitários comuns internos, como BusyBox .

    
por 20.09.2011 / 02:13
5

As respostas acima são ótimas e aprendi com a leitura delas. Se você não se lembra dos detalhes dessas abordagens e não se importa em reinicializar, você sempre pode inicializar seu sistema usando uma distribuição de CD ao vivo, montar a partição / e editar / etc / passwd e reinicializar. Não tão elegante quanto as soluções acima, mas mais fáceis de lembrar.

    
por 24.09.2011 / 09:40