initrc_t
, los procesos no confinados del kernel corren en el dominio kernel_t
y los usuarios no confinados deLInux corren en el dominio unconfined_t
. Para procesos no confinados, las reglas de la política de SELinux son aplicadas, pero hay reglas de la política que permiten que los procesos se ejecuten en dominios no confinados tengan casi todos los accesos. Los procesos que corren en dominios no confinados terminan usando exclusivamente las reglas DAC. Si un proceso no confinado es comprometido, SELinux no impide que un atacante gane acceso a los recursos del sistema y a los datos, pero, por supuesto, las reglas DAC todavía se usan. SELinux es una mejora de seguridad sobre las reglas DAC - no las reemplaza.
httpd
) puede acceder datos que se suponen son para ser usados por Samba, cuando se corre no confinado. Nota: en Fedora 11, el proceso httpd
corre en el dominio confinado httpd_t
por defecto. Este es un ejemplo, y no debe usarse en producción. Se 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 corre en modo obligatorio:
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.
touch /var/www/html/prueba2
para crear un archivo.
ls -Z /var/www/html/prueba2
para ver el contexto SELinux:
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/prueba2
prueba2
está etiquetado con el usuario SELinux unconfined_u
. RBAC se usa para procesos, no para archivos. Los roles no tienen un significado para archivos - el rol object_r
es el rol genérico que se usa para archivos (en almacenamiento persistente y sistemas de archivos de red). Bajo el directorio /proc/
, los archivos relacionados con procesos pueden usar el rol system_r
.[7] El tipo httpd_sys_content_t
permite al proceso httpd
acceder a este archivo.
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/prueba2
ls -Z /var/www/html/prueba2
para ver los cambios:
-rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/prueba2
service httpd status
para confirmar que el proceso httpd
no se está ejecutando:
$ /sbin/service httpd status httpd está detenido
service httpd stop
como usuario root de Linux para detener el proceso httpd
:
# /sbin/service httpd stop Deteniendo httpd: [ OK ]
httpd
corra no confinado, ejecute el siguiente comando como usuario root de Linux para cambiar el tipo de /usr/sbin/httpd
, a un tipo que no transicione a un dominio confinado:
chcon -t unconfined_exec_t /usr/sbin/httpd
ls -Z /usr/sbin/httpd
para confirmar que /usr/sbin/httpd
está etiquetado con el tipo unconfined_exec_t
:
-rwxr-xr-x root root system_u:object_r:unconfined_exec_t /usr/sbin/httpd
service httpd start
para iniciar el proceso httpd
. La salida escomo sigue si httpd
inicia con éxito:
# /sbin/service httpd start Iniciando httpd: [ OK ]
ps -eZ | grep httpd
para ver si httpd
está corriendo en el dominio unconfined_t
:
$ ps -eZ | grep httpd unconfined_u:system_r:unconfined_t7721
? 00:00:00 httpd unconfined_u:system_r:unconfined_t7723
? 00:00:00 httpd unconfined_u:system_r:unconfined_t7724
? 00:00:00 httpd unconfined_u:system_r:unconfined_t7725
? 00:00:00 httpd unconfined_u:system_r:unconfined_t7726
? 00:00:00 httpd unconfined_u:system_r:unconfined_t7727
? 00:00:00 httpd unconfined_u:system_r:unconfined_t7728
? 00:00:00 httpd unconfined_u:system_r:unconfined_t7729
? 00:00:00 httpd unconfined_u:system_r:unconfined_t7730
? 00:00:00 httpd
wget http://localhost/prueba2
. A menos que hayan cambios en la configuración predeterminada, este comando debería tener éxito:
--2009-05-07 01:41:10-- http://localhost/prueba2 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: `prueba2.1' [ <=> ]--.-K/s in 0s 2009-05-07 01:41:10 (0.00 B/s) - `prueba2.1' saved [0/0]
httpd
no tiene acceso a archivos etiquetados con el tipo samba_share_t
, httpd
se ejecuta en el dominio unconfined_t
, y termina usando las reglas DAC, como tal, el comando wget
tiene éxito. Teniendo a httpd
ejecutándose en el dominio httpd_t
, el comando wget
habría fallado.
restorecon
restaura el contexto SELinux predeterminado de los archivos. Como usuario root de Linux, ejecute el comando restorecon -v /usr/sbin/httpd
para restaurar el contexto SELinux de /usr/sbin/httpd
:
# /sbin/restorecon -v /usr/sbin/httpd restorecon reset /usr/sbin/httpd context system_u:object_r:unconfined_notrans_exec_t:s0->system_u:object_r:httpd_exec_t:s0
ls -Z /usr/sbin/httpd
para confirmar que /usr/sbin/httpd
está etiquetado con el tipo httpd_exec_t
:
$ ls -Z /usr/sbin/httpd -rwxr-xr-x root root system_u:object_r:httpd_exec_t /usr/sbin/httpd
/sbin/service httpd restart
para reiniciar httpd
. Después de reiniciar, ejecute ps -eZ | grep httpd
para confirmar que httpd
se está ejecutando en el dominio confinado httpd_t
:
# /sbin/service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ] # ps -eZ | grep httpd unconfined_u:system_r:httpd_t 8880 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8882 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8883 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8884 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8885 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8886 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8887 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8888 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8889 ? 00:00:00 httpd
rm -i /var/www/html/prueba2
para eliminar prueba2
.
httpd
, como usuario root de Linux corra el comando service httpd stop
para detener a httpd
:
# /sbin/service httpd stop Deteniendo httpd: [ OK ]
[7]
Cuando se usan otras políticas, tal como la MLS, se pueden usar también otros roles, por ejemplo el secadm_r
.