Isenção de responsabilidade: Esta pergunta não é para resolver o problema de alterar a senha de root enquanto o SELinux está ativo, porque já existem muitos guias para resolver isso. É mais como o SELinux faz isso internamente.
Sou um usuário recente do SELinux, mas ultimamente tenho estado mais em contato com ele. Houve um momento em que alguém me perguntou como eu poderia redefinir a senha root em caso de esquecê-la.
Então eu iniciei meu CentOS, editei a entrada do grub para algo como
linux16 <kernel_location> root=/dev/mapper/centos-root rw init=/bin/bash
Eu corri passwd
e depois corri sync
e forcei a reinicialização. Após a reinicialização, o login com a nova senha foi rejeitado, assim como com a antiga, é claro.
Reiniciou novamente e passou ao kernel o parâmetro para desativar o SELinux ( selinux=0
). Tentei fazer login com a nova senha e funcionou. Depois forcei uma nova identificação automática do fs (via arquivo .autorelabel
) e, com o SELinux ativo, agora era possível efetuar login.
Minha pergunta é: por que acontece? Por que a mudança de nome afeta o logon quando houve apenas uma alteração de senha e não de usuários ou objetos?
Obrigado pela sua atenção.
TL; DR: A redefinição de senha root comum não funciona no SELinux. Por quê?
Edit: Isso foi testado em uma máquina virtual executando o CentOS7 com o KVM como hypervisor.
Respostas:
Consegui duplicar esse problema em um sistema CentOS 7.5 recém-instalado.
Eis aqui o que está acontecendo:
Quando você inicializa,
init=/bin/bash
há dois problemas que podem ocorrer:O sistema de arquivos raiz pode ser montado somente para leitura. Neste caso,
passwd
irá reclamar de umAuthentication token manipulation error
.Isso é bastante óbvio: se o sistema de arquivos não estiver montado, leitura e gravação, não será possível gravar nele.
A política do SELinux pode não estar carregada. Nesse caso
passwd
, a senha será alterada com êxito, mas você terá o problema descrito na pergunta original acima: ninguém poderá fazer login.Os hashes de senha são armazenados no
/etc/shadow
arquivo. Este arquivo normalmente possui o tipo SELinuxshadow_t
. No entanto, alterar o arquivo enquanto nenhuma política do SELinux está carregada faz com que o tipo SELinux seja removido do arquivo, deixando-o comounlabeled_t
. Portanto, os serviços que tentam ler o arquivo para autenticar logons não conseguem mais lê-lo.Para alterar a senha root no RHEL / CentOS 7, você precisa seguir este processo:
init=/bin/bash
ao final da linha de comando do kernel no grub, como você fez anteriormente./usr/sbin/load_policy -i
.mount -o remount,rw /
.passwd root
mount -o remount,ro /
.exec /sbin/init 6
.Agora você pode fazer login com a senha root alterada.
Uma explicação mais detalhada deste procedimento está disponível na Red Hat (é necessária uma assinatura).
fonte
init=/bin/bash
.passwd
"parece ter sucesso"?passwd
saber,/etc/passwd
e/etc/shadow
. Se estiver executandopasswd
sem política carregada, não será executado no contexto apropriado do selinux, e os arquivos alterados terminarão com um contexto diferente do selinux. Ao inicializar com o selinux ativado e as políticas ativas, a verificação de senha falha devido ao contexto inadequado do arquivo e não aowrong password
erro. Forçar o selinux a reativar os arquivos de texto tocando/.autorelabel
também pode corrigir esse problema ao alterar senhas sem a política carregada.