O shell raiz foi alterado por engano. Como posso alterá-lo novamente para um shell válido?

19

Entrei por engano

chsh -s /usr/bin 

ao invés de

chsh -s /bin/bash 

e agora não consigo fazer login em um shell raiz, como inicio um shell bash como root manualmente?

ChiseledAbs
fonte
em que contexto você fez isso. Em um terminal atual, para o shell padrão do usuário?
jgr208
você não tem usuários no grupo sudo?
Rui F Ribeiro
3
faz sudo vipwo trabalho?
Rui F Ribeiro
1
@RuiFRibeiro sim fez, obrigado, eu não estava ciente de que eu poderia mudar o shell de root padrão nesse arquivo
ChiseledAbs
1
Não é necessário nesse caso, mas quando você cria inadvertidamente uma catástrofe envolvendo raiz, geralmente é possível levar a máquina para o modo de usuário único, corrigir o problema e retornar ao modo de multiusuário.
boardrider

Respostas:

29

Enquanto o root não tem acesso, um usuário no grupo sudo ainda pode executar comandos privilegiados - parece que o erro não está no sudo, mas em outras partes do sudo chshcomando (por exemplo, erro chsh).

Como tal, seu sudo está aparentemente funcionando.

O arquivo passwd pode ser editado com:

sudo vipw

E o shell raiz mudou manualmente.

(primeira linha de /etc/passwdgeralmente)

root:x:0:0:root:/root:/bin/bash

Fom man vipw

Os comandos vipw e vigr editam os arquivos / etc / passwd e / etc / group, respectivamente. Com o sinalizador -s, eles editarão as versões de sombra desses arquivos, / etc / shadow e / etc / gshadow, respectivamente. Os programas definirão os bloqueios apropriados para evitar corrupção de arquivos.

Rui F Ribeiro
fonte
3
Eu nunca soube vipwe vigr, obrigado! Eu sempre useisudo vim /etc/passwd
cat
3
Você pode estar interessado em visudo sudo.ws/man/1.8.15/visudo.man.html também, @tac
Rui F Ribeiro
3
Ou sudo -e, que executa esse recurso de edição de bloqueio para qualquer edição.
Kojiro # 28/16
16

Outra opção, supondo que você tenha acesso a outra conta, é substituir manualmente o shell padrão usando su --shell=/bin/bash:

-s, --shell = SHELL
executa SHELL se / etc / shells permitir

A principal vantagem disso é que ele requer apenas acesso a outra conta, não a outra privilegiada .

Xiong Chiamiov
fonte
8

Por razões de segurança, logins se textual ou gráfica e utilitários como sue sudoque lhe permitem executar comandos como um usuário diferente todos executar os comandos através do shell do usuário-alvo. Se o shell do usuário de destino não estiver funcional, você verá os resultados :-(

A menos que você tenha um shell raiz ainda funcional sendo executado em algum lugar ou algo como um binário raiz de setuid ou algo que permita contornar isso, reiniciar e corrigir o problema usando um sistema de resgate ou imagem ao vivo é provavelmente a sua melhor aposta.

Inicialize o sistema de recuperação, monte o sistema de arquivos raiz do seu sistema real em algum lugar, digamos /mnt/foo, e edite /mnt/foo/etc/passwdpara corrigir o shell. Salve, desmonte e pronto.

Celada
fonte
curioso, o que acontece se você fizer isso e o arquivo / etc / passwd estiver em um hash em vez de em texto sem formatação?
jgr208
1
/etc/passwdnão é texto simples? Não vejo isso há pelo menos uma década. Isso ainda é algo em alguns sistemas? Enfim, eu acho que chroot /mnt/foo chsh -s /bin/bashpoderia fazer o truque nesse caso?
Celada 28/03
Eu nunca tive o problema descrito, no entanto, trabalho com sistemas bloqueados que precisam ter o / etc / passwd não em texto simples para evitar hackers e comprometer ainda mais o sistema se eles obtiverem acesso. Hmm, isso pode funcionar, digamos que eu espero nunca ter que tentar e ver se funciona realmente.
jgr208
Eu era capaz de editar / etc / passwd com sudo a partir de uma conta de usuário, eu não estava ciente de que o shell foi definido neste arquivo, graças
ChiseledAbs
@ChiseledAbs oh, você estava? Bom para você, feliz por ter resolvido seu problema. Eu não acho que isso deixaria você.
Celada
6

Adicione init=/bin/bashà sua linha de comando do kernel (se estiver inicializando com o grub, pressione epara editar a entrada de inicialização) e você terá um shell bash executando como root sem precisar fornecer uma senha. No entanto, seu sistema de arquivos raiz provavelmente ainda será montado como somente leitura, portanto, você precisará remontá-lo primeiro e depois mudar o shell novamente chsh.

psusi
fonte
4

sudo usermod -s /bin/bash jdoe

mudará o shell do jdoe para bash. Você pode então sudo egrep jdoe /etc/passwdverificar.

user208145
fonte