Unha guía para principiantes de SELinux

Unha guía para principiantes de SELinux

Tradución do artigo elaborado para os alumnos do curso "Seguridade de Linux"

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:

  1. Aplicar — denegación de acceso baseada nas regras da política.
  2. Permiso — manter un rexistro de accións que infrinxen a política, o que estaría prohibido no modo de execución.
  3. 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/htmlporque 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

Engadir un comentario