su -s '/ bin / bash' continua a usar o shell em / etc / passwd

0

Deixe-me começar admitindo que fiz algo estúpido. Eu editei manualmente o shell para root em / etc / passwd e eu tenho um erro de digitação. Para piorar, não tenho nenhum usuário sudo na caixa.

Então, tentei o seguinte, com o seguinte resultado:

$ su -s '/bin/bash chsh root' root
Password: 
Cannot execute /usr/bin/scrrn: No such file or directory

(Você vê o que eu fiz, certo? Ugh.)

Acho que é por causa disso, na página man:

If the target user has a restricted shell (i.e. the shell field of
this user's entry in /etc/passwd is not listed in /etc/shells),
then the --shell option or the $SHELL environment variable won't be
taken into account, unless su is called by root.

Talvez minha pergunta não seja especificamente sobre o su -s, mas é um lugar onde posso começar.

(Felizmente, nada do mundo será perdido se eu não conseguir entrar. Só vou perder tempo realmente.)

    
por stone212 15.09.2017 / 09:43

2 respostas

1

Uma possibilidade é inicializar o sistema em um único usuário ou usar uma chave USB de inicialização de recuperação (relacionada à sua distribuição) para corrigir o erro de digitação em /etc/passwd

Em muitos sistemas Linux, você poderia dizer ao carregador de inicialização GRUB para executar um argumento kernel witn init=/bin/bash . Depois de fazer isso, você poderá reeditar cuidadosamente seu /etc/passwd

BTW, a coisa certa a fazer para alterar um shell é chsh , mas você realmente não quer chsh to /usr/bin/screen para root

(você pode criar outra conta do uid 0 e shell /usr/bin/screen ; não tenho certeza se é uma coisa sensata a ser feita ...)

Por fim, leia com atenção su (1) :

-s, --shell=shell

         Run the specified shell instead of the default.

Portanto, você deve executar /bin/su -s /bin/bash ; observe que /bin/bash chsh root não é o caminho de um executável (que pode ser execve (2) -d como um shell), mas isso não funcionará para o root se o shell não estiver listado em /etc/shells

você também pode tentar /usr/bin/sudo SHELL=/bin/bash -s

    
por 15.09.2017 / 09:47
1

Eu gostaria de dar 50% de crédito a @Basile Starynkevitch ou mesmo se ele escrevesse respostas separadas. Porque uma de suas sugestões me colocou no caminho certo.

1 - Como disse o @Basile Starynkevitch, eu consegui inicializar a máquina, e no GRUB, eu apertei "e" para editar as opções de inicialização. Na linha que começa com "linux" eu adicionei o parâmetro:

init=/bin/bash

Isso me inicializou em um shell bash bash. Progresso!

2 - Como root no sistema de arquivos você ainda não poderá editar nada porque o sistema de arquivos é montado somente para leitura (mesmo se você remover essa opção do GRUB que eu encontrei e eu não pesquisei por que) então você tem que digitar :

# mount -o remount,rw /

Depois, você pode prosseguir para:

3 - Edite o arquivo / etc / passwd

Como @Basile Starynkevitch diz:

BTW the right thing to do to change a shell is chsh

Ele está correto. Mas eu acabei de fazer

# vi /etc/passwd

porque eu geralmente não faço a mesma coisa estúpida duas vezes.

    
por 16.09.2017 / 08:15

Tags