Eu faço muito trabalho de desenvolvimento local com máquinas virtuais (CentOS/RHEL). Em vez de configurar tudo com uma senha de root padrão - que, se exposta à rede, pode ser problemática - gostaria de configurá-los para permitir o login de root sem senha apenas no console serial.
Minha primeira tentativa foi simplesmente substituir o ExecStart
comando padrão por [email protected]
uma linha de comando usando a --autologin
opção:
ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,38400,9600 --noclear --autologin root ttyS0 $TERM
Enquanto isso ignora o login:
prompt, ele ainda solicita uma senha de root. Esta parece ser uma limitação do login
programa no Linux.
Eu também tentei substituir o programa de login padrão por um shell, assim:
ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,38400,9600 --noclear -n -l /bin/bash ttyS0 $TERM
Mas isso entra em conflito com o selinux: enquanto recebo um bash
shell, ele não tem acesso a nada:
bash: /root/.bashrc: Permission denied
# ls /etc/systemd
ls: cannot open directory '/etc/systemd': Permission denied
Em outros lugares na rede, as pessoas sugeriram apenas remover o hash de senha de /etc/{password,shadow}
, mas é claro que isso resulta em um conjunto diferente de problemas: agora qualquer usuário pode su -
sem uma senha.
Alguma ideia de como fazer isso funcionar corretamente?
Depois de algumas experiências, eu tenho algo que funciona:
Execute
systemctl edit [email protected]
e adicione o seguinte:Isso fará com
agetty
que o usuário faça o login automáticoroot
, mas apenas com essa alteração o sistema ainda solicitará a senha do root.Podemos configurar
/etc/pam.d/login
para autenticarroot
logins no console sem senha. Adicione o seguinte ao topo de/etc/pam.d/login
:Isso fará com que a pilha do PAM verifique o login tty in
/etc/securetty
e ignore outros mecanismos de autenticação se encontrá-lo.Adicione a porta serial a
/etc/securetty
:Com essas alterações em vigor, você verá o seguinte no console serial ao inicializar:
...e se você sair, você terminará de volta no prompt do shell.
Observe que usei o nome do arquivo
/etc/securetty
aqui, que antigamente fazia outra coisa (controlava terminais nos quaisroot
era permitido fazer login). Então, se isso te incomoda, use um arquivo diferente :).