Não consigo logar na shell root

Dificuldades para logar como root

Ao estar logado com root tentei mudar o shell com o comando chsh para o shell zsh, mas esqueci de apontar o caminho absoluto da shell.

Ao fazer a mudança digitei
:arrow_right: chsh --shell zsh root

Ao invés de
:arrow_right: chsh --shell /bin/zsh root

Fiz logout da máquina e quando fui tentar logar novamente, recebo o erro.

su: falha ao executar zsh: Arquivo ou diretório inexistente

Tentei fazer desta forma para logar com outra shell, mas não fui bem sucedido.
:arrow_right: su --shell /usr/bin/bash root

E também, tentei.
:arrow_right: su --preserve-environment --shell /usr/bin/bash root

Para fazer o login com outra shell. Sem sucessos.

Verifiquei o arquivo /etc/passwd para verificar como a shell foi gravada e realmente, fiz cagada, reiniciei o laptop com o caminho errado e agora não consigo acessar o root.

O que vocês sugerem? O caminho que está gravado está desta forma.
:arrow_right: root:x:0:0:root:/root:zsh

Vou tentar fazer o login através da inicialização e ver se consigo alterar, mas vou deixar postado aqui para ver quem já fez essa cagada. :joy:

que tal usar o sudo?
sudo nano /etc/passwd

1 Curtida

Pior que não tinha pensado nisso. Acredita? kkk.

Valeu. Obrigado pela ajuda. Modificado com sucesso.

1 Curtida

Se você olhar o man su:

Como zsh sozinho não estava na lista em /etc/shells, a opção -s foi ignorada, pois um usuário normal chamou o su. Nem a opção -c serviria, pois ela passa o que tem depois do -c para o shell (que não funciona).

Fiz a mesma coisa de propósito no meu PC, e achei duas soluções sem o sudo. As duas exploram o fato de um caminho que não começa com / no Linux é, por padrão, relativo à pasta atual:

  • cd /bin && su (entrar na pasta /bin e rodar o próprio zsh dentro da pasta)
  • Criar um script chamado zsh na Home (ou qualquer pasta que você possa entrar como usuário normal), marcar como executável e mandar o su. Ele pode ter apenas o #! apropriado e exec /bin/zsh, por exemplo.
$ cat bash          
#!/bin/sh
echo I am "$(id -un)"

$ su                
Senha: 
I am root
1 Curtida