Red Hat Training

A Red Hat training course is available for RHEL 8

3.5.2.2. Confinar um administrador usando sudo e a função sysadm_r

Você pode mapear um usuário específico com privilégios administrativos para o usuário do staff_u SELinux, e configurar sudo para que o usuário possa ganhar o papel de administrador do sysadm_r SELinux. Esta função permite que o usuário execute tarefas administrativas sem que o SELinux negue. Quando o usuário faz login, a sessão é executada no contexto staff_u:staff_r:staff_t SELinux, mas quando o usuário entra em um comando utilizando sudo, a sessão muda para o contexto staff_u:sysadm_r:sysadm_t.

Pré-requisitos

  • O usuário do site root funciona de forma não confinada. Este é o default do Red Hat Enterprise Linux.

Procedimento

  1. Criar um novo usuário, adicionar o usuário ao grupo de usuários wheel e mapear o usuário para o usuário staff_u SELinux:

    # adduser -G wheel -Z staff_u example.user
  2. Opcional: Mapear um usuário existente para o usuário staff_u SELinux e adicionar o usuário ao grupo de usuários wheel:

    # usermod -G wheel -Z staff_u example.user
  3. Para permitir que example.user ganhe o papel de administrador do SELinux, crie um novo arquivo no diretório /etc/sudoers.d/, por exemplo:

    # visudo -f /etc/sudoers.d/example.user
  4. Adicione a seguinte linha ao novo arquivo:

    example.user ALL=(ALL) TYPE=sysadm_t ROLE=sysadm_r ALL

Etapas de verificação

  1. Verifique se example.user é mapeado para o usuário do staff_u SELinux:

    # semanage login -l | grep example.user
    example.user     staff_u    s0-s0:c0.c1023   *
  2. Faça o login como example.user, por exemplo, usando SSH, e mude para o usuário root:

    [example.user@localhost ~]$ sudo -i
    [sudo] password for example.user:
  3. Mostrar o contexto de segurança root:

    # id -Z
    staff_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
  4. Tente uma tarefa administrativa, por exemplo, reiniciar o serviço sshd:

    # systemctl restart sshd

    Se não houver saída, o comando terminou com sucesso.

    Se o comando não terminar com sucesso, ele imprime a seguinte mensagem:

    Failed to restart sshd.service: Access denied
    See system logs and 'systemctl status sshd.service' for details.