Capítulo 1. Começando com a SELinux
1.1. Introdução à SELinux
O Security Enhanced Linux (SELinux) oferece uma camada adicional de segurança do sistema. O SELinux responde fundamentalmente à pergunta: May <subject> do <action> to <object>?, por exemplo May a web server access files in users' home directories?
A política de acesso padrão baseada no usuário, grupo e outras permissões, conhecida como Controle de Acesso Discricionário (DAC), não permite que os administradores de sistema criem políticas de segurança abrangentes e de granulação fina, tais como restringir aplicações específicas a apenas visualizar arquivos de log, enquanto permite que outras aplicações anexem novos dados aos arquivos de log.
A SELinux implementa o Controle de Acesso Obrigatório (MAC). Cada recurso de processo e sistema tem uma etiqueta de segurança especial chamada SELinux context. Um contexto SELinux, às vezes referido como SELinux label, é um identificador que abstrai os detalhes em nível de sistema e se concentra nas propriedades de segurança da entidade. Isto não apenas fornece uma maneira consistente de referenciar objetos na política SELinux, mas também elimina qualquer ambiguidade que possa ser encontrada em outros métodos de identificação. Por exemplo, um arquivo pode ter vários nomes de caminho válidos em um sistema que faz uso de suportes de encadernação.
A política SELinux utiliza estes contextos em uma série de regras que definem como os processos podem interagir uns com os outros e os vários recursos do sistema. Por padrão, a política não permite qualquer interação, a menos que uma regra conceda acesso explícito.
Lembre-se de que as regras da política SELinux são verificadas após as regras do DAC. As regras de política SELinux não são usadas se as regras do DAC negarem o acesso primeiro, o que significa que nenhuma negação do SELinux é registrada se as regras tradicionais do DAC impedirem o acesso.
Os contextos SELinux têm vários campos: usuário, função, tipo e nível de segurança. A informação do tipo SELinux é talvez a mais importante quando se trata da política SELinux, como a regra política mais comum que define as interações permitidas entre processos e recursos do sistema utiliza tipos SELinux e não o contexto SELinux completo. Os tipos de SELinux terminam com _t
. Por exemplo, o nome do tipo para o servidor web é httpd_t
. O contexto do tipo para arquivos e diretórios normalmente encontrados em /var/www/html/
é httpd_sys_content_t
. O tipo de contexto para arquivos e diretórios normalmente encontrado em /tmp
e /var/tmp/
é tmp_t
. O contexto do tipo para as portas do servidor web é http_port_t
.
Há uma regra de política que permite ao Apache (o processo do servidor web funcionando como httpd_t
) acessar arquivos e diretórios com um contexto normalmente encontrado em /var/www/html/
e outros diretórios de servidores web (httpd_sys_content_t
). Não há uma regra de permissão na política para arquivos normalmente encontrados em /tmp
e /var/tmp/
, portanto, o acesso não é permitido. Com o SELinux, mesmo que o Apache esteja comprometido, e um script malicioso ganhe acesso, ele ainda não é capaz de acessar o diretório /tmp
.
Figura 1.1. Um exemplo de como a SELinux pode ajudar a administrar o Apache e a MariaDB de forma segura.
Como o esquema anterior mostra, o SELinux permite que o processo Apache em execução como httpd_t
acesse o diretório /var/www/html/
e nega o mesmo processo para acessar o diretório /data/mysql/
porque não há regra de permissão para os contextos do tipo httpd_t
e mysqld_db_t
. Por outro lado, o processo MariaDB rodando como mysqld_t
pode acessar o diretório /data/mysql/
e o SELinux também nega corretamente o processo com o tipo mysqld_t
para acessar o diretório /var/www/html/
rotulado como httpd_sys_content_t
.
Recursos adicionais
Para mais informações, consulte a seguinte documentação:
-
A página de homem
selinux(8)
e as páginas de homem listadas pelo comandoapropos selinux
. -
Páginas de homem listadas pelo comando
man -k _selinux
quando o pacoteselinux-policy-doc
é instalado. - O Livro Colorido SELinux ajuda você a entender melhor os conceitos básicos da SELinux.
- SELinux Wiki FAQ