Como desativar permanentemente o prompt de senha de root para o modo de recuperação, RHEL7

6

Observação: fiz uma pergunta semelhante sobre a versão 6 desses pacotes aqui . Note que 7 usa o systemd e pode ter uma implementação diferente

Nos casos raros em que um sistema RHEL ou CentOS 7 é impedido de inicializar (por exemplo) por um desligamento incorreto ou uma falha forçada do fsck-check na inicialização, o console solicitará ao usuário uma senha root.

Como faço para desativar a verificação de senha e soltá-la diretamente em um shell de root?

Inaceitável respostas:

  • sobrescrevendo init na linha de comando do kernel (isto é, grub)
  • ligando / substituindo / sbin / sulogin com / sbin / sushell. (Isso funcionaria, mas geraria alertas com a estrutura de segurança).
  • inicializando de algum outro dispositivo
por Otheus 21.07.2015 / 15:52

2 respostas

8

O Systemd está trabalhando com serviços e destinos . Os destinos são o equivalente de runlevels , os serviços equivalem a scripts de inicialização . A maioria das configurações do systemd está localizada em /usr/lib/systemd , enquanto o init padrão está em /etc/{init.d,rc*.d,inittab} .

Quando um problema entra em ação durante o processo de inicialização (o padrão é getty.target ou graphical.target , você pode obtê-lo com systemctl get-default ) systemd está alternando para emergency.target .

Esse alvo de "emergência", por sua vez, carregará o arquivo emergency.service . Este serviço contém várias linhas e entre elas:

...
[Service]
Environment=HOME=/root
WorkingDirectory=/root
ExecStartPre=-/bin/plymouth quit
ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\nsystem logs, "systemctl reboot" to reboot, "systemctl default" to try again\nto boot into default mode.'
ExecStart=-/bin/sh -c "/sbin/sulogin; /usr/bin/systemctl --fail --no-block default"
...

Precisamos apenas substituir a chamada para /sbin/sulogin :

ExecStart=-/bin/sh -c "/sbin/sushell; /usr/bin/systemctl --fail --no-block default"

E nós seremos descartados diretamente em um shell, em vez de sermos solicitados pela senha via sulogin. (Podemos usar /bin/sh , mas /sbin/sushell está alinhado com as respostas para o CentOS6 / RHEL6. De fato, sushell simplesmente executa $SUSHELL , cujo padrão é /bin/bash .)

Para tornar essa alteração "permanente", ou seja, imune a yum updates, faça a alteração em uma cópia desse arquivo e coloque-o em /etc/systemd/system/ . Além disso, para que o "modo de recuperação" funcione da mesma maneira, substitua a mesma linha em rescue.service . Aqui está um script shell / sed para simplificar o processo:

for SERVICE in rescue emergency ; do 
   sed '/^ExecStart=/ s%"/sbin/sulogin;%"/sbin/sushell;%' /usr/lib/systemd/system/$SERVICE.service > /etc/systemd/system/$SERVICE.service
done

Para testar isso, verifique se o sistema não está em uso e informe systemd para alternar para o rescue target:

systemctl rescue

Isso fechará as conexões de rede e abrirá um shell no console. Você pode testar com a meta emergency , mas isso não funciona tão bem (por algum motivo) e pode exigir uma reinicialização completa para sair.

Você também pode testá-los no menu de inicialização (grub). Para testar o modo de emergência, é fácil. Inicialize e, quando chegar ao menu, clique em "e" para editar e use o D-pad para navegar até a linha que começa com linux16 e acrescentar (pressione CTRL-A para chegar ao final da linha) emergency :

linux16 ... emergency

Para testar o modo de recuperação, são os mesmos passos acima, mas você deve ser mais explícito:

linux16 ... systemd.unit=rescue.target
    
por 27.07.2015 / 13:11
-2

O método que usei para ignorar a senha do root e acessar o shell raiz é editando o init no grub (linha do kernel).

init=/bin/bash
    
por 21.07.2015 / 17:47