Product SiteDocumentation Site

Capítulo 4. Política Destinado

4.1. Procesos Confinados
4.2. Procesos no Confinados
4.3. Usuarios Confinados y no Confinados
La política destinada es la política predeterminada de SELinux usada en Fedora 11. Cuando la política destinada está en uso, los procesos son destinados a correr en dominios confinados, y los procesos que no son destinados a correr en un dominio corren en un dominio no confinado. Por ejemplo, por defecto, los usuarios que ingresaron corren en el dominio unconfined_t, y los procesos del sistema iniciado por init corren en el dominio initrc_t - ambos dominios están no confinados.
Unconfined domains (as well as confined domains) are subject to executable and writeable memory checks. By default, subjects running in an unconfined domain can not allocate writeable memory and execute it. This reduces vulnerability to buffer overflow attacks. These memory checks are disabled by setting Booleans, which allow the SELinux policy to be modified at runtime. Boolean configuration is discussed later.

4.1. Procesos Confinados

Casi todos los servicios que escuchan en la red se confinan en Fedora 11. También, la mayoría de los procesos que corren como usuario root de Linux y realizan tareas para los usuarios, tales como la aplicación passwd, están confinadas. Cuando un proceso se confina, corre en su propio dominio, tal como el proceso httpd ejecutándose en el domino httpd_t. Si un proceso confinado es comprometido por un atacante, dependiendo de la configuración de política de SELinux, el acceso del atacante a recursos y el posible daño que puedan causar es limitado.
El siguiente ejemplo muestra cómo previene SELinux la lectura por parte del Servidor HTTP Apache (httpd) de archivos que no se etiquetaron correctamente, tales como archivos a usar con Samba. Este es un ejemplo, y no se debe usar en producción. Asume que los paquetes httpd, wget, setroubleshoot-server y audit están instalados, que se usa la política destinada de SELinux y que SELinux está corriendo en modo obligatorio:
  1. Ejecute el comando sestatus para confirmar que SELinux está activado, se ejecuta en modo obligatorio y que la política destinada se está usando:
    $ /usr/sbin/sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /selinux
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy version:                 23
    Policy from config file:        targeted
    
    SELinux status: enabled is returned when SELinux is enabled. Current mode: enforcing is returned when SELinux is running in enforcing mode. Policy from config file: targeted is returned when the SELinux targeted policy is used.
  2. Como usuario root de Linux, ejecute el comando touch /var/www/html/prueba para crear un archivo.
  3. Ejecute el comando ls -Z /var/www/html/prueba para ver el contexto SELinux:
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/prueba
    
    Por defecto, los usuarios Linux corren no confinados en Fedora 11, razón por la cual el archivo prueba se etiqueta con el usuario SELinux unconfined_u. RBAC se usa para procesos, y no para archivos. Los roles no tienen significado para archivos - el rol object_r es un rol genérico usado para archivos (en sistemas de archivos persistentes y de red). Bajo el directorio /proc/, los archivos relacionados con procesos pueden usar el rol system_r.[6] El tipo httpd_sys_content_t permite al proceso httpd acceder a este archivo.
  4. Como usuario root de Linux, ejecute el comando service httpd start para iniciar el proceso httpd. La salida escomo sigue si httpd inicia con éxito:
    # /sbin/service httpd start
    Iniciando httpd:                                            [  OK  ]
    
  5. Cambie al directorio donde su usuario Linux tenga acceso de escritura y ejecute el comando wget http://localhost/prueba. A menos que hubieran cambios en la configuración predeterminada, este comando tiene éxito:
    --2009-05-06 23:00:01--  http://localhost/prueba
    Resolving localhost... 127.0.0.1
    Connecting to localhost|127.0.0.1|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 0 [text/plain]
    Saving to: `prueba'
    
    [ <=>                              ] 0     --.-K/s   in 0s
                    
    2009-05-06 23:00:01 (0.00 B/s) - `prueba' saved [0/0]
    
  6. El comando chcon reetiqueta archivos; sin embargo, tales cambios de etiquetas no sobreviven cuando el sistema se reetiqueta. Para que los cambios sobrevivan un reetiquetado del sistema, use el comando semanage, que se discute más adelante. Como usuario root de Linux, corra el siguiente comando para cambiar el tipo a un tipo usado por Samba:
    chcon -t samba_share_t /var/www/html/prueba
    Ejecute el comando ls -Z /var/www/html/prueba para ver los cambios:
    -rw-r--r--  root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/prueba
    
  7. Nota: los permisos de DAC actuales permiten al proceso httpd acceder al prueba. Cambie al directorio donde el usuario Linux tenga permiso de escritura y ejecute el comando wget http://localhost/prueba. A menos que hayan cambios en la configuración predeterminada, este comando fallará:
    --2009-05-06 23:00:54--  http://localhost/prueba
    Resolving localhost... 127.0.0.1
    Connecting to localhost|127.0.0.1|:80... connected.
    HTTP request sent, awaiting response... 403 Forbidden
    2009-05-06 23:00:54 ERROR 403: Forbidden.
    
  8. Como usuario root de Linux, corra el comando rm -i /var/www/html/prueba para borrar prueba.
  9. Si no necesita que corra httpd, como usuario root de Linux corra el comando service httpd stop para detener a httpd:
    # /sbin/service httpd stop
    Deteniendo httpd:                                            [  OK  ]
    
Este ejemplo muestra la seguridad adicional agregada por SELinux. Aunque las reglas de DAC permitieron al proceso httpd acceder a prueba en el paso 7, dado que estaba etiquetado con un tipo al que el proceso httpd no tenía acceso, SELinux negó el acceso. Después del paso 7, un error similar al siguiente se guarda en /var/log/messages:
May 6 23:00:54 localhost setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr"
to /var/www/html/prueba (samba_share_t). For complete SELinux messages.
run sealert -l c05911d3-e680-4e42-8e36-fe2ab9f8e654
Archivos log previos pueden usar el formato /var/log/messages.YYYYMMDD. Cuando se ejecuta syslog-ng, los archivos log previos pueden usar el formato /var/log/messages.X. Si los procesos setroubleshootd y auditd están ejecutándose, errores similares a los siguientes se registran en /var/log/audit/audit.log:
type=AVC msg=audit(1220706212.937:70): avc:  denied  { getattr } for  pid=1904 comm="httpd" path="/var/www/html/prueba" dev=sda5 ino=247576 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0  tclass=file

type=SYSCALL msg=audit(1220706212.937:70): arch=40000003 syscall=196 success=no exit=-13 a0=b9e21da0 a1=bf9581dc a2=555ff4 a3=2008171 items=0 ppid=1902 pid=1904 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
También, un error similar al siguiente se registra en /var/log/httpd/error_log:
[Wed May 06 23:00:54 2009] [error] [client 127.0.0.1] (13)Permission denied: access to /prueba denied

Nota

En Fedora 11, los paquetes setroubleshoot-server y audit se instalan por defecto. Estos paquetes incluyen los demonios setroubleshootd y auditd respectivamente. Estos demonios se ejecutan por defecto. Detener alguno de ellos provoca un cambio de en dónde se graban las negaciones de SELinux. Vaya a Sección 5.2, “Qué Archivo Log se usa” para más información.


[6] cuando se usan otras políticas, tal como MLS, se pueden usar otros roles, por ejemplo secadm_r.