falha de login devido ao shell defeituoso

1

Costumo executar a compilação mais recente do meu shell de login (zsh). Ontem, a compilação mais recente estava com defeito e caiu imediatamente. Executá-lo em um terminal não foi um grande problema, pois eu tinha outros terminais abertos executando versões estáveis para que eu pudesse corrigir o link para o shell defeituoso. No entanto, eu reiniciei estupidamente com o shell defeituoso ativo em / etc / passwd, e ao alcançar o prompt de login, o login era impossível devido ao shell defeituoso. Eu estou querendo saber se há alguma maneira de contornar isso, ou seja, alguma maneira de definir um shell de fallback, ou obter o login para pedir-lhe outro shell no caso do padrão está com defeito ... qualquer coisa assim. Assim, reiniciei a instalação de backup e fiz o reparo dessa maneira, mas é um pouco desajeitado.

    
por Ray Andrews 12.02.2015 / 22:19

2 respostas

2

Se o shell estivesse totalmente defeituoso e tivesse acabado de sair com um erro assim que fosse invocado, você poderia fazer um shell falso que era apenas um shell script POSIX que rodava seu shell e / ou o código de saída como um fallback.

#!/bin/sh

# this is usually some incredibly limited shell like dash
fallback_shell=/bin/sh
primary_shell="$(getent passwd 'whoami' | cut -d: -f7)"

"$primary_shell" || "$fallback_shell"
    
por 12.02.2015 / 23:43
1

Certifique-se de poder efetuar login como root. Algumas distribuições desabilitam o login como root diretamente, mas você pode habilitar simplesmente atribuindo uma senha à conta root. Isso não é inseguro (basta escolher uma senha que seja pelo menos tão strong quanto a da sua conta). Claro que não use um shell experimental na conta root (você não deveria estar fazendo coisas complexas nessa conta de qualquer maneira).

Para mais segurança, você pode criar uma entrada adicional no banco de dados do usuário para o mesmo usuário. Você pode ter várias entradas em /etc/passwd com o mesmo ID de usuário (portanto, é o mesmo usuário), mas nomes de usuário diferentes (para que sejam distinguidos no prompt de login), diretórios iniciais diferentes e diferentes shells de login. Para criar essa entrada, edite /etc/passwd executando o comando vipw , duplique a entrada da sua conta e altere o nome de usuário e o shell de login para a segunda entrada. Em seguida, execute vipw -s para alterar o arquivo de senha ( /etc/shadow ); duplicar a entrada da sua conta e alterar o nome de usuário, mas deixar a senha em sigilo.

Por exemplo, estas são as duas primeiras linhas do meu /etc/passwd ( sash é um shell vinculado estaticamente com alguns recursos adicionais, bons para o reparo do sistema):

root:x:0:0:root:/root:/not/bin/sh
sashroot:x:0:0:root:/root:/bin/sash
    
por 14.02.2015 / 00:15

Tags