Administrando o Contexto de Segurança do SELinux

Descreve contextos de segurança do SELinux e mostra como exibir, atribuir e restaurar informações de contexto para usuários, arquivos e processos.

No SELinux, todos os sistemas de arquivos, arquivos, diretórios, dispositivos e processos têm um contexto de segurança associado. Para arquivos, o SELinux armazena um rótulo de contexto nos atributos estendidos do sistema de arquivos. O contexto contém mais informações sobre um objeto do sistema: o usuário do SELinux, sua função, seu tipo e o nível de segurança. O SELinux usa essas informações de contexto para controlar o acesso por processos, usuários do Linux e arquivos.

Este tópico explica como administrar informações de contexto de segurança do SELinux.

Você pode especificar a opção -Z com determinados comandos (ls, ps e id) para exibir o contexto do SELinux usando a seguinte sintaxe:

SELinux user:Role:Type:Level           
SELinux user

Uma conta de usuário do SELinux complementa uma conta de usuário regular do Linux. O SELinux mapeia cada usuário do Linux para uma identidade de usuário do SELinux usada no contexto do SELinux para os processos em uma sessão de usuário. Os nomes de usuário do SELinux geralmente terminam com _u. Vários usuários do Linux podem ser mapeados para o mesmo usuário do SELinux.

Role

No modelo de segurança RBAC (Role-Based Access Control), uma atribuição atua como uma camada intermediária de abstração entre os domínios de processo ou tipos de arquivo do SELinux e um usuário do SELinux. Os processos são executados em domínios SELinux específicos e os objetos do sistema de arquivos recebem tipos de arquivo SELinux. Os usuários do SELinux estão autorizados a executar atribuições especificadas, e as atribuições estão autorizadas para domínios e tipos de arquivo do SELinux especificados. A função de um usuário define quais domínios de processo e tipos de arquivo o usuário pode acessar e, portanto, quais processos e arquivos o usuário pode acessar. A convenção no SELinux é que os nomes de atribuições terminam em _r.

Type

Todas as regras no SELinux são baseadas em tipos. Um tipo define um tipo de arquivo SELinux ou um domínio de processo do SELinux. Os processos são separados uns dos outros pela execução em seus próprios domínios. Essa separação impede que os processos acessem arquivos que outros processos usam e impede que os processos acessem outros processos. As regras de política do SELinux definem o acesso que os domínios de processo têm a tipos de arquivo e a outros domínios de processo.

Level

Um nível é um atributo de MCS (Multi-Level Security) e MCS (Multi-Category Security). Um intervalo MLS é um par de níveis de sensibilidade, escrito como low_level-high_level. O intervalo poderá ser abreviado como low_level se os níveis forem idênticos. Por exemplo, s0 é o mesmo que s0-s0. Cada nível tem um conjunto opcional de categorias de segurança às quais se aplica. Se o conjunto for contíguo, ele poderá ser abreviado. Por exemplo, s0:c0.c3 é o mesmo que s0:c0,c1,c2,c3.

Exibindo o Mapeamento de Usuários do SELinux

Esta tarefa mostra como exibir o mapeamento entre contas de usuário do SELinux e do Linux usando o comando semanage.

  1. Liste todos os usuários do SELinux.

    Execute o seguinte comando para mostrar todas as contas de usuário do SELinux:

    seinfo -u

    A saída é semelhante à seguinte:

    Users: 8
    guest_u
    root
    staff_u
    sysadm_u
    system_u
    unconfined_u
    user_u
    xguest_u
  2. Mostrar quais contas de usuário do Linux estão mapeadas para quais contas de usuário do SELinux.

    Execute o seguinte comando para exibir os mapeamentos:

    sudo semanage login -l

    A saída é semelhante à seguinte:

    Login Name           SELinux User         MLS/MCS Range        Service
    
    __default__          unconfined_u         s0-s0:c0.c1023       *
    root                 unconfined_u         s0-s0:c0.c1023       *
    system_u             system_u             s0-s0:c0.c1023       *

    Por padrão, o SELinux mapeia usuários do Linux que não sejam root e o usuário padrão no nível do sistema, system_u, para o usuário Linux __default__ e, por sua vez, para o usuário SELinux unconfined_u. O Intervalo de MLS/MCS é o nível de segurança usado pelo MLS (Multi-Level Security) e pelo MCS (Multi-Category Security).

Exibindo Informações de Contexto do SELinux

Esta tarefa mostra como exibir as informações de contexto do SELinux associadas a diferentes recursos.

  1. Para exibir as informações de contexto associadas a todos os arquivos em um diretório, use o comando ls -Z:
    ls -Z
  2. A saída é semelhante à seguinte:
    -rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
    -rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 config
    -rw-r--r--. root root system_u:object_r:admin_home_t:s0 initial-setup-ks.cfg
    drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 jail
    -rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 team0.cfg
  3. Execute o seguinte comando para exibir o contexto do arquivo /etc/selinux/config:
    ls -Z /etc/selinux/config

    A saída é semelhante à seguinte:

    -rw-r--r--. root root system_u:object_r:selinux_config_t:s0 /etc/selinux/config
  4. Para exibir as informações de contexto associadas aos processos, execute o comando ps -Z:
    ps -Z
    LABEL                                                 PID  TTY   TIME     CMD
    unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 3038 pts/0 00:00:00 su
    unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 3044 pts/0 00:00:00 bash
    unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 3322 pts/0 00:00:00 ps
  5. Para exibir as informações de contexto associadas ao usuário atual, execute o comando id -Z:
    id -Z

    A saída é semelhante à seguinte:

    unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Alterando o Tipo de Arquivo Padrão

Esta tarefa mostra como alterar o tipo de arquivo padrão para uma hierarquia de sistema de arquivos. No exemplo, você optou por usar um diretório DocumentRoot para httpd diferente do padrão /var/www/html.

  1. Especifique o novo tipo de arquivo padrão para a hierarquia de diretórios.

    Para alterar o tipo de arquivo padrão da hierarquia de diretórios /var/webcontent para httpd_sys_content_t, utilize o comando semanage:

    sudo /usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/var/webcontent(/.*)?"

    A execução desse comando adiciona a seguinte entrada ao arquivo /etc/selinux/targeted/contexts/files/file_contexts.local:

    /var/webcontent(/.*)?     system_u:object_r:httpd_sys_content_t:s0
  2. Aplique o novo tipo de arquivo à hierarquia de diretórios:

    Use o comando restorecon para aplicar o novo tipo de arquivo a toda a hierarquia de diretórios:

    sudo /sbin/restorecon -R -v /var/webcontent

Restaurando o Tipo de Arquivo Padrão

Nesta tarefa, você reverte a alteração feita na tarefa anterior, restaurando o tipo de arquivo padrão da hierarquia de diretórios /var/webcontent.

  1. Excluir a definição de tipo de arquivo existente.

    Use o comando semanage para excluir a definição do tipo de arquivo para a hierarquia de diretórios do arquivo /etc/selinux/targeted/contexts/files/file_contexts.local:

    sudo /usr/sbin/semanage fcontext -d "/var/webcontent(/.*)?"
  2. Aplique o tipo de arquivo padrão.

    Use o comando restorecon para aplicar o tipo de arquivo padrão a toda a hierarquia de diretórios:

    sudo /sbin/restorecon -R -v /var/webcontent

Rotulando Novamente um Sistema de Arquivos

Se você vir uma mensagem de erro que contenha a string file_t, isso provavelmente significa que o sistema de arquivos tem um label de contexto incorreto. Esta tarefa mostra como rotular novamente o sistema de arquivos.

  1. Crie o arquivo .autorelabel.

    Crie um arquivo vazio chamado .autorelabel na raiz do sistema de arquivos:

    sudo touch /.autorelabel

    Ou você pode executar o seguinte comando:

    sudo fixfiles -F onboot

    Ambos os métodos executam um relabel completo do SELinux do sistema de arquivos na próxima inicialização, para garantir que todos os arquivos tenham os labels de contexto corretos do SELinux de acordo com a política.

  2. Reinicializar o sistema.