Este artigo foi escrito em 2016 para o RHEL7 por ocasião do seu lançamento. No entanto, os procedimentos a seguir funcionam para qualquer RHEL superior a versão 7.
A entrada do System D no RHEL7 nos trouxe muitas mudanças importantes para a principal distribuição Linux corporativa.
A forma como quebramos a senha de root também mudou. A seguir veremos como realizar a quebra da senha em sistemas Red Hat 7 ou superior.
Ligando o sistema em Rescue Mode
O termo “Single Mode” ou Single User, usando no antigo System V, também mudaram. Por mais que alguns ainda utilizemos esses termos, o correto a se dizer é “Rescue“, Rescue Mode” ou “Rescue Target“. Isso por que o Redhat 7 nos traz Targets onde antes existiam Run Levels.
O primeiro passo é entrar em Rescue Mode. Para isso, ligue o sistema e fique atento ao prompt do Grub. Na tela de seleção de Kernel do Grub, use as teclas direcionamento para parar o contador. Selecione o Kernel que deseja usar para iniciar o sistema, mas não tecle Enter.
Nesse ponto, tecle a tecla “e” para editarmos um parâmetro nesse Kernel.
Agora localize a linha que inicia com “linux” (linux16 para RHEL7 legacy, linuxefi para RHEL7 UEFI ou somente linux para RHEL8 em diante). No final desta linha, insira “rd.break“.
A seguir, pressine as teclas “CTRL+X” (Teclas Control e X) para iniciar o sistema em Rescue Mode.
Quebrando a senha de root no target Rescue
O sistema ficará parado em um prompt em read only. Vamos remontar o “/” com leitura e escrita (rw):
mount -o remount,rw /
Agora vamos fazer um chroot pra dentro do /sysroot. Assim poderemos editar o sistema:
chroot /sysroot
Uma vez dentro do chroot, vamos remontar / novamente com rw:
mount -o remount,rw /
Já podemos alterar a senha. Utilize o comando passwd e defina a senha desejada.
SELinux
Quando o sistema está ligado em modo normal de operação, o SELinux gerencia automaticamente os labels dos arquivos. Com base nesses labels, os arquivos são protegidos e se mantém operacionais. Contudo, isso não ocorre quando estamos em Rescue Mode. Adicionalmente, quando trocamos senhas de usuários, o /etc/shadow é recriado e, consequentemente, fica sem o label do SELinux. Ao tentar logar no sistema, mesmo utilizando a senha correta, o sistema não permite o login.
É extremamente crítico que, se o seu SELinux estiver em modo Enforcing, você siga os passos abaixo.
Se o sistema possuir grandes quantidade de dados armazenados, execute:
load_policy -i chcon -t shadow_t /etc/shadow
Isso aplicará o contexto/label default shadow_t ao /etc/shadow.
Mas, caso o sistema não possua grandes quantidade de dados armazenados, execute apenas:
touch /.autorelabel
Esse arquivo fará com que o SELinux percorra o sistema para reaplicar contextos/labels em todos arquivos mal configurados.
Eu recomendo o
touch /.autorelabel, mas se o sistema possuir muitos dados armazenados, principalmente se forem muitos arquivos pequenos, o próximo boot pode demorar para inicializar.
Saindo do Rescue Mode
Agora saia do chroot com o comando exit. Saia do Rescue Mode também com o comando exit.
Ligue o sistema normalmente e tente logar com a nova senha.
Conclusão
O amigo leitor pode ser pego de surpresa ao tentar quebrar a senha de root no Redhat 7 (ou superior) levando em consideração o procedimento feito em sistemas com SysV. O System D com SELinux requer esses pormenores. Qualquer passo negligenciado resultará em insucesso ao trocar a senha do sistema.
Abraço!

