SELinux redefine a senha do root

10

Disclaimer: Esta questão não é para resolver o problema de alterar a senha do root enquanto o SELinux está ativo porque existem muitos guias para resolver isso já. 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 do root em caso de esquecê-la. Então eu inicializei meu CentOS, editei a entrada do grub para algo como %código% Eu corri .... linux16 <kernel_location> root=/dev/mapper/centos-root rw init=/bin/bash ... e depois corri passwd e forcei a reinicialização. Após a reinicialização, o login com a nova senha foi rejeitado, bem como o antigo, é claro. Reinicializou novamente e transmitiu ao kernel o parâmetro para desabilitar o SELinux ( sync ). Tentei fazer o login com a nova senha e funcionou. Depois forcei uma auto-etiqueta fs (via arquivo selinux=0 ) e com o SELinux ativo agora era possível efetuar o login.

Minha pergunta é: por que isso acontece? Por que a reclassificação afeta o login 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 habitual de senha raiz não funciona no SELinux. Por quê?

Edit: Isso foi testado em uma máquina virtual executando o CentOS7 com o KVM como hypervisor.

    
por Jorge Heleno 18.10.2018 / 16:33

1 resposta

16

Consegui duplicar esse problema em um sistema CentOS 7.5 recém-instalado.

Aqui está o que está acontecendo:

Quando você inicializa com init=/bin/bash , há dois problemas que você pode encontrar:

  • O sistema de arquivos raiz pode ser montado somente para leitura. Nesse caso, passwd vai reclamar de um Authentication token manipulation error .

    Isso é bastante óbvio: se o sistema de arquivos não estiver montado como leitura-gravação, não será possível gravar nele.

  • A política do SELinux não pode ser carregada. Nesse caso, passwd alterará com sucesso a senha, mas você terá o problema descrito na pergunta original acima: ninguém conseguirá fazer o login.

    Os hashes de senha são armazenados no arquivo /etc/shadow . Este arquivo normalmente possui o tipo SELinux shadow_t . No entanto, alterar o arquivo enquanto nenhuma diretiva do SELinux é carregada faz com que o tipo SELinux seja removido do arquivo, deixando-o como unlabeled_t . Assim, serviços que tentam ler o arquivo para autenticar logins não são mais capazes de lê-lo.

Para alterar a senha do root no RHEL / CentOS 7, você precisa seguir este processo:

  1. Adicione init=/bin/bash ao final da linha de comando do kernel no grub, como fez anteriormente.
  2. No prompt do bash, carregue a política do SELinux com /usr/sbin/load_policy -i .
  3. Monte o sistema de arquivos raiz de leitura / gravação com mount -o remount,rw / .
  4. Agora mude a senha e ela será bem-sucedida. %código%
  5. Remontar o sistema de arquivos readonly para confirmar as alterações e ter um sistema de arquivos limpo na próxima inicialização com passwd root .
  6. Saia do shell ou reinicie o sistema com mount -o remount,ro / .

Agora você pode fazer login com a senha de root alterada.

Uma explicação mais detalhada deste procedimento está disponível na Red Hat (requer assinatura).

    
por 18.10.2018 / 17:21