Edición 1.3
Copyright © 2009 Red Hat, Inc.
Negrita monoespaciado
Para ver el contenido del archivomy_next_bestselling_novel
en su directorio actual de trabajo, escriba el comandocat my_next_bestselling_novel
en el intérprete de comandos de shell y pulse Enter para ejecutar el comando.
Pulse Enter para ejecutar el comando.Pulse Control+Alt+F1 para cambiar a la primera terminal virtual. Pulse Control+Alt+F7 para volver a su sesión de Ventanas-X.
Negrita-monoespaciado
. Por ejemplo:
Las clases de archivo relacionadas incluyenfilename
para sistema de archivos,file
para archivos ydir
para directorios. Cada clase tiene su propio conjunto asociado de permisos.
Seleccionar Preferencias de Ratón. En la pestaña de Botones, haga clic en la cajilla ratón de mano izquierda y luego haga clic en para cambiar el botón principal del ratón de la izquierda a la derecha (adecuando el ratón para la mano izquierda).desde la barra del menú principal para lanzarPara insertar un caracter especial en un archivo gedit, seleccione desde la barra del menú principal . Luego, desde la barra del menú elija mapa de caracteres, teclee el nombre del caracter en el campo de Búsqueda y haga clic en . El caracter buscado se resaltará en la Tabla de caracteres. Haga doble clic en este caracter resaltado para colocarlo en el campo de Texto para copiar y luego haga clic en el botón de . Ahora regrese a su documento y elija desde la barra de menú de gedit.
Itálicas-negrita monoespaciado
o Itálicas-negrita proporcional
Para conectar a una máquina remota utilizando ssh, tecleessh
en un intérprete de comandos de shell. Si la máquina remota esnombredeusuario
@dominio.nombre
example.com
y su nombre de usuario en esa máquina es john, tecleessh john@example.com
.El comandomount -o remount
remonta el sistema de archivo llamado. Por ejemplo, para volver a montar el sistema de archivofile-system
/home
, el comando esmount -o remount /home
.Para ver la versión de un paquete actualmente instalado, utilice el comandorpm -q
. Éste entregará el resultado siguiente:paquete
.
paquete-versión-lanzamiento
cuando el servidor Apache HTTP acepta solicitudes, envía procesos hijos o hilos para manejarlos. Este grupo de procesos hijos o hilos se conoce como un server-pool. Bajo el servidor HTTP de Apache 2.0, la responsabilidad para crear o mantener estos server-pool se resume en un grupo de módulos llamado Módulos de multi-procesamiento (MPMs). A diferencia de otros módulos, sólo un módulo del grupo MPM puede ser cargado por el servidor HTTP de Apache.
romano monoespaciado
y presentada así:
libros Escritorio documentación borradores mss fotos cosas svn libros_pruebas Escritorio1 descargas imágenes notas scripts svgs
romano monoespaciado
, pero se presentan y resaltan de la siguiente manera:
package org.jboss.book.jca.ex1; import javax.naming.InitialContext; public class ExClient { public static void main(String args[]) throws Exception { InitialContext iniCtx = new InitialContext(); Object ref = iniCtx.lookup("EchoBean"); EchoHome home = (EchoHome) ref; Echo echo = home.create(); System.out.println("Created Echo"); System.out.println("Echo.echo('Hello') = " + echo.echo("Hello")); } }
ls -l
para ver los permisos de archivos:
$ ls -l archivo1 -rwxrw-r-- 1 usuario1 grupo1 0 2009-04-30 15:42 archivo1
rwx
, controlan el acceso que el usuario Linux usuario1
(en este caso, el dueño) tiene para el archivo1
. Los siguientes tres bits de permisos, rw-
, controlan el acceso que el grupo Linux grupo1
tiene para el archivo1
. Los últimos tres bits de permisos, r--
, controlan el acceso que todo el mundo tiene para el archivo1
, que incluyen a todos los usuarios y procesos.
ls -Z
:
$ ls -Z file1 -rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
unconfined_u
), un rol (object_r
), un tipo (user_home_t
), y un nivel (s0
). Esta información se usa para tomar decisiones sobre el control de acceso. Con DAC, el acceso se controla basado sólo en los IDs de usuarios y grupos de Linux. Las reglas de políticas de SELinux se chequean después de las reglas DAC. Las reglas de políticas de SELInux no se usan si las reglas DAC niegan el acceso al principio.
sudo
y su
, así como previene la ejecución de archivos y aplicaciones en sus directorios de inicio (home)- si se configura, esto evita que los usuarios ejecuten archivos maliciosos desde sus directorios de inicio.
named
y por otros procesos.
[1] "Integración del Soporte Flexible para Políticas de Seguridad en el Sistema Operativo Linux", de Peter Loscocco y Stephen Smalley. Este paper fue preparado originalmente por la Agencia de Seguridad Nacional y está, consecuentemente, en el dominio público. Vaya al paper original para mas detalles y el documento tal como fue lanzado la primera vez. Cualquier edición y cambio fue hecho por Murray McAllister.
[2] "Consiguiendo Objetivos de Seguridad Críticos con Linux de Seguridad Mejorada", por Peter Loscocco y Stephen Smalley. Este paper fue preparado originalmente por la Agencia de Seguridad Nacional y está, consecuentemente, en el dominio público. Vaya al paper original para detalles y por el documento tal como fue lanzado la primera vez. Cualquier edición y cambio fue hecho por Murray McAllister.
[3] Archivos de texto que incluyen información, tal como el mapeo de nombre de equipo a dirección IP, que usan los servidores de DNS.
[4] Cox, Mark. "Informe de riesgo: Tres años del Linux para Empresas de Red Hat 4". Publicado el 26 Febrero 2008. Accedido el 28 Agosto 2008: http://www.redhatmagazine.com/2008/02/26/risk-report-three-years-of-red-hat-enterprise-linux-4/.
[5] Marti, Don. "Un cinturón de seguridad para software servidor: SELinux bloquea explotaciones del mundo real". Publicado el 24 Febrero 2008. Accedido el 28 Agosto 2008: http://www.linuxworld.com/news/2008/022408-selinux.html?page=1.
ls -Z
para ver el contexto SELinux de archivos y directorios:
$ ls -Z file1 -rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
semanage login -l
como usuario root de Linux para ver una lista de mapeos entre cuentas de usuarios Linux y SELinux:
# /usr/sbin/semanage login -l Login Name SELinux User MLS/MCS Range __default__ unconfined_u s0-s0:c0.c1023 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023
Nombre de Ingreso
lista los usuarios Linux, y la columna Usuario SELinux
lista qué a usuario SELinux es mapeado un usuario Linux. Para procesos, el usuario SELinux limita qué roles y niveles son accesibles. La última columna, Rango MLS/MCS
, es el nivel usado por la Seguridad Multi Nivel (MLS) y por la Seguridad Multi Categoría (MCS). Los niveles se describen brevemente más adelante.
s0-s0
es lo mismo que s0
). Cada nivel es un par sensible a categorías, donde las categorías son opcionales. Si no hay categorías, el nivel se escribe como sensibilidad:conjunto-de-categoría. Si no hay categorías, se escribe como sensibilidad.
c0.c3
es lo mismo que c0,c1,c2,c3
. El archivo /etc/selinux/targeted/setrans.conf
mapea los niveles (s0:c0
) a una forma legible al humano (CompanyConfidential
). No edite setrans.conf
con un editor de texto: use semanage
para hacer cambios. Vaya a la página de manual de semanage(8) para más información. En Fedora 11, la política destinada obglica MCS, y en MCS hay sólo una sensibilidad, la s0
. MCS en Fedora 11 soporta 1024 categorías distintas: c0
a c1023
. s0-s0:c0.c1023
es la sensibilidad s0
y autorizado para todas las categorías.
entrypoint
en el nuevo dominio. Los permisos entrypoint
se usan en las políticas de SELinux, y controlan qué aplicaciones pueden usarse para ingresar a un dominio. El siguiente ejemplo muestra una transición de dominio.
passwd
. El ejecutable /usr/bin/passwd
está etiquetado con el tipo passwd_exec_t
:
$ ls -Z /usr/bin/passwd -rwsr-xr-x root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd
/etc/shadow
, que está etiquetado con el tipo shadow_t
:
$ ls -Z /etc/shadow -r-------- root root system_u:object_r:shadow_t:s0 /etc/shadow
passwd_t
no pueden leer y escribir archivos etiquetados con el tipo shadow_t
. El tipo shadow_t
sólo se aplica a archivos que necesitan un cambio de contraseñas. Esto incluye a /etc/gshadow
, /etc/shadow
, y sus archivos de respaldo.
passwd_t
tiene permiso de entrypoint
al tipo passwd_exec_t
.
/usr/bin/passwd
, el proceso shell del usuario transiciona al dominio passwd_t
. Con SELinux, dado que la acción por defecto es negar, y existe una regla que permite (entre otras cosas) a aplicaciones que corran en el dominio passwd_t
acceder a archivos etiquetados con el tipo shadow_t
, se le permite a passwd acceder a /etc/shadow
, y actualizar la contraseña del usuario.
passwd_t
accedan objetos etiquetados con el tipo de archivo shadow_t
, otras reglas de política de SELinux se deben cumplir para que el sujeto pueda transicionar a un nuevo dominio. En este ejemplo, la Obligación de Tipo asegura:
passwd_t
sólo se puede ingresar ejecutando una aplicación con la etiqueta del tipo passwd_exec_t
; sólo pueden ejecutar desde bibliotecas compartidas autorizadas, tales como las del tipo lib_t
; y no pueden ejecutar ninguna otra aplicación.
passwd_t
, pueden escribir en archivos con la etiqueta del tipo shadow_t
. Aún si otros procesos corren con privilegios de superusuario, esos procesos no podrán escribir archivos etiquetados con el tipo shadow_t
, porque no están corriendo en el dominio passwd_t
.
passwd_t
. Por ejemplo, el proceso sendmail
corriendo en el dominio sendmail_t
no tiene una razón legítima para ejecutar passwd
; por lo tanto, no puede transicionar nunca al dominio passwd_t
.
passwd_t
sólo pueden leer y escribir a tipos autorizados, tales como archivos etiquetados con los tipos etc_t
o shadow_t
. Esto impide a la aplicación passwd de ser modificada para leer o escribir en archivos arbitrarios.
ps -eZ
para ver los contextos de SELinux para los procesos. Por ejemplo:
/usr/bin/passwd
. No ingrese una nueva contraseña.
ps -eZ | grep passwd
. La salida es similar a la siguiente:
unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 13212 pts/1 00:00:00 passwd
Ctrl+C
para cancelar la aplicación passwd.
/usr/bin/passwd
(etiquetada con el tipo passwd_exec_t
) se ejecuta, el proceso shell del usuario transiciona al dominio passwd_t
. Recuerde: el tipo define un dominio para procesos y un tipo para archivos.
ps -eZ
para ver los contextos SELinux de los procesos en ejecución. El siguiente es un ejemplo limitado de la salida, y puede cambiar en su sistema:
system_u:system_r:setroubleshootd_t:s0 1866 ? 00:00:08 setroubleshootd system_u:system_r:dhcpc_t:s0 1869 ? 00:00:00 dhclient system_u:system_r:sshd_t:s0-s0:c0.c1023 1882 ? 00:00:00 sshd system_u:system_r:gpm_t:s0 1964 ? 00:00:00 gpm system_u:system_r:crond_t:s0-s0:c0.c1023 1973 ? 00:00:00 crond system_u:system_r:kerneloops_t:s0 1983 ? 00:00:05 kerneloops system_u:system_r:crond_t:s0-s0:c0.c1023 1991 ? 00:00:00 atd
system_r
se usa para procesos de sistema, como los demonios. El tipo obligatorio los separa luego en dominios.
id -Z
para ver el contexto SELinux asociado con su usuario Linux:
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
unconfined_u
, corriendo con el rol unconfined_r
y en el dominio unconfined_t
. s0-s0
es un rango MLS, que en este caso, es el mismo que s0
. Las categorías a las que el usuario tiene acceso se definen por c0.c1023
, que son todas las categorías (c0
a c1023
).
unconfined_t
, y los procesos del sistema iniciado por init corren en el dominio initrc_t
- ambos dominios están no confinados.
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.
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:
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/prueba
para crear un archivo.
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
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.
service httpd start
para iniciar el proceso httpd
. La salida escomo sigue si httpd
inicia con éxito:
# /sbin/service httpd start Iniciando httpd: [ OK ]
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]
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
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
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.
rm -i /var/www/html/prueba
para borrar prueba
.
httpd
, como usuario root de Linux corra el comando service httpd stop
para detener a httpd
:
# /sbin/service httpd stop Deteniendo httpd: [ OK ]
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
/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)
/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
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.
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 ]
semanage login -l
como usuario root de Linux:
# /usr/sbin/semanage login -l Login Name SELinux User MLS/MCS Range __default__ unconfined_u s0-s0:c0.c1023 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023
__default__
de SELinux (el cual se mapea al usuario SELinux unconfined_u
). Lo siguiente define el mapeo por defecto:
__default__ unconfined_u s0-s0:c0.c1023
unconfined_u
. Asume que el usuario root corre no confinado, como es por defecto en Fedora 11:
/usr/sbin/useradd usuarionuevo
para crear un nuevo usuario Linux con nombre usuarionuevo.
passwd newuser
command to assign a password to the Linux newuser user:
# passwd usuarionuevo Changing password for user usuarionuevo. New UNIX password:Enter a password
Retype new UNIX password:Enter the same password again
passwd: all authentication tokens updated successfully.
id -Z
para ver el contexto de un usuario Linux:
[usuarionuevo@localhost ~]$ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
/usr/sbin/userdel -r usuarionuevo
como usuario root de Linux para eliminarlo, junto con su directorio de inicio.
unconfined_t
a su propio dominio confinado, los usuarios Linux no confinados están sujetos a restricciones de ese dominio confinado. El beneficio de seguridad de esto es que, aunque un usuario Linux corra no confinado, la aplicación permanece confinada, y por lo tanto, la explotación de una brecha en la aplicación está limitada por la política. Nota: esto no protege al sistema del usuario. En su defecto, el usuario y el sistema están siendo protegidos de posibles daños causados por una brecha en la aplicación.
Usuario | Dominio | Sistema de Ventanas X | su y sudo | Ejecute en el directorio de inicio y /tmp/ | Red |
---|---|---|---|---|---|
guest_u | guest_t | no | no | opcional | no |
xguest_u | xguest_t | si | no | opcional | sólo Firefox |
user_u | user_t | si | no | opcional | si |
staff_u | staff_t | si |
sólo sudo
| opcional | si |
guest_t
, xguest_t
y user_t
sólo pueden ejecutar aplicaciones con ID de usuario (setuid) si la política de SELinux lo permite (tal como passwd
). No podrán ejecutar su
y /usr/bin/sudo
guest_t
no tienen acceso a la red, y sólo pueden ingresar vía una terminal (incluyendo ssh
; pueden ingresaro por ssh
, pero no se pueden ssh
conectar a otro sistema).
xguest_t
es con Firefox conectándose a páginas web.
xguest_t
, user_t
y staff_t
pueden ingresar vía el Sistema de Ventanas X o por una terminal.
staff_t
no tienen permisos para ejecutar aplicaciones con /usr/bin/sudo
. Estos permisos deben ser configurados por un administrador.
guest_t
y xguest_t
no pueden ejecutar aplicaciones en sus directorios de inicio o en /tmp/
, previniéndolos de ejecutar aplicaciones (que hereden los permisos de los usuarios) en directorios a los que tienen acceso de escritura. Esto ayuda a prevenir que aplicaciones maliciosas modifiquen archivos de los usuarios.
user_t
y staff_t
pueden ejecutar aplicaciones en sus directorios de inicio y en /tmp/
. Vaya a Sección 6.6, “Booleanos para que los Usuarios Ejecuten Aplicaciones” para información sobre permitir y evitar que los usuarios ejecuten aplicaciones en sus directorios de inicio y en /tmp/
.
mount
; montaje de sistemas de archivos NFS; y cómo preservar contextos de SELinux cuando se copia y compacta archivos y directorios.
semanage
, restorecon
, audit2allow
, semodule
, load_policy
y setsebool
, para la operación y administración de SELinux.
system-config-selinux
, una herramienta gráfica para la administración de SELinux.
/usr/share/selinux/devel/policygentool
y /usr/share/selinux/devel/policyhelp
, así como archivos de política ejemplos. Este paquete fue mezclado con el paquete selinux-policy.
policy
: provee las políticas de SELinux. Para la política destinada, instale selinux-policy-targeted. Para MLS, instale selinux-policy-mls. En Fedora 8, la política estricta fue mezclada con la política destinada, permitiendo a los usuarios confinados y no confinados coexistir en el mismo sistema.
sealert
(que se provee en este paquete).
apol
, seaudit
y sediffx
. El paquete setools-console provee las herramientas de línea de comando seaudit-report
, sechecker
, sediff
, seinfo
, sesearch
, findcon
, replcon
y indexcon
. Vaya a la página de las SEHerramientas de Tresys Technology para información sobre estas herramientas.
avcstat
, getenforce
, getsebool
, matchpathcon
, selinuxconlist
, selinuxdefcon
, selinuxenabled
, setenforce
, togglesebool
.
s0-s0:c0.c1023
, a una forma legible como SystemLow-SystemHigh
. Este paquete no se instala por defecto.
yum install nombre-de-paquete
. Por ejemplo, para instalar el paquete mcstrans, ejecute el comando yum install mcstrans
. Para actualizar todos los paquetes instalados en Fedora 11, ejecute el comando yum update
.
yum
para administrar paquetes.
audit2allow -M
.
setroubleshootd
y auditd
respectivamente. Estos demonios se ejecutan por defecto.
/var/log/audit/audit.log
:
type=AVC msg=audit(1223024155.684:49): avc: denied { getattr } for pid=2000 comm="httpd" path="/var/www/html/archivo1" dev=dm-0 ino=399185 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:samba_share_t:s0 tclass=file
setroubleshootd
está ejecutándose, lo que es por defecto, los mensajes de negación desde /var/log/audit/audit.log
se traducen a una forma más fácil de leer en /var/log/messages
:
May 7 18:55:56 localhost setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/archivo1 (samba_share_t). For complete SELinux messages. run sealert -l de7e30d6-5488-466d-a606-92c9f40d316d
Daemon | Log Location |
---|---|
auditd on | /var/log/audit/audit.log |
auditd off; rsyslogd on | /var/log/messages |
setroubleshootd, rsyslogd, and auditd on | /var/log/audit/audit.log . Easier-to-read denial messages also sent to /var/log/messages |
auditd
, rsyslogd
, y setroubleshootd
para que inicien automáticamente al arrancar, corra los siguientes comandos como usuario root de Linux:
/sbin/chkconfig --levels 2345 auditd on
/sbin/chkconfig --levels 2345 rsyslog on
/sbin/chkconfig --levels 345 setroubleshoot on
service nombre-de-servicio
status
para chequear si estos servicios se están ejecutando, por ejemplo:
$ /sbin/service auditd status
auditd (pid 1318
) is running...
nombre-de-servicio
está detenido
), use el comando service nombre-de-servicio
start
como usuario root de Linux para iniciarlos. Por ejemplo:
# /sbin/service setroubleshoot start Starting setroubleshootd: [ OK ]
/etc/selinux/config
es el archivo de configuración principal de SELinux. Controla el modo de SELinux y la política de SELinux a usar:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
SELINUX=enforcing
SELINUX
pone el modo en el que corre SELinux. SELinux tiene tres modos: obediente, permisivo y deshabilitado. Cuando se usa modo obediente, la política de SELinux es aplicada y SELinux niega el acceso basándose en las reglas de políticas de SELinux. Los mensajes de negación se guardan. Cuando se usa modo permisivo, la política de SELinux no es obediente. Los mensajes son guardados. SELinux no niega el acceso, pero se guardan las negaciones de acciones que hubieran sido negadas si SELinux estaba en modo obediente. Cuando se usa el modo deshabilitado, SELinux está deshabilitado (el módulo de SELinux no se registra con el kernel de Linux), y sólo se usan las reglas DAC.
SELINUXTYPE=targeted
SELINUXTYPE
pone la política SELinux a usar. La política Destinada es la predeterminada. Sólo cambie esta opción si quiere usar la política MLS. Para usar la política MLS, instale el paquete selinux-policy-mls; configure SELINUXTYPE=mls
en /etc/selinux/config
; y reinicie su sistema.
/usr/sbin/getenforce
o /usr/sbin/sestatus
para chequear el estado de SELinux. El comando getenforce
devuelve Obediente
, Permisivo
, o Deshabilitado
. El comando getenforce
devuelve Obediente
cuando SELinux está habilitado (las reglas de la política de SELinux son aplicadas):
$ /usr/sbin/getenforce Enforcing
getenforce
devuelve Permissive
cuando SELinux está activado, pero las reglas de políticas de SELinux no están en obligatorio, y sólo se usan las reglas DAC. El comando getenforce
devuelve Disabled
si SELinux está deshabilitado.
sestatus
devuelve el estado de SELinux y la política de SELinux que 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.
SELINUX=disabled
se configura en /etc/selinux/config
:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
getenforce
devuelve Disabled
:
$ /usr/sbin/getenforce Disabled
rpm -qa | grep selinux
, rpm -q policycoreutils
y rpm -qa | grep setroubleshoot
para confirmar que los paquetes de SELinux están instalados. esta guía asume que los siguientes paquetes están instalados: selinux-policy-targeted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils, setroubleshoot, setroubleshoot-server, setroubleshoot-plugins. Si estos paquetes no están instalados, como usuario root de Linux, debe instalarlos con el comando yum install nombre-de-paquete
. Los siguientes paquetes son opcionales: policycoreutils-gui, setroubleshoot, selinux-policy-devel y mcstrans.
/sbin/chkconfig --list setroubleshoot
para confirmar que setroubleshootd
se inicia cuando el sistema corre en el nivel de ejecución [10] 3, 4, y 5:
$ /sbin/chkconfig --list setroubleshoot setroubleshoot 0:off 1:off 2:off 3:on 4:on 5:on 6:off
/sbin/chkconfig --levels 345 setroubleshoot on
. Esto hace que setroubleshootd
se inicie automáticamente cuando el sistema esté en los niveles de ejecución 3, 4 y 5.
SELINUX=permissive
en /etc/selinux/config
:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=permissive # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
reboot
para reiniciar el sistema. Durante el siguiente arranque, los sistemas de archivo son etiquetados. El proceso etiqueta todos los archivos con un contexto de SELinux:
*** Warning -- SELinux targeted policy relabel is required. *** Relabeling could take a very long time, depending on file *** system size and speed of hard drives. ****
*
en la línea de abajo representa 1000 archivos que han sido etiquetados. En el ejemplo de arriba, cuatro caracteres *
representan 4000 archivos etiquetados. El tiempo que toma reetiquetar todos los archivos depende del número de archivos del sistema, y la velocidad de los discos rígidos. En sistemas modernos, este proceso puede tomar 10 minutos.
grep "SELinux está negando" /var/log/messages
como usuario root de Linux para confirmar que SELinux no negó acciones durante la última reiniciada. Si SELinux no negó acciones durante el último arranque, este comando no devuelve nada. Vaya a Capítulo 7, Solución a Problemas para información para resolver problemas si SELinux negó el acceso durante el arranque.
/var/log/messages
, configure SELINUX=enforcing
en /etc/selinux/config
:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
getenforce
devuelve Enforcing
:
$ /usr/sbin/getenforce Enforcing
/usr/sbin/semanage login -l
para ver el mapeo entre usuarios de SELinux y de Linux. La salida debe ser como la siguiente:
Login Name SELinux User MLS/MCS Range __default__ unconfined_u s0-s0:c0.c1023 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023
El usuario SELinux nombre-de-usuario
ya está definido
si es que aparecen, donde nombre-de-usuario
puede ser unconfined_u
, guest_u
, o xguest_u
:
/usr/sbin/semanage usuario -a -S targeted -P usuario -R "unconfined_r system_r" -r s0-s0:c0.c1023 unconfined_u
/usr/sbin/semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 __default__
/usr/sbin/semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 root
/usr/sbin/semanage usuario -a -S targeted -P usuario -R guest_r guest_u
/usr/sbin/semanage usuario -a -S targeted -P usuario -R xguest_r xguest_u
SELINUX=disabled
en /etc/selinux/config
:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
getenforce
devuelve Disabled
:
$ /usr/sbin/getenforce Disabled
/usr/sbin/setenforce
para cambiar entre los modos obediente y permisivo. Los cambios hechos con /usr/sbin/setenforce
no sobreviven a una reiniciada. Para cambiar a modo obediente, como usuario root de Linux, ejecute el comando /usr/sbin/setenforce 1
. Para cambiar a modo permisivo, ejecute el comando /usr/sbin/setenforce 0
. Use el comando /usr/sbin/getenforce
para ver el modo de SELinux actual.
semanage boolean -l
como usuario root de Linux. El siguiente ejemplo no lista todos los Booleanos:
# /usr/sbin/semanage boolean -l SELinux boolean Description ftp_home_dir -> off Allow ftp to read and write files in the user home directories xen_use_nfs -> off Allow xen to manage nfs files xguest_connect_network -> on Allow xguest to configure Network Manager
SELinux boolean
lista los nombres de Booleanos. La columna Description
lista si el booleano está activo (on) o inactivo (off) y lo que hacen.
ftp_home_dir
está apagado, impidiendo al demonio FTP (vsftpd
) la lectura y escritura de archivos en los directorios de inicio de los usuarios:
ftp_home_dir -> off Permite a ftp leer y escribir al directorio de inicio de los usuarios
getsebool -a
lista los Booleanos, ya sea que estén activos o inactivos, pero no da una descripción de cada uno. El siguiente ejemplo no lista todos los booleanos:
$ /usr/sbin/getsebool -a allow_console_login --> off allow_cvs_read_shadow --> off allow_daemons_dump_core --> on
getsebool nombre-de-booleano
para listar solamente el estado del booleano nombre-de-booleano
:
$ /usr/sbin/getsebool allow_console_login allow_console_login --> off
$ getsebool allow_console_login allow_cvs_read_shadow allow_daemons_dump_core allow_console_login --> off allow_cvs_read_shadow --> off allow_daemons_dump_core --> on
setsebool nombre-de-booleano
x
activa o desactiva Booleanos, donde nombre-de-booleano
es un nombre de Booleano, y x
es on
para activar, u off
para desactivar.
httpd_can_network_connect_db
:
httpd_can_network_connect_db
está apagado, impidiendo a los scripts y módulos del Servidor HTTP Apache conectarse a servidores de bases de datos:
$ /usr/sbin/getsebool httpd_can_network_connect_db httpd_can_network_connect_db --> off
setsebool httpd_can_network_connect_db on
como usuario root de Linux.
getsebool httpd_can_network_connect_db
para verificar que el Booleano está activado:
$ /usr/sbin/getsebool httpd_can_network_connect_db httpd_can_network_connect_db --> on
setsebool -P boolean-name
on
como usuario root de Linux:
# /usr/sbin/setsebool -P httpd_can_network_connect_db on
setsebool httpd_can_network_connect_db off
. Para que los cambios sean persistentes entre reiniciadas, ejecute el comando setsebool -P httpd_can_network_connect_db off
.
nfs_t
. También, por defecto, los compartidos de Samba en el lado del cliente se etiquetan con el contexto predeterminado definido por la política. En políticas comúnes, este contexto predeterminado usa el tipo cifs_t
.
nfs_t
o cifs_t
. Esto puede prevenir que los sistemas de archivo etiquetados con estas etiquetas se monten y sean leídos o exportados por otros servicios. Hay Booleanos que se pueden poner en 1 o 0 para controlar qué servicios pueden acceder los tipos nfs_t
y cifs_t
.
setsebool
y semanage
se deben ejecutar como usuario root de Linux. El comando setsebool -P
hace persistentes a los cambios. No use la opción -P
si no quiere que los cambios persistan entre reiniciadas:
nfs_t
):
/usr/sbin/setsebool -P httpd_use_nfs on
cifs_t
):
/usr/sbin/setsebool -P httpd_use_cifs on
/usr/sbin/setsebool -P samba_share_nfs on
vsftpd
)/usr/sbin/setsebool -P allow_ftpd_use_nfs on
/usr/sbin/setsebool -P allow_ftpd_use_cifs on
/usr/sbin/semanage boolean -l | grep nfs
/usr/sbin/semanage boolean -l | grep cifs
ls -Z
:
$ ls -Z archivo1 -rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
unconfined_u
), un rol (object_r
), un tipo (user_home_t
) y un nivel (s0
). Esta información se usa para tomar decisiones sobre el control de acceso. En sistemas DAC, el control de acceso se basa en los IDs de usuario y grupo de Linux. Las reglas de la política de SELinux se chequean después de las reglas DAC. Las reglas de la política de SELinux no se usan si las reglas DAC niegan el acceso antes.
chcon
, semanage fcontext
, y restorecon
.
chcon
cambia el contexto SELinux de los archivos. Estos cambios no sobreviven un reetiquetado del sistema de archivo, o el comando /sbin/restorecon
. La política de SELinux controla si los usuarios pueden modificar el contexto SELinux de algún archivo. Cuando se usa chcon
, los usuarios proveen toda o parte del contexto SELinux a cambiar. Un tipo de archivo incorrecto es una causa común de negación de acceso de SELinux.
chcon -t tipo
nombre-de-archivo
para cambiar el tipo de archivo, donde tipo
es el tipo, por ejemplo httpd_sys_content_t
, y nombre-de-archivo
es un nombre de archivo o de directorio.
chcon -R -t tipo
nombre-de-directorio
para cambiar el tipo de un directorio y su contenido, donde tipo
es el tipo, por ejemplo httpd_sys_content_t
, y nombre-de-directorio
es un nombre de directorio.
cd
sin argumentos para cambiar a su directorio de inicio.
touch archivo1
para crear un archivo nuevo. Use el comando ls -Z archivo1
para ver el contexto de SELinux del archivo1
:
$ ls -Z archivo1 -rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
archivo1
incluye el usuario unconfined_u
, el rol object_r
, el tipo user_home_t
, y el nivel s0
. Para una descripción de cada parte del contexto SELinux, vaya a Capítulo 3, Contextos de SELinux.
chcon -t samba_share_t archivo1
para cambiar el tipo a samba_share_t
. La opción -t
sólo cambia el tipo. Vea el cambio con ls -Z archivo1
:
$ ls -Z archivo1 -rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:samba_share_t:s0 archivo1
/sbin/restorecon -v archivo1
para restaurar el contexto de SELinux del archivo1
. Use la opción -v
para ver qué cambia:
$ /sbin/restorecon -v archivo1 restorecon reset archivo1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:user_home_t:s0
samba_share_t
, se restaura al tipo correcto user_home_t
. Cuando se usa la política destinada (la política SELinux predeterminada en Fedora 11), el comando /sbin/restorecon
lee los archivos en el directorio /etc/selinux/targeted/contexts/files/
para ver qué contexto de SELinux deben tener los archivos.
archivo1
fuera un directorio.
/var/www/html/
):
mkdir /web
para crear un directorio nuevo, y luego el comando touch /web/archivo{1,2,3}
para crear 3 archivos vacíos (archivo1
, archivo2
y archivo3
). El directorio /web/
y los archivos en él son etiquetados con el tipo default_t
:
# ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web # ls -lZ /web -rw-r--r-- root root unconfined_u:object_r:default_t:s0 archivo1 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 archivo2 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 archivo3
chcon -R -t httpd_sys_content_t /web/
para cambiar el tipo del directorio /web/
(y su contenido) a httpd_sys_content_t
:
# chcon -R -t httpd_sys_content_t /web/ # ls -dZ /web/ drwxr-xr-x root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/ # ls -lZ /web/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo3
/sbin/restorecon -R -v /web/
para restaurar los contextos de SELinux predeterminados:
# /sbin/restorecon -R -v /web/ restorecon reset /web context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0 restorecon reset /web/archivo2 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0 restorecon reset /web/archivo3 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0 restorecon reset /web/archivo1 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
chcon
.
/usr/sbin/semanage fcontext
cambia el contexto SELinux de los archivos. Cuando se usa la política destinada, los cambios hechos con este comando se agregan al archivo /etc/selinux/targeted/contexts/files/file_contexts
si los cambios so para archivos que están en file_contexts
, se agregan a file_contexts.local
para archivos nuevos y directorios, como sería al crear un directorio /web/
nuevo. setfiles
, que se usa cuando el sistema de archivo es reetiquetado, y /sbin/restorecon
, que restaura los contextos de SELinux predeterminados, leen estos archivos, Lo que significa que los cambios hechos por /usr/sbin/semanage fcontext
son persistentes, aún si el sistema de archivo es reetiquetado. La política de SELinux controla si los usuarios pueden modificar el contexto de SELinux para cualquier archivo dado.
/usr/sbin/semanage fcontext -a opciones
nombre-de-archivo
|nombre-de-directorio
, recuerde usar la dirección completa del archivo o del directorio.
/sbin/restorecon -v nombre-de-archivo
|nombre-de-directorio
para aplicar los cambios de contexto.
touch /etc/archivo1
para crear un archivo nuevo. Por defecto, los archivos recién creados en el directorio /etc/
se etiquetan con el tipo etc_t
:
# ls -Z /etc/archivo1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/archivo1
/usr/sbin/semanage fcontext -a -t samba_share_t /etc/archivo1
para cambiar el tipo del archivo1
a samba_share_t
. La opción -a
agrega un registro nuevo, y la opción -t
define un tipo (samba_share_t
). Nota: al ejecutar este comando no se cambia directamente el tipo - el archivo1
todavía es del tipo etc_t
:
# /usr/sbin/semanage fcontext -a -t samba_share_t /etc/archivo1 # ls -Z /etc/archivo1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/archivo1
/usr/sbin/semanage fcontext -a -t samba_share_t /etc/archivo1
agrega la siguiente entrada a /etc/selinux/targeted/contexts/files/file_contexts.local
:
/etc/archivo1 unconfined_u:object_r:samba_share_t:s0
/sbin/restorecon -v /etc/archivo1
para cambiar el tipo. Dado que el comando semanage
agregó una entrada a file.contexts.local
para /etc/archivo1
, el comando /sbin/restorecon
cambia el tipo a samba_share_t
:
# /sbin/restorecon -v /etc/archivo1 restorecon reset /etc/archivo1 context unconfined_u:object_r:etc_t:s0->system_u:object_r:samba_share_t:s0
rm -i /etc/archivo1
para borrar el archivo1
.
/usr/sbin/semanage fcontext -d /etc/archivo1
para eliminar el contexto agregado para /etc/archivo1
. Cuando el contexto se elimina, ejecutando restorecon
cambia el tipo a etc_t
, en vez de samba_share_t
.
mkdir /web
para crear un directorio nuevo. Este directorio se etiqueta con el tipo default_t
:
# ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
-d
de ls
hace que ls
liste la información de un directorio, en vez de su contenido, y la opción -Z
hace que ls
muestre el contexto de SELinux (en este ejemplo, unconfined_u:object_r:default_t:s0
).
/usr/sbin/semanage fcontext -a -t httpd_sys_content_t /web
para cambiar el tipo de /web/
a httpd_sys_content_t
. La opción -a
agrega un nuevo registro, y la opción -t
define un tipo (httpd_sys_content_t
). Nota: la ejecución de este comando no cambia el tipo directamente - /web/
todavía tiene la etiqueta de tipo default_t
:
# /usr/sbin/semanage fcontext -a -t httpd_sys_content_t /web # ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
/usr/sbin/semanage fcontext -a -t httpd_sys_content_t /web
agrega la siguiente entrada a /etc/selinux/targeted/contexts/files/file_contexts.local
:
/web unconfined_u:object_r:httpd_sys_content_t:s0
/sbin/restorecon -v /web
para cambiar el tipo. Como el comando semanage
agregó una entrada a file.contexts.local
para /web
, el comando /sbin/restorecon
cambia el tipo a httpd_sys_content_t
:
# /sbin/restorecon -v /web restorecon reset /web context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
/web/
, los archivos y directorios creados en el directorio /web/
fueron etiquetados con el tipo httpd_sys_content_t
.
/usr/sbin/semanage fcontext -d /web
para borrar el contexto agregado para /web/
.
/sbin/restorecon -v /web
para restaurar el contexto predeterminado de SELinux.
/var/www/html/
):
mkdir /web
para crear un directorio nuevo, y luego el comando touch /web/archivo{1,2,3}
para crear 3 archivos vacíos (archivo1
, archivo2
y archivo3
). El directorio /web/
y los archivos en él son etiquetados con el tipo default_t
:
# ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web # ls -lZ /web -rw-r--r-- root root unconfined_u:object_r:default_t:s0 archivo1 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 archivo2 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 archivo3
/usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
para cambiar el tipo del directorio /web/
junto con los archivos dentro de él, a httpd_sys_content_t
. La opción -a
agrega un registro nuevo, y la opción -t
define un tipo(httpd_sys_content_t). La expresión regular "/web(/.*)?"
hace que el comando semanage
aplique los cambios al directorio /web/
, así como a los archivos dentro de él. Nota: la ejecución de este comando no cambia el tipo directamente - /web/
y los archivos dentro de él todavía tienen la etiqueta del tipo default_t
:
# ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web # ls -lZ /web -rw-r--r-- root root unconfined_u:object_r:default_t:s0 archivo1 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 archivo2 -rw-r--r-- root root unconfined_u:object_r:default_t:s0 archivo3
/usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
agrega una entrada a /etc/selinux/targeted/contexts/files/file_contexts.local
:
/web(/.*)? system_u:object_r:httpd_sys_content_t:s0
/sbin/restorecon -R -v /web
para cambiar elt ipo del directorio /web/
, junto con los archivos dentro de él. La opción -R
significa recursivo, es decir, todos los archivos y directorios dentro del directorio /web/
se etiquetarán con el tipo httpd_sys_content_t
. Dado que el comando semanage
agregó una entrada en file.contexts.local
para /web(/.*)?
, el comando /sbin/restorecon
los tipos a httpd_sys_content_t
:
# /sbin/restorecon -R -v /web restorecon reset /web context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /web/archivo2 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /web/archivo3 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /web/archivo1 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
/web/
se etiquetarán con el tipo httpd_sys_content_t
.
/usr/sbin/semanage fcontext -d "/web(/.*)?"
para eliminar el contexto agregado para "/web(/.*)?"
.
/sbin/restorecon -R -v /web
para restaurar el contexto predeterminado de SELinux.
/usr/sbin/semanage fcontext -a -t httpd_sys_content_t /prueba
. El directorio /prueba/
no tiene que existir. Este comando agrega el siguiente contexto a /etc/selinux/targeted/contexts/files/file_contexts.local
:
/prueba system_u:object_r:httpd_sys_content_t:s0
/usr/sbin/semanage fcontext -d nombre-de-archivo
|nombre-de-directorio
, donde nombre-de-archivo
|nombre-de-directorio
es la primera parte en file_contexts.local
. El siguiente es un ejemplo de un contexto en file_contexts.local
:
/prueba system_u:object_r:httpd_sys_content_t:s0
/prueba
. Para evitar que el directorio /prueba/
se etiquete con httpd_sys_content_t
después de ejecutar /sbin/restorecon
, o después de un reetiquetado del sistema, ejecute el siguiente comando como usuario root de Linux para eliminar el contexto de file_contexts.local
:
/usr/sbin/semanage fcontext -d /prueba
/web(/.*)?
, use las comillas para encerrar la expresión regular:
/usr/sbin/semanage fcontext -d "/web(/.*)?"
/usr/sbin/semanage
.
/usr/sbin/semanage fcontext -a
, use la dirección completa del archivo o directorio para evitar etiquetar mal los archivos después de un reetiquetado del sistema de archivo, o después ejecutar el comando /sbin/restorecon
.
file_t
. Este debería ser el único uso de este tipo, por lo que los archivos sin un contexto en el disco se podrían distinguir en la política, y generalmente mantenerse inaccesibles a dominios confinados. El tipo file_t
no debería existir en sistemas de archivo correctamente etiquetados, porque todos los archivos dado que todos los archivos en un sistema corriendo SELinux deberían tener un contexto de SELinux, y el tipo file_t
no sebería usarse en la configuración de contexto de archivos [11].
default_t
se usa en archivos que no coinciden con ningún otro patrón en la configuración de contexto de archivo, por lo que tales archivos se pueden distinguir de aquellos que no tienen un contexto en el disco, y generalmente mantenerse inaccesibles a los dominios confinados. Si crea un directorio de alto nivel, tal como /midir/
, este directorio puede ser etiquetado con el tipo default_t
. Si los servicios necesitan acceder a tal directorio, actualice la configuración de contextos de archivo para esta ubicación. Vaya a Sección 5.7.2, “Cambios Persistentes: semanage fcontext” para más detalles sobre agragado de un contexto para la configuración de contexto de archivos.
mount -o context
para superponer los atributos extendidos actuales, o para especificar uno distinto y por defecto para sistemas de archivo que no dan soporte a atributos extendidos. Esto es útil si no confía en que un sistema de archivo provea los atributos correctos, por ejemplo, medios removibles en sistemas múltiples. El comando mount -o context
también se puede ussar para dar soporte al etiquetado de sistemas de archivos que no soportan atributos extendidos, tales como la Tabla de Ubicación de Archivos (FAT) o los sistemas de archivo NFS. El contexto especificado con la opción context
no se escribe al disco: los contextos originales son preservados, y se ven cuando se lo monta sin la opción context
(si el sistema de archivo ya tenía sopoorte para atributos extendidos).
mount -o context=SELinux_user:role:type:level
cuando monte el sistema de archivo deseado. Los cambios de contexto no se graban en el disco. Por defecto, los montajes NFS en el lado del cliente se etiquetan con un contexto distinto definido por una política para sistemas de archivo NFS. En políticas comunes, este contexto predeterminado usa el tipo nfs_t
. Sin las opciones de montaje adicionales, esto podría evitar el que sistemas de archivo NFS sean compartidos vía otros servicios, como el Servidor HTTP Apache. El siguiente ejemplo monta un sistema de archivo NFS para que se pueda acceder a través del Servidor HTTP Apache:
# mount servidor:/export /local/mount/point -o\ context="system_u:object_r:httpd_sys_content_t:s0"
-o contexto
; sin embargo, dado que los cambios del contexto no se escriben en el disco en estas situaciones, el contexto especificado por la opción -o contexto
sólo se mantiene si se usa la misma opción en la siguiente montada, y si además se especifica el mismo contexto.
-o context
, use el usuario SELinux system_u
y el rol object_r
, y concéntrese en el tipo. Si no está usando la política MLS o seguridad multi-categoría, use el nivel s0
.
context
, los cambios de contexto (por usuarios y procesos) son prohibidos. Por ejemplo, ejecutando chcon
en un sistema de archivo montado con la opción context
resulta en un error de Operación no soportada
.
file_t
. Si se desea usar un contexto predeterminado diferente, monte el sistema de archivo con la opcióndefcontext
.
/dev/sda2
) en el directorio recién creado /prueba/
. Asume que no hay reglas en /etc/selinux/targeted/contexts/files/
que definan el contexto del directorio /prueba/
:
# mount /dev/sda2 /prueba/ -o defcontext="system_u:object_r:samba_share_t:s0"
defcontext
define que system_u:object_r:samba_share_t:s0
es "el contexto de seguridad predeterminado para archivos no etiquetados"[12].
/prueba/
) del sistema de archivo se trata como si estuviera etiquetado con el contexto especificado por defcontext
(esta etiqueta no se guarda en el disco). Esto afecta el etiquetado de archvios creados en /prueba/
: los archivos nuevos heredan el tipo samba_share_t
, y estas etiquetas se guardan en el disco.
/prueba/
mientras el sistema de archivo estaba montado con la opción defcontext
retendrán sus etiquetas.
nfs_t
. Dependiendo de la configuración de la política, los servicios, como el Servidor HTTP Apache y MySQL, pueden no poder leer archivos etiquetados con el tipo nfs_t
. Esto puede prevenir que los sistemas de archivos etiquetados con este tipo se monten y sean leídos o exportados por otros servicios.
contexto
cuando monte para anular el tipo nfs_t
. Use la siguiente opción de contexto para montar sistemas de archivo NFS para que puedan compartirse vía el Servidor HTTP Apache:
mount servidor:/export /local/punto/de/montaje -o\ context="system_u:object_r:httpd_sys_content_t:s0"
context
sólo se retiene si la opción context
se usa en el siguiente montaje, y si el mismo contexto se especifica.
contexto
, los Booleanos se pueden activar para permitir a los servicios acceder sistemas de archivos etiquetados con el tipo nfs_t
. Vaya a Sección 5.6.3, “Booleanos para NFS y CIFS” para instrucciones sobre configuración de Booleanos para permitir a servicios acceder al tipo nfs_t
.
/export
, que tiene dos subdirectorios, web/
and database/
. El siguiente comando intenta dos montajes desde un único export NFS e intenta sobreescribir el contexto para cada uno:
# mount servidor:/export/web /local/web -o\ context="system_u:object_r:httpd_sys_content_t:s0" # mount servidor:/export/database /local/database -o\ context="system_u:object_r:mysqld_db_t:s0"
/var/log/messages
:
kernel: SELinux: montaje inválido. Similar superblock, configuración de seguridad diferente para (dev 0:15, tipo nfs)
-o nosharecache,context
. El siguiente ejemplo monta montajes múltiples de un único export de NSF, con un contexto diferente para cada montaje (permitiendo un único acceso de servicio a cada uno):
# mount servidor:/export/web /local/web -o\ nosharecache,context="system_u:object_r:httpd_sys_content_t:s0" # mount servidor:/export/database /local/database -o\ nosharecache,context="system_u:object_r:mysqld_db_t:s0"
server:/export/web
se monta localmente en /local/web/
, con todos los archivos etiquetados con el tipo httpd_sys_content_t
, lo que permite el acceso al Servidor HTTP Apache. server:/export/database
está montado localmente en /local/database
, con los archivos etiquetados con el tipo mysqld_db_t
, lo que permite a MySQL el acceso. Estos cambios de tipo no se escriben en el disco.
nosharecache
le permiten montar el mismo subdirectorio de un exportado varias veces con distintos contextos (por ejemplo, montar /export/web
varias veces). No monte el mismo directorio de un exportado varias veces con distintos contextos, dado que esto crea un montado solapado, donde los archivos se pueden acceder con dos contextos diferentes.
/etc/fstab
o un mapa de automontador, y use el contexto deseado como una opción de montaje. El siguiente ejemplo agrega una entrada en /etc/fstab
para un montaje de contexto NFS:
servidor:/export /local/montaje/ nfs context="system_u:object_r:httpd_sys_content_t:s0" 0 0
user_home_t
:
$ touch archivo1 $ ls -Z archivo1 -rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
/etc/
, el archivo nuevo se crea de acuerdo a las reglas de etiquetado predeterminado del directorio /etc/
. El copiado de un archivo (sin opciones adicionales) puede no preservar el contexto original:
$ ls -Z archivo1 -rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1 # cp archivo1 /etc/ $ ls -Z /etc/archivo1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/archivo1
archivo1
se copia a /etc/
, si /etc/archivo1
no existe, /etc/archivo1
se crea como un archivo nuevo. Como se muestra en el ejemplo de arriba, /etc/archivo1
se etiqueta con el tipo etc_t
, de acuerdo con las reglas de etiquetado predeterminadas.
cp
para preservar el contexto del archivo original, tal como --preserve=context
. La política de SELinux puede prevenir que se preserver los contextos al copiar.
cp
, si no se dan opciones, el tipo se hereda desde el directorio padre destino:
$ touch archivo1 $ ls -Z archivo1 -rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1 $ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/ # cp archivo1 /var/www/html/ $ ls -Z /var/www/html/archivo1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/archivo1
archivo1
se crea en el directorio de inicio del usuario, y se etiqueta con el tipo user_home_t
. El directorio /var/www/html/
está etiquetado con el tipo httpd_sys_content_t
, como se muestra con el comando ls -dZ /var/www/html/
. Cuando el archivo1
se copia a /var/www/html/
, hereda el tipo httpd_sys_content_t
, como se muestra con el comandols -Z /var/www/html/archivo1
.
cp --preserve=context
para preservar los contextos cuando se copia:
$ touch archivo1 $ ls -Z archivo1 -rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1 $ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/ # cp --preserve=context archivo1 /var/www/html/ $ ls -Z /var/www/html/archivo1 -rw-r--r-- root root unconfined_u:object_r:user_home_t:s0 /var/www/html/archivo1
archivo1
se crea en el directorio de inicio del usuario, y se etiqueta con el tipo user_home_t
. El directorio /var/www/html/
está etiquetado con el tipo httpd_sys_content_t
, como se muestra con el comando ls -dZ /var/www/html/
. Usando la opción --preserve=context
se mantienen los contextos de SELinux durante operaciones de copia. Como se muestra con el comando ls -Z /var/www/html/archivo1
, el tipo user_home_t
del archivo1
fue preservado cuando el archivo se copió a /var/www/html/
.
cp -Z
para cambiar el contexto destino de copia. El siguiente ejemplo se realizó en el directorio de inicio del usuario:
$ touch archivo1 $ cp -Z system_u:object_r:samba_share_t:s0 archivo1 archivo2 $ ls -Z archivo1 archivo2 -rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1 -rw-rw-r-- usuario1 grupo1 system_u:object_r:samba_share_t:s0 archivo2 $ rm archivo1 archivo2
-Z
. Sin la opción -Z
, archivo2
se etiquetaría con el contexto unconfined_u:object_r:user_home_t
.
# touch /etc/archivo1 # ls -Z /etc/archivo1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/archivo1 # touch /tmp/archivo2 # ls -Z /tmp/archivo2 -rw-r--r-- root root unconfined_u:object_r:user_tmp_t:s0 /tmp/archivo2 # cp /tmp/archivo2 /etc/archivo1 # ls -Z /etc/archivo1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/archivo1
/etc/archivo1
, etiquetado con el tipo etc_t
, y /tmp/archivo2
, etiquetado con el tipo user_tmp_t
. Ell comando cp /tmp/archivo2 /etc/archivo1
sobreescribe archivo1
con archivo2
. Después de copiar, el comando ls -Z /etc/archivo1
muestra a archivo1
etiquetado con el tipo etc_t
, en vez del user_tmp_t
de /tmp/archivo2
que reemplazó a /etc/archivo1
.
/var/www/html/
, que es usado por el Servidor HTTP Apache. Dado que el archivo es movido, no hereda el contexto SELinux correcto:
cd
sin ningún argumento para cambiar a su directorio de inicio. Una vez ahí, ejecute el comando touch archivo1
para crear un archivo. Este archivo se etiqueta con el tipo user_home_t
:
$ ls -Z archivo1 -rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
ls -dZ /var/www/html/
para ver el contexto de SELinux del directorio /var/www/html/
:
$ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
/var/www/html/
se etiqueta con el tipo httpd_sys_content_t
. Los archivos y directorios creados bajo el directorio /var/www/html/
heredan este tipo, y como tal, son etiquetados con este tipo.
mv archivo1 /var/www/html/
para mover el archivo1
al directorio /var/www/html/
. Dado que el archivo es movido, mantiene su tipo user_home_t
actual:
# mv archivo1 /var/www/html/ # ls -Z /var/www/html/archivo1 -rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 /var/www/html/archivo1
user_home_t
. Si todos los archivos de una página web se etiquetaron con user_home_t
, u otro tipo al que el Servidor HTTP Apache no puede leer, el permiso es negado cuando intente accederlo vía Firefox o algún otro navegador web basado en texto.
mv
puede resultar en el contexto SELinux incorrecto, evitando que los procesos tales como el Servidor HTTP Apache y Samba puedan acceder a tales archivos y directorios.
/usr/sbin/matchpathcon
para chequear si los archivos y directorios tienen el contexto SELinux correcto. De la página de manual de matchpathcon(8): "matchpathcon
consulta la política del sistema y muestra el contexto de seguridad predeterminado asociado con una dirección de archivo."[13]. El siguiente ejemplo muestra el uso del comando /usr/sbin/matchpathcon
para verificar que los archivos dentro del directorio /var/www/html/
están etiquetados correctamente:
touch /var/www/html/archivo{1,2,3}
para crear tres archivos (archivo1
, archivo2
y archivo3
). Estos heredan el tipo httpd_sys_content_t
del directorio /var/www/html/
:
# touch /var/www/html/archivo{1,2,3} # ls -Z /var/www/html/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo3
chcon -t samba_share_t /var/www/html/archivo1
para cambiar el tipo del archivo1
a samba_share_t
. Nota: El Servidor HTTP Apache no puede leer archivos o directorios etiquetados con el tipo samba_share_t
.
/usr/sbin/matchpathcon
-V
compara el contexto SELinux actual con el contexto predeterminado correcto dado por la política de SELinux. Ejecute el comando /usr/sbin/matchpathcon -V /var/www/html/*
para chequear todos los archivos del directorio /var/www/html/
:
$ /usr/sbin/matchpathcon -V /var/www/html/* /var/www/html/archivo1 tiene el contexto unconfined_u:object_r:samba_share_t:s0, debería ser system_u:object_r:httpd_sys_content_t:s0 /var/www/html/archivo2 verified. /var/www/html/archivo3 verified.
/usr/sbin/matchpathcon
explica que el archivo1
está etiquetado con el tipo samba_share_t
, pero debería estar etiquetado con el tipo httpd_sys_content_t
:
/var/www/html/archivo1 tiene el contexto unconfined_u:object_r:samba_share_t:s0, debería tener system_u:object_r:httpd_sys_content_t:s0
archivo1
, como usuario root de Linux corra el comando /sbin/restorecon -v /var/www/html/archivo1
:
# /sbin/restorecon -v /var/www/html/archivo1 restorecon reset /var/www/html/archivo1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
tar
no retiene los atributos extendidos por defecto. Dado que los contextos SELinux se almacenan en los atributos extendidos, los contextos se pueden perder cuando se compactan archivos. Use tar --selinux
para crear archivos que retengan los contextos. Si un archivo Tar contiene archivos sin los atributos extendidos, o si quiere que los atributos extendidos coincidan con los predeterminados del sistema, ejecute el archivado a través de /sbin/restorecon
:
$ tar -xvf archivo.tar
| /sbin/restorecon -f -
/sbin/restorecon
.
touch /var/www/html/archivo{1,2,3}
para crear tres archivos (archivo1
, archivo2
y archivo3
). Estos heredan el tipo httpd_sys_content_t
del directorio /var/www/html/
:
# touch /var/www/html/archivo{1,2,3} # ls -Z /var/www/html/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo3
cd /var/www/html/
para cambiar al directorio /var/www/html/
. Una vez en este directorio, como usuario root de Linux ejecute el comando tar --selinux -cf prueba.tar archivo{1,2,3}
para crear un archivo Tar con nombre prueba.tar
.
mkdir /prueba
para crear un directorio nuevo, y luego ejecute el comando chmod 777 /prueba/
para permitir a los usuarios acceso total al directorio /prueba/
.
cp /var/www/html/prueba.tar /prueba/
para copiar el archivo prueba.tar
en el directorio /prueba/
.
cd /prueba/
para cambiar al directorio /test/
. Una vez ahí, ejecute el comando tar -xvf prueba.tar
para extraer el archivo Tar.
ls -lZ /prueba/
para ver los contextos SELinux. El tipo httpd_sys_content_t
fue retenido, en vez de haberse cambiado al default_t
, lo que hubiera pasado si la opción --selinux
no se hubiera usado:
$ ls -lZ /prueba/ -rw-r--r-- usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 archivo1 -rw-r--r-- usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 archivo2 -rw-r--r-- usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 archivo3 -rw-r--r-- usuario1 grupo1 unconfined_u:object_r:default_t:s0 prueba.tar
/prueba/
no se necesita más, como usuario root de Linux ejecute el comando rm -ri /prueba/
para eliminarlo, así como todos los archivos en él.
tar
, tal como la opción --xattrs
para retener todos los atributos extendidos.
star
no retiene los atributos extendidos por defecto. Dado que los contextos SELinux se almacenan en los atributos extendidos, los contextos se pueden perder cuando se crean esos archivos. Use star -xattr -H=exustar
para crear archivos que retengan los contextos. El paquete star no se instala por defecto. Para instalar star
, ejecute el comando yum install star
como usuario root de Linux.
touch /var/www/html/archivo{1,2,3}
para crear tres archivos (archivo1
, archivo2
y archivo3
). Estos heredan el tipo httpd_sys_content_t
del directorio /var/www/html/
:
# touch /var/www/html/archivo{1,2,3} # ls -Z /var/www/html/ -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo2 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo3
cd /var/www/html/
para cambiar al directorio /var/www/html/
. Una vez en este directorio, como usuario root de Linux ejecute el comando star -xattr -H=exustar -c -f=prueba.star archivo{1,2,3}
para crear un archivo Star llamado prueba.star
:
# star -xattr -H=exustar -c -f=prueba.star archivo{1,2,3} star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).
mkdir /prueba
para crear un directorio nuevo, y luego ejecute el comando chmod 777 /prueba/
para permitir a los usuarios acceso total al directorio /prueba/
.
cp /var/www/html/prueba.star /prueba/
para copiar el archivo prueba.star
al directorio /prueba/
.
cd /prueba/
para cambiar al directorio /prueba/
. Una vez ahí, ejecute el comando star -x -f=prueba.star
para extraer el archivo Star:
$ star -x -f=prueba.star star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).
ls -lZ /prueba/
para ver los contextos SELinux. El tipo httpd_sys_content_t
fue retenido, en vez de haberse cambiado al default_t
, lo que hubiera pasado si la opción --selinux
no se hubiera usado:
$ ls -lZ /prueba/ -rw-r--r-- usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 archivo1 -rw-r--r-- usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 archivo2 -rw-r--r-- usuario1 grupo1 unconfined_u:object_r:httpd_sys_content_t:s0 archivo3 -rw-r--r-- usuario1 grupo1 unconfined_u:object_r:default_t:s0 prueba.star
/prueba/
no se necesita más, como usuario root de Linux ejecute el comando rm -ri /prueba/
para eliminarlo, así como todos los archivos en él.
star
ya no se necesita, como usuario root de Linux, ejecute el comando yum remove star
para eliminar el paquete.
star
.
[8] Brindle, Joshua. "Re: blurb for fedora setools packages" Email para Murray McAllister. 1 Noviembre 2008. Cualquier edición o cambio en esta versión fue hecha por Murray McAllister.
[9] Administración de Software con yum, escrito por Stuart Ellis, editado por Paul W. Frields, Rodrigo Menezes y Hugo Cisneiros.
[10] Vaya a http://en.wikipedia.org/wiki/Runlevel para información sobre los niveles de ejecución.
[11]
Los archivos en /etc/selinux/targeted/contexts/files/
definen los contextos de los archivos y directorios. Los archivos en este directorio son accedidos por restorecon
y por setfiles
para restaurar al valor predeterminado los contextos de los archivos y directorios.
[12] Morris, James. "Etiquetado de Sistemas de Archivos en SELinux". Publicado el 1 Octubre 2004. Accedido el 14 Octubre 2008: http://www.linuxjournal.com/article/7426.
[13] La página de manual matchpathcon(8), tal como se incluyó en el paquete libselinux-utils en Fedora, fue escrita por Daniel Walsh. Cualquier edición o cambio en esta versión fue hecha por Murray McAllister.
su
y sudo
para volverse el usuario root de Linux. Esto ayuda a proteger el sistema del usuario. Vaya a Sección 4.3, “Usuarios Confinados y no Confinados” para información adicional sobre usuarios confinados en Fedora 11.
semanage login -l
para ver el mapeo entre los usuarios de Linux y los usuarios de SELinux:
# /usr/sbin/semanage login -l Login Name SELinux User MLS/MCS Range __default__ unconfined_u s0-s0:c0.c1023 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023
__default__
por defecto (que se mapea al usuario SELinux unconfined_u
). Cuando se crea un usuario Linux con el comando useradd
, si no se especifica ninguna opcion, son mapeados al usuario SELinux unconfined_u
. Lo siguiente define el mapeo por defecto:
__default__ unconfined_u s0-s0:c0.c1023
unconfined_u
corren en el dominio unconfined_t
. Esto se ve ejecutando el comando id -Z
luego de haber ingresado como el usuario Linux que se mapea a unconfined_u
:
$ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
unconfined_t
, se aplican las reglas de la política de SELinux, pero las reglas de políticas que existen para usuarios Linux que corren en el dominio unconfined_t
permiten casi todos los accesos. Si los usuarios Linux no confinados ejecutan una aplicación que la política de SELinux define pueden transicionar desde el dominio unconfined_t
a su propio dominio confinado, los usuarios Linux no confinados todavía pueden ser sujetos a restricciones del dominio confinado. El beneficio de seguridad de esto es que, aunque el usuario Linux corre en un dominio confinado, la aplicación permanece confinada, y por lo tanto, la explotación de una brecha en la aplicación se puede limitar por la política. Nota: esto no protege al sistema del usuario. En su lugar, el usuario y el sistema están siendo protegido de posibles daños causados en alguna debilidad en la aplicación.
useradd
, use la opción -Z
para especificar a qué usuario SELinux se debe mapear. El siguiente ejemplo crea un usuario Linux nuevo, useruuser, y mapea ese usuario al usuario SELinux user_u
. Los usuarios Linux mapeados al usuario SELinux user_u
corren en el dominio user_t
. En este dominio, los usuarios Linux no pueden correr aplicaciones setuid a menos que la política de SELinux lo permita (tal como passwd
), y tampoco pueden correr su
o sudo
, lo que evita que se puedan volver usuarios root de Linux con estos comandos.
/usr/sbin/useradd -Z user_u useruuser
para crear el usuario Linux nuevo (useruuser) que se mapeará al usuario SELinux user_u
.
semanage login -l
para ver el mapeo entre el usuario Linux useruuser
y user_u
:
# /usr/sbin/semanage login -l Login Name SELinux User MLS/MCS Range __default__ unconfined_u s0-s0:c0.c1023 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023 useruuser user_u s0
passwd useruuser
para asignar una contraseña para el usuario useruuser de Linux:
# passwd useruuser Cambiando la contraseña del usuario useruuser. Nueva contraseña de UNIX:Ingrese una contraseña
Reingrese la nueva contraseña de UNIX:Ingrese la misma contraseña de nuevo
passwd: todos los tokens actualizados exitosamente.
user_u
), y configura el contexto SELinux resultante. El shell del usuario Linux es luego lanzado con este contexto. Corra el comando id -Z
para ver el contexto de un usuario Linux:
[useruuser@localhost ~]$ id -Z user_u:user_r:user_t:s0
/usr/sbin/userdel -r useruuser
como usuario root de Linux para borrarlo junto con su directorio de inicio.
unconfined_u
(el comportamiento predeterminado), y desea cambiar le usuario SELinux al que se mapea, use el comando semanage login
. El siguiente ejemplo crea un usuario de Linux nuevo llamado usuarionuevo, luego lo mapea al usuario SELinux user_u
:
/usr/sbin/useradd usuarionuevo
para crear un nuevo usuario (usuarionuevo). Dado que este usuario usa el mapeo por defecto, no aparece en la salida de /usr/sbin/semanage login -l
:
# /usr/sbin/semanage login -l Login Name SELinux User MLS/MCS Range __default__ unconfined_u s0-s0:c0.c1023 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023
user_u
de SELinux, corra el siguiente comando como usuario root de Linux:
/usr/sbin/semanage login -a -s user_u usuarionuevo
-a
agrega un registro nuevo y la opción -s
especifica el usuario SELinux al que mapea el usuario Linux. El último argumento usuarionuevo
, es el usuario Linux al que quiere que se mapee el usuario SELinux especificado.
user_u
, corra el comando semanage login -l
como usuario root de Linux:
# /usr/sbin/semanage login -l Login Name SELinux User MLS/MCS Range __default__ unconfined_u s0-s0:c0.c1023 usuarionuevo user_u s0 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023
passwd newuser
command to assign a password to the Linux newuser user:
# passwd usuarionuevo Cambiando la contraseña del usuario usuarionuevo. Nueva contraseña de UNIX:Ingrese una contraseña
Reingrese la nueva contraseña de UNIX:Ingrese la misma contraseña de nuevo
passwd: todos los tokens de autenticación se actualizaron exitosamente.
id -Z
para ver el contexto SELinux de usuarionuevo:
[usuarionuevo@localhost ~]$ id -Z user_u:user_r:user_t:s0
userdel -r usuarionuevo
como usuario root de Linux, junto con su directorio de inicio. También, el mapeo del usuario Linux usuarionuevo y user_u
se elimina:
# /usr/sbin/userdel -r usuarionuevo # /usr/sbin/semanage login -l Login Name SELinux User MLS/MCS Range __default__ unconfined_u s0-s0:c0.c1023 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023
__default__
por defecto (que se mapea al usuario SELinux unconfined_u
). Si quiere que los usuarios nuevos de Linux y los usuarios Linux no mapeados específicamente a un usuario SELinux sean confinados por defecto, cambie el mapeo predeterminado con el comando semanage login
.
unconfined_u
a user_u
:
/usr/sbin/semanage login -m -S targeted -s "user_u" -r s0 __default__
semanage login -l
como usuario root de Linux para verificar que el ingreso __default__
se mapea a user_u
:
# /usr/sbin/semanage login -l Login Name SELinux User MLS/MCS Range __default__ user_u s0 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023
semanage login -l
, se mapean a user_u
, según el ingreso __default__
.
__default__
al usuario SELinux unconfined_u
:
/usr/sbin/semanage login -m -S targeted -s "unconfined_u" -r\ s0-s0:c0.c1023 __default__
yum install xguest
para instalar el paquete xguest. Instale las dependencias requeridas.
getenforce
para confirmar que SELinux está funcionando en modo obediente:
$ /usr/sbin/getenforce Enforcing
Invitado
a GDM. Para ingresar, haga clic en la cuenta Invitado
:
/tmp/
, a los que tienen acceso de escritura, lo que ayuda a evitar que aplicaciones con brechas o maliciosas puedan modificar archivos del usuario. En Fedora 11, por defecto, los usuarios Linux en los dominios guest_t
y xguest_t
no pueden ejecutar aplicaciones en los directorios de inicio o en /tmp/
; however, por defecto, los usuarios Linux en los dominios user_t
and staff_t
si pueden.
setsebool
. El comando setsebool
se debe usar con el usuario root de Linux. El comando setsebool -P
hace los cambios persistentes. No use la opción -P
si no quiere que los cambios persistan entre reiniciadas:
guest_t
que ejecuten aplicaciones en sus directorios de inicio y en /tmp/
:
/usr/sbin/setsebool -P allow_guest_exec_content on
xguest_t
ejecutar aplicaciones en sus directorios inicios y /tmp/
:
/usr/sbin/setsebool -P allow_xguest_exec_content on
user_t
ejecuten aplicaciones en sus directorios de inicio y /tmp/
:
/usr/sbin/setsebool -P allow_user_exec_content off
staff_t
ejecuten aplicaciones en sus directorios de inicio y en /tmp/
:
/usr/sbin/setsebool -P allow_staff_exec_content off
audit2allow
.
Daemon | Log Location |
---|---|
auditd on | /var/log/audit/audit.log |
auditd off; rsyslogd on | /var/log/messages |
setroubleshootd, rsyslogd, and auditd on | /var/log/audit/audit.log . Easier-to-read denial messages also sent to /var/log/messages |
setroubleshootd
y auditd
están ejecutándose, se muestra una estrella amarilla y una advertencia cuando SELinux deniega el acceso:
Prohibido
No tiene permiso para acceder el archivo xx
en este servidor
/var/log/messages
y /var/log/audit/audit.log
la cadena de los errores "SELinux está negando"
y "negado"
respectivamente. Esto se puede hacer con los siguientes comandos como usuario root de Linux:
grep "SELinux está previniendo" /var/log/messages
grep "denegado" /var/log/audit/audit.log
/var/www/html/
para un sitio web, un administrador prefiere usar /srv/miweb/
. En Fedora 11, el directorio /srv/
se etiqueta con el tipo var_t
. Los archivos y directorios creados en /srv/
heredan este tipo. También, los directorios de alto nivel recién creados (como /miservidor/
) puede ser etiquetado con el tipo default_t
. SELinux impide al Servidor HTTP Apache (httpd
) el acceso a estos dos tipos. Para permitirle el acceso, SELinux debe saber qué archivos en /srv/miweb/
son accesibles a httpd
:
# /usr/sbin/semanage fcontext -a -t httpd_sys_content_t \ "/srv/myweb(/.*)?"
semanage
agrega el contexto para el directorio /srv/miweb/
(y todos los archivos dentro de él) a la configuración de contexto de archivos de SELinux [14]. El comando semanage
no cambia el contexto. Como usuario root de Linux, ejecute el comando restorecon
para aplicar los cambios:
# /sbin/restorecon -R -v /srv/myweb
matchpathcon
chequea el contexto de un nombre completo de archivo y lo compara con la etiqueta por defecto para esa dirección. El siguiente ejemplo muestra el uso de matchpathcon
en un directorio con archivos etiquetados incorrectamente:
$ /usr/sbin/matchpathcon -V /var/www/html/* /var/www/html/index.html tiene el contexto unconfined_u:object_r:user_home_t:s0, debería ser system_u:object_r:httpd_sys_content_t:s0 /var/www/html/page1.html tiene el contexto unconfined_u:object_r:user_home_t:s0, debería ser system_u:object_r:httpd_sys_content_t:s0
index.html
and pagina1.html
se etiquetan con el tipo user_home_t
. Este tipo se usa para archivos en los directorios de inicio de los usuarios. Usando el comando mv
para mover archivos puede resultar en archivos etiquetados con el tipo user_home_t
. Este tipo no debería existir fuera de los directorios home. Use el comando restorecon
para restaurar tales archivos a su tipo correcto:
# /sbin/restorecon -v /var/www/html/index.html restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0
-R
:
# /sbin/restorecon -R -v /var/www/html/ restorecon reset /var/www/html/page1.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/index.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
matchpathcon
.
semanage
.
httpd_can_network_connect_db
:
# /usr/sbin/setsebool -P httpd_can_network_connect_db on
getsebool
y grep
para ver si algún Booleano está disponible para permitir el acceso. Por ejemplo, use el comando getsebool -a | grep ftp
para buscar un Booleano relacionado con FTP:
$ /usr/sbin/getsebool -a | grep ftp allow_ftpd_anon_write --> off allow_ftpd_full_access --> off allow_ftpd_use_cifs --> off allow_ftpd_use_nfs --> off ftp_home_dir --> off httpd_enable_ftp_server --> off tftp_anon_write --> off
/usr/sbin/getsebool -a
. Para una lista de los Booleanos y una explicación de lo que son, y de si están activos o no, ejecute el comando /usr/sbin/semanage boolean -l
como usuario root de Linux. vaya a Sección 5.6, “Booleanos” para información sobre listado y configuración de Booleanos.
semanage port -l | grep http
como usuario root de Linux para listar los puertos relacionados con http
:
# /usr/sbin/semanage port -l | grep http http_cache_port_t tcp 3128, 8080, 8118 http_cache_port_t udp 3130 http_port_t tcp 80, 443, 488, 8008, 8009, 8443 pegasus_http_port_t tcp 5988 pegasus_https_port_t tcp 5989
http_port_t
define los puertos en los que el Servidor HTTP Apache puede escuchar, que en este caso son los puertos TCP 80, 443, 488, 8008, 8009, y 8443. Si un administrador configura httpd.conf
para que httpd
escuche en el puerto 9876 (Listen 9876
), pero la política no fue actualizada para reflejar esto, el comando service httpd start
falla:
# /sbin/service httpd start Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:9876 (13)Permission denied: make_sock: could not bind to address 0.0.0.0:9876 no listening sockets available, shutting down Unable to open logs [FAILED]
/var/log/audit/audit.log
:
type=AVC msg=audit(1225948455.061:294): avc: denied { name_bind } for pid=4997 comm="httpd" src=9876 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket
httpd
escuchar en un puerto que no está listado en el tipo de puerto http_port_t
, ejecute el comando semanage port
para agregar un puerto a la configuración de la política [15]:
# /usr/sbin/semanage port -a -t http_port_t -p tcp 9876
-a
agrega un nuevo registro; la opción -t
define un tipo; y la opción -p
define un protocolo. El último argumento es el número de puerto a agregar.
audit2allow
para crear un módulo de política personalizado para permitir el acceso. Vaya a Sección 7.3.8, “Permitiendo el Acceso: audit2allow” para más información sobre el uso de audit2allow
.
audit2allow
.
ls -l
para ver los permisos estándares de Linux:
$ ls -l /var/www/html/index.html -rw-r----- 1 root root 0 2009-05-07 11:06 index.html
index.html
pertenece al usuario y al grupo root. El usuario root tiene permisos de lectura y escritura (-rw
), y los miembros del grupo root tienen permisos de lectura (-r-
). Cualquier otro no tiene acceso (---
). Por defecto, tales permisos no permiten a httpd
leer este archivo. Para resolver esto, use el comando chown
el dueño y el grupo. Este comando se debe ejecutar como usuario root de Linux:
# chown apache:apache /var/www/html/index.html
httpd
corre como usuario apache de Linux. Si corre httpd
con un usuario diferente, reemplace apache:apache
con ese usuario.
dontaudit
. Estas reglas son comúnes en la política estándar. La contraparte de dontaudit
es que, aunque SELinux niega el acceso, los mensajes no se guardan, lo que dificulta resolver el problema.
dontaudit
, permitiendo que se guarden todas las negaciones, ejecute el siguiente comando como usuario root de Linux:
/usr/sbin/semodule -DB
-D
deshabilita las reglas dontaudit
; la opción -B
reconstruye la política. Después de ejcutar semodule -DB
, pruebe ejercitar la aplicación que tuvo problemas de permisos, y vea si ahora se guardan negaciones de SELinux relacionadas con la aplicación. Tenga cuidado con la decición de qué negaciones se deben permitir, dado que algunas se deben ignorar y manejarse vía reglas dontaudit
. Si tiene duda, o busca alguna guía, contacte a otros usuarios y desarrolladores de SELinux en una lista de SELinux, tal como fedora-selinux-list.
dontaudit
, ejecute el siguiente comando como usuario root de Linux:
/usr/sbin/semodule -B
dontaudit
, corra el comando sesearch --dontaudit
. Búsquedas más refinadas usando la opción -s dominio
y el comando grep
. Por ejemplo:
$ sesearch --dontaudit -s smbd_t | grep squid WARNING: This policy contained disabled aliases; they have been removed. dontaudit smbd_t squid_port_t : tcp_socket name_bind ; dontaudit smbd_t squid_port_t : udp_socket name_bind ;
httpd
para acceder sistemas de archivos NFS). Esta información puede estar en la página de manual estándar o una página de manual con selinux
como prefijo o sufijo.
samba_share_t
, así como los Booleanos para permitir archivos etiquetados con otros tipos distintos a samba_share_t
para exportarlos vía Samba.
nfs_export_all_ro
o nfs_export_all_rw
deben activarse.
Perfil de Seguridad de SELinux para BIND de Red Hat
section). La página man de named_selinux(8) describe que, por defecto, named
no puede escribir a archivos de zona maestros y que, para permitir ese acceso, el Booleano named_write_master_zones
debe ser puesto en 1.
dominio
_disable_trans
están disponibles para prevenir que una aplicación transicione a un dominio confinado, y por lo tanto, el proceso se ejecute en un dominio no confinado, tal como initrc_t
. Poniendo en 1 tales booleanos pueden causar problemas serios. Por ejemplo, si el Booleano httpd_disable_trans
se pone en 1:
httpd
corre en el dominio no confinado initrc_t
. Los archivos creados por los procesos en el dominio initrc_t
puede no tener aplicadas las mismas reglas de etiquetados como los archivos creados por el proceso corriendo en el dominio httpd_t
, permitiendo que los procesos puedan potencialmente crear archivos mal etiquetados. Esto causa problemas más adelante.
httpd_t
no pueden comunicarse con initrc_t
, posiblemente causan fallas adicionales.
domain
_disable_trans
fueron eliminados de Fedora 7, y no se pusieron reemplazos. Los dominios permisivos pueden resolver esos problemas: se aplican las reglas de transición y los archivos se crean con las etiquetas correctas.
audit2allow
podría usarse luego para ayudar a escribir la política. Esto pone todo el sistema en riesgo. Con dominios permisivos, sólo el dominio en la nueva política puede marcarse como permisivo, sin poner en riesgo todo el sistema.
semanage permissive -a dominio
, donde dominio
es el dominio que quiere hacer permisivo. Por ejemplo, ejecute el siguiente comando como usuario root de Linux para hacer permisivo el dominio httpd_t
(el dominio en el que corre el Servidor HTTP Apache):
/usr/sbin/semanage permissive -a httpd_t
semodule -l | grep permissive
como usuario root de Linux. Por ejemplo:
# /usr/sbin/semodule -l | grep permissive permissive_httpd_t 1.0
semanage permissive -d dominio
como usuario root de Linux. Por ejemplo:
/usr/sbin/semanage permissive -d httpd_t
SYSCALL
es diferente para dominios permisivos. El siguiente es un ejemplo de una negación de AVC (y la llamada a sistema asociada) desde el Servidor HTTP Apache:
type=AVC msg=audit(1226882736.442:86): avc: denied { getattr } for pid=2427 comm="httpd" path="/var/www/html/archivo1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file type=SYSCALL msg=audit(1226882736.442:86): arch=40000003 syscall=196 success=no exit=-13 a0=b9a1e198 a1=bfc2921c a2=54dff4 a3=2008171 items=0 ppid=2425 pid=2427 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
httpd_t
es no permisivo, y como tal, la acción es negada, y el mensaje SYSCALL
contiene success=no
. El siguiente es un ejemplo de negación AVC para la misma situación, excepto que el comando semanage permissive -a httpd_t
se ejecutó para hacer el dominio httpd_t
permisivo:
type=AVC msg=audit(1226882925.714:136): avc: denied { read } for pid=2512 comm="httpd" name="archivo1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file type=SYSCALL msg=audit(1226882925.714:136): arch=40000003 syscall=5 success=yes exit=11 a0=b962a1e8 a1=8000 a2=0 a3=8000 items=0 ppid=2511 pid=2512 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
SYSCALL
success=yes
.
auditd
, rsyslogd
y setroubleshootd
están ejecutándose. Vaya a Sección 5.2, “Qué Archivo Log se usa” para información sobre cómo iniciar estos demonios. Hay disponibles un número de herramientas para ver las negaciones de SELinux, tales como ausearch
, aureport
y sealert
.
ausearch
. De la página de manual de ausearch(8): "ausearch
es una herramienta que puede consultar los registros del demonio audit basados en distintos criterios de búsqueda"[16]. La herramienta ausearch
accede a /var/log/audit/audit.log
, y como tal, sebe ser ejecutada como usuario root de Linux:
Buscando | Comando |
---|---|
todas las negaciones | /sbin/ausearch -m avc |
negaciones de hoy | /sbin/ausearch -m avc -ts today |
negaciones desde los últimos 10 minutos | /sbin/ausearch -m avc -ts recent |
-c nombre-de-comando
, donde nombre-de-comando
"es el nombre del ejecutable"[17], por ejemplo, httpd
para el Servidor HTTP Apache, y smbd
para Samba:
/sbin/ausearch -m avc -c httpd
/sbin/ausearch -m avc -c smbd
ausearch
.
aureport
. De la página de manual de aureport(8): "aureport
es una herramienta que produce informes resumen de los registros de auditoría del sistema"[18]. La herramienta aureport
accede a /var/log/audit/audit.log
, y como tal, se debe ejecutar como usuario root de Linux. Para ver una lista de las negaciones de SElinux y cuán a menudo ocurren, ejecute el comando aureport -a
. El siguiente es un ejemplo de la salida en donde se incluyen dos negaciones:
# /sbin/aureport -a AVC Report ======================================================== # date time comm subj syscall class permission obj event ======================================================== 1. 05/01/2009 21:41:39 httpd unconfined_u:system_r:httpd_t:s0 195 file getattr system_u:object_r:samba_share_t:s0 denied 2 2. 05/03/2009 22:00:25 vsftpd unconfined_u:system_r:ftpd_t:s0 5 file read unconfined_u:object_r:cifs_t:s0 denied 4
aureport
.
sealert
, que lee los mensajes de negación traducidos por setroubleshoot-server. A las negaciones se le asignan IDs, como se ve en /var/log/messages
. El siguiente es un ejemplo de negación en messages
:
setroubleshoot: SELinux esta previniendo acerca de la intención de httpd (httpd_t) "getattr" to /var/www/html/archivo1 (samba_share_t). Para mensajes SELinux completos, ejecute sealert -l 84e0b04d-d0ad-4347-8317-22e74f6cd020
84e0b04d-d0ad-4347-8317-22e74f6cd020
. La opción -l
toma un ID como argumento. Ejecutando el comando sealert -l 84e0b04d-d0ad-4347-8317-22e74f6cd020
le presenta un análisis detallado de por qué SELinux negó el acceso, y una posible solución para permitir el acceso.
setroubleshootd
y auditd
ejecutándose, una estrella amarilla y una advertencia se muestran cuando un acceso es negado por SELinux. Con clic sobre la estrella se lanza sealert
modo gráfico y se muestra la negación como HTML:
sealert -b
para lanzar la GUI de sealert
.
sealert -l \*
para ver un análisis detallado de todas las negaciones.
sealert -a /var/log/audit/audit.log -H > audit.html
para crear una versión HTML del análisis de sealert
, como si se viera en la GUI de sealert
.
sealert
.
/var/log/audit/audit.log
. El siguiente es un ejemplo de negación AVC (y su llamada a sistema asociado) que ocurrío cuando el Servidor HTTP Apache (corriendo en el dominio httpd_t
) intentó acceder el /var/www/html/archivo1
(etiquetado con el tipo samba_share_t
):
type=AVC msg=audit(1226874073.147:96): avc: denied { getattr } for pid=2465 comm="httpd" path="/var/www/html/archivo1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file type=SYSCALL msg=audit(1226874073.147:96): arch=40000003 syscall=196 success=no exit=-13 a0=b98df198 a1=bfec85dc a2=54dff4 a3=2008171 items=0 ppid=2463 pid=2465 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=6 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
{ getattr }
getattr
indica el proceso fuente que intentó leer la información de estado del archivo destino. Esto ocurre antes de leer archivos. Esta acción es negada dado que el archivo está siendo accedido con la etiqueta equivocada. Los permisos vistos comúnmente incluyen a getattr
, read
y write
.
httpd
"exe=
del mensaje de la llamada al sistema (SYSCALL
), que es en este caso exe="/usr/sbin/httpd"
.
/var/www/html/archivo1
"unconfined_u:system_r:httpd_t:s0
"httpd_t
.
unconfined_u:object_r:samba_share_t:s0
"archivo1
. Nota: el tipo samba_share_t
no es accesible para procesos que corren el dominio httpd_t
.
tcontext
puede coincidir con scontext
, por ejemplo, cuando un proceso intenta ejecutar un servicio del sistema que cambiará las características de ese proceso en ejecución, tales como el ID del usuario. También el tcontext
puede coincidir con el scontext
cuando un proceso intenta usar más recursos (como la memoria) más allá de los límites normales permitidos, lo que resulta en un chequeo de seguridad para ver si el proceso tiene permitido romper esos límites.
SYSCALL
) nos interesan dos ítems:
success=no
: indica si la negación (AVC) fue aplicada o no. success=no
indica que la llamada al sistema no fue exitosa(SELinux negó el acceso). success=yes
indica que la llamada al sistema fue exitosa - esto se puede ver en dominios permisivos o en dominios no confinados, tales como initrc_t
y kernel_t
.
exe="/usr/sbin/httpd
"
: la dirección completa al ejecutable que inició el proceso, que es en este caso exe="/usr/sbin/httpd"
.
scontext
) con el contexto destino (tcontext
). ¿Debería el proceso (scontext
) acceder a un objeto (tcontext
)? Por ejemplo, el Servidor HTTP Apache (httpd_t
) sólo debería acceder tipos especificados en la página man httpd_selinux(8), tales como httpd_sys_content_t
, public_content_t
, y así sucesivamente, a menos que se configure de otra forma.
/var/log/messages
. El siguiente es un ejemplo de negación AVC (guardado en messages
) que ocurrió cuando el Servidor HTTP Apache (corriendo en el dominio httpd_t
domain) intentó acceder el /var/www/html/archivo1
(etiquetado con el tipo samba_share_t
):
hostname
setroubleshoot: SELinux está previniendo acerca de la intención de httpd (httpd_t) de "getattr" sobre /var/www/html/archivo1 (samba_share_t). Para los mensajes completos de SELinux, ejecute sealert -l 84e0b04d-d0ad-4347-8317-22e74f6cd020
sealert -l 84e0b04d-d0ad-4347-8317-22e74f6cd020
para ver el mensaje completo. Este comando sólo funciona en la máquina local, y presenta la misma información que la interfase gráfica de sealert
:
$ sealert -l 84e0b04d-d0ad-4347-8317-22e74f6cd020 Summary: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/archivo (samba_share_t). Detailed Description: SELinux denied access to /var/www/html/archivo1 requested by httpd. /var/www/html/file1 has a context used for sharing by different program. If you would like to share /var/www/html/file1 from httpd also, you need to change its file context to public_content_t. If you did not intend to this access, this could signal a intrusion attempt. Allowing Access: You can alter the file context by executing chcon -t public_content_t '/var/www/html/file1' Fix Command: chcon -t public_content_t '/var/www/html/archivo1' Additional Information: Source Context unconfined_u:system_r:httpd_t:s0 Target Context unconfined_u:object_r:samba_share_t:s0 Target Objects /var/www/html/archivo1 [ file ] Source httpd Source Path /usr/sbin/httpd Port <Unknown> Hosthostname
Source RPM Packages httpd-2.2.10-2 Target RPM Packages Policy RPM selinux-policy-3.5.13-11.fc11 Selinux Enabled True Policy Type targeted MLS Enabled True Enforcing Mode Enforcing Plugin Name public_content Host Namehostname
PlatformLinux hostname 2.6.27.4-68.fc11.i686 #1 SMP Thu Oct
30 00:49:42 EDT 2008 i686 i686 Alert Count 4 First Seen Wed Nov 5 18:53:05 2008 Last Seen Wed Nov 5 01:22:58 2008 Local ID 84e0b04d-d0ad-4347-8317-22e74f6cd020 Line Numbers Raw Audit Messages node=hostname
type=AVC msg=audit(1225812178.788:101): avc: denied { getattr } for pid=2441 comm="httpd" path="/var/www/html/archivo1" dev=dm-0 ino=284916 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file node=hostname
type=SYSCALL msg=audit(1225812178.788:101): arch=40000003 syscall=196 success=no exit=-13 a0=b8e97188 a1=bf87aaac a2=54dff4 a3=2008171 items=0 ppid=2439 pid=2441 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=3 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
/var/log/messages
. En este ejemplo, al proceso httpd
se le negó el acceso al (archivo1
), que está etiquetado con el tipo samba_share_t
.
archivo1
está etiquetado con el tipo samba_share_t
. Este tipo se usa para archivos y directorios que quiere exportar vía Samba. La descripción sugiere cambiar el tipo a un tipo que pueda ser accedido por Samba y por el Servidor HTTP Apache, si tal acceso es deseado.
archivo1
a public_content_t
, que es accesible por el Servidor HTTP Apache y por Samba.
selinux-policy-3.5.13-11.fc11
), pero que no puede ser de ayuda para resolver por qué ocurrió la negación.
/var/log/audit/audit.log
que son asociados con la negación. Vaya a Sección 7.3.6, “Mensajes Crudos de Auditoría” para información acerca de cada ítem en la negación AVC.
audit2allow
.
audit2allow
- genera reglas para habilitar de la política de SELinux a partir de operaciones negadas"[19]. Después de analizar las negaciones como en Sección 7.3.7, “Mensajes sealert”, y si ningún cambio de etiqueta o de Booleano permitió el acceso, use audit2allow
para crear un módulo de política local. Después de que el acceso es negado por SELinux, ejecutando el comando audit2allow
presenta reglas de Obligación de Tipo que permitirían el acceso previamente negado.
audit2allow
para crear un módulo de política:
/var/log/audit/audit.log
:
type=AVC msg=audit(1226270358.848:238): avc: denied { write } for pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir type=SYSCALL msg=audit(1226270358.848:238): arch=40000003 syscall=39 success=no exit=-13 a0=39a2bf a1=3ff a2=3a0354 a3=94703c8 items=0 ppid=13344 pid=13349 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="certwatch" exe="/usr/bin/certwatch" subj=system_u:system_r:certwatch_t:s0 key=(null)
comm="certwatch"
) se le negó el acceso de escritura ({ write }
) a un direcotiro etiquetado con el tipo var_t
(tcontext=system_u:object_r:var_t:s0
). Analice la negación como en Sección 7.3.7, “Mensajes sealert”. Si no hay cambios de etiquetas o Boleanos que permitan el acceso, use audit2allow
para crear un módulo de política local.
certwatch
en el paso 1, corra el comando audit2allow -w -a
para producir una descripción legible al humano sobre por qué el acceso fue negado. La opción -a
hace que se lean todos los registros de autidoría. La opción -w
produce una descripción legible al humano. La herramienta audit2allow
accede a /var/log/audit/audit.log
, y como tal, debe ser ejecutada como usuario root de Linux:
# audit2allow -w -a type=AVC msg=audit(1226270358.848:238): avc: denied { write } for pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir Was caused by: Missing type enforcement (TE) allow rule. You can use audit2allow to generate a loadable module to allow this access.
audit2allow -a
para ver la regla de Obligación de Tipo que permite el acceso negado:
# audit2allow -a #============= certwatch_t ============== allow certwatch_t var_t:dir write;
Fedora
, y seleccione el componente selinux-policy
. Incluya la salida de los comandos audit2allow -w -a
y audit2allow -a
en el informe del error.
audit2allow -a
, ejecute el comando audit2allow -a -M mycertwatch
como usuario root de Linux. La opción -M
crea un archivo de Obligación de Tipo (.te
) con el nombre especificado en -M
, en su directorio actual de trabajo:
# audit2allow -a -M mycertwatch ******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i mycertwatch.pp # ls mycertwatch.pp mycertwatch.te
audit2allow
compila la regla de Obediencia de Tipo en un paquete de política (.pp
). Para instalar el módulo, ejecute el comando /usr/sbin/semodule -i mycertwatch.pp
como usuario root de Linux.
audit2allow
pueden permitir más acceso que el requerido. Se recomienda que la política creada con audit2allow
sea enviada a una lista de SELinux, tal como fedora-selinux-list, para su revisión. Si cree que hay un error en la política, informe un error en Bugzilla de Red Hat.
grep
para una búsqueda más refinada de audit2allow
. El siguiente ejemplo muestra el uso de grep
para sólo enviar negaciones de certwatch
a audit2allow
:
# grep certwatch /var/log/audit/audit.log | audit2allow -M mycertwatch2 ******************** IMPORTANT *********************** To make this policy package active, execute: # /usr/sbin/semodule -i mycertwatch2.pp
audit2allow
para construir módulos de políticas.
[14]
Los archivos en /etc/selinux/targeted/contexts/files/
definen los contextos de archivos y directorios. Los archivos en este directorio son leídos por restorecon
y setfiles
para restaurar archivos y directorios a sus contextos predeterminados.
[15]
El comando semanage port -a
agrega una entrada al archivo /etc/selinux/targeted/modules/active/ports.local
. Nota: por defecto, este archivo sólo puede ser visto por el usuario root de Linux.
[16] De la página man de ausearch(8), como se incluyó en el paquete audit en Fedora 11.
[17] De la página de manual de ausearch(8), como se incluyó en el paquete audit en Fedora 11.
[18] de la página de manual de aureport(8) como se incluyó en el paquete audit en Fedora 11.
[19] De la página man de audit2allow(1), tal como fue incluida en el paquete policycoreutils en Fedora 11.
Historial de revisiones | |||||
---|---|---|---|---|---|
Revisión 1.3 | Tue May 12 2009 | ||||
| |||||
Revisión 1.2 | Mon Jan 19 2009 | ||||
| |||||
Revisión 1.1 | Sat Dec 6 2008 | ||||
| |||||
Revisión 1.0 | Tue Nov 25 2008 | ||||
|