Tradución do artigo elaborado para os alumnos do curso
SELinux ou Security Enhanced Linux é un mecanismo de control de acceso mellorado desenvolvido pola Axencia de Seguridade Nacional dos Estados Unidos (NSA) para evitar intrusións maliciosas. Implementa un modelo de control de acceso forzado (ou obrigatorio) (English Mandatory Access Control, MAC) enriba do modelo discrecional (ou selectivo) existente (English Discretionary Access Control, DAC), é dicir, permisos para ler, escribir e executar.
SELinux ten tres modos:
- Aplicar — denegación de acceso baseada nas regras da política.
- Permiso — manter un rexistro de accións que infrinxen a política, o que estaría prohibido no modo de execución.
- Válido - desactivación completa de SELinux.
Por defecto, a configuración está en /etc/selinux/config
Cambiando os modos de SELinux
Para descubrir o modo actual, executa
$ getenforce
Para cambiar o modo a permisivo, execute o seguinte comando
$ setenforce 0
ou, para cambiar de modo permisivo en cumprindo, executar
$ setenforce 1
Se precisa desactivar completamente SELinux, isto só se pode facer a través do ficheiro de configuración
$ vi /etc/selinux/config
Para desactivar, cambie o parámetro SELINUX do seguinte xeito:
SELINUX=disabled
Configurando SELinux
Cada ficheiro e proceso está marcado cun contexto SELinux, que contén información adicional como usuario, rol, tipo, etc. Se esta é a primeira vez que activas SELinux, primeiro terás que configurar o contexto e as etiquetas. O proceso de asignación de etiquetas e contexto coñécese como etiquetado. Para comezar a marcar, no ficheiro de configuración cambiamos o modo a permisivo.
$ vi /etc/selinux/config
SELINUX=permissive
Despois de configurar o modo permisivo, crea un ficheiro oculto baleiro na raíz co nome autorelabel
$ touch /.autorelabel
e reinicie o ordenador
$ init 6
Nota: Usamos o modo permisivo para marcar, xa que o uso do modo cumprindo pode provocar que o sistema falle durante o reinicio.
Non te preocupes se a descarga queda atascada nalgún ficheiro, a marcación leva un tempo. Unha vez completada a marca e iniciado o sistema, pode ir ao ficheiro de configuración e establecer o modo cumprindoe tamén executa:
$ setenforce 1
Agora activaches con éxito SELinux no teu ordenador.
Seguimento dos rexistros
É posible que teña atopado algúns erros durante a marcaxe ou mentres o sistema está a funcionar. Para comprobar se o teu SELinux funciona correctamente e se non bloquea o acceso a ningún porto, aplicación, etc., tes que mirar os rexistros. O rexistro de SELinux está situado en /var/log/audit/audit.log
, pero non é preciso ler todo para atopar erros. Podes usar a utilidade audit2why para atopar erros. Executa o seguinte comando:
$ audit2why < /var/log/audit/audit.log
Como resultado, recibirá unha lista de erros. Se non houbese erros no rexistro, non se mostrará ningunha mensaxe.
Configuración da política de SELinux
Unha política de SELinux é un conxunto de regras que rexen o mecanismo de seguridade de SELinux. Unha política define un conxunto de regras para un ambiente específico. Agora aprenderemos a configurar políticas para permitir o acceso a servizos prohibidos.
1. Valores lóxicos (interruptores)
Os interruptores (booleanos) permítenche cambiar partes dunha política en tempo de execución, sen ter que crear novas políticas. Permítenche facer cambios sen reiniciar ou recompilar as políticas de SELinux.
Exemplo
Digamos que queremos compartir o directorio de inicio dun usuario mediante FTP de lectura/escritura e xa o compartimos, pero cando tentamos acceder a el non vemos nada. Isto ocorre porque a política de SELinux impide que o servidor FTP lea e escriba no directorio de inicio do usuario. Necesitamos cambiar a política para que o servidor FTP poida acceder aos directorios de inicio. A ver se hai algún interruptor para isto facendo
$ semanage boolean -l
Este comando enumerará os interruptores dispoñibles co seu estado actual (activado ou desactivado) e descrición. Podes refinar a túa busca engadindo grep para atopar resultados só para ftp:
$ semanage boolean -l | grep ftp
e atoparás o seguinte
ftp_home_dir -> off Allow ftp to read & write file in user home directory
Este interruptor está desactivado, polo que habilitarémolo con setsebool $ setsebool ftp_home_dir on
Agora o noso daemon ftp poderá acceder ao directorio de inicio do usuario.
Nota: Tamén podes obter unha lista de interruptores dispoñibles sen descrición facendo getsebool -a
2. Etiquetas e contexto
Esta é a forma máis común de implementar a política de SELinux. Cada ficheiro, cartafol, proceso e porto está marcado co contexto SELinux:
- Para ficheiros e cartafoles, as etiquetas gárdanse como atributos estendidos no sistema de ficheiros e pódense ver co seguinte comando:
$ ls -Z /etc/httpd
- Para procesos e portos, a etiquetaxe é xestionada polo núcleo, e podes ver estas etiquetas do seguinte xeito:
proceso
$ ps –auxZ | grep httpd
porto
$ netstat -anpZ | grep httpd
Exemplo
Agora vexamos un exemplo para comprender mellor as etiquetas e o contexto. Digamos que temos un servidor web que, en lugar dun directorio /var/www/html/ использует /home/dan/html/
. SELinux considerará isto unha violación da política e non poderás ver as túas páxinas web. Isto débese a que non establecemos o contexto de seguranza asociado aos ficheiros HTML. Para ver o contexto de seguranza predeterminado, use o seguinte comando:
$ ls –lz /var/www/html
-rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
Aquí temos httpd_sys_content_t
como contexto para ficheiros html. Necesitamos establecer este contexto de seguranza para o noso directorio actual, que actualmente ten o seguinte contexto:
-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
Un comando alternativo para comprobar o contexto de seguranza dun ficheiro ou directorio:
$ semanage fcontext -l | grep '/var/www'
Tamén usaremos semanage para cambiar o contexto unha vez que atopemos o contexto de seguridade correcto. Para cambiar o contexto de /home/dan/html, execute os seguintes comandos:
$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html
Despois de que se cambie o contexto usando semanage, o comando restorecon cargará o contexto predeterminado para ficheiros e directorios. O noso servidor web agora poderá ler ficheiros do cartafol /home/dan/html
porque o contexto de seguranza deste cartafol cambiouse a httpd_sys_content_t
.
3. Crear políticas locais
Pode haber situacións nas que os métodos anteriores non che sirvan de nada e obteñas erros (avc/denial) en audit.log. Cando isto ocorre, cómpre crear unha política local. Podes atopar todos os erros usando audit2why, como se describe anteriormente.
Podes crear unha política local para resolver erros. Por exemplo, obtemos un erro relacionado con httpd (apache) ou smbd (samba), analizamos os erros e creamos unha política para eles:
apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy
Aquí http_policy
и smb_policy
son os nomes das políticas locais que creamos. Agora necesitamos cargar estas políticas locais creadas na política de SELinux actual. Isto pódese facer do seguinte xeito:
$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp
As nosas políticas locais foron descargadas e xa non deberíamos recibir ningún avc ou denail en audit.log.
Este foi o meu intento de axudarche a comprender SELinux. Espero que despois de ler este artigo se sinta máis cómodo con SELinux.
Fonte: www.habr.com