Gentoo Logo

Preguntas frecuentes (FAQ) sobre SELinux en Gentoo Hardened

Contenido:

1.  Preguntas

Introducción

El uso de SELinux requiere que los administradores tengan un conocimiento extenso de su sistema y una buena información de como se deben comportar los procesos.. Aparte de nuestro Manual de SELinux para Gentoo Hardened, una serie de preguntas frecuentes nos permite informar y ayudar a los usuarios en su experiencia diaria con SELinux.

Estas preguntas es un resumen de las soluciones dadas en IRC, listas de correo, foros o en otros lugares. Se centran en la integración de SELinux integration en Gentoo Hardened, sin embargo, también surgen preguntas generales sobre SELinux que se han ido incorporando igualmente.

Preguntas generales sobre soporte SELinux

Utilizar SELinux

Mensajes de error del núcleo SELinux

SELinux y Gentoo

2.  Preguntas generales sobre soporte SELinux

¿Fuerza SELinux los límites de los recursos?

No, los límites de los recursos están fuera de la gestión de un sistema de control de acceso. Si está buscando soporte en este tipo de cuestiones, eche un vistazo a tecnologías como grsecurity, cgroups, pam y otras del estilo.

¿Puede utilizar SELinux con grsecurity (y PaX)?

Por supuesto, de hecho es lo que recomendamos. Si embargo, se recomienda evitar el uso del soporte que tiene grsecurity para ACL ya que podría ser redundante en el control de acceso de SELinux.

¿Puedo utilizar SELinux con el compilador hardened (usando PIE-SSP)?

Por supuesto, también recomendamos utilizar PaX para tener todas las ventajas de las características PIE que ofrece el compilador.

¿Puedo utilizar SELinux y RSBAC?

Sí, SELinux y RSBAC se pueden utilizar conjuntamente, pero no lo recomendamos. Ambos marcos de trabajo (RSBAC y la implementación de SELinux encima del marco de trabajo de los módulos de seguridad de los sistemas Linux) tienen un pequeño impacto en el rendimiento del sistema. Si se habilitan ambos, se tendrá una penalización en el rendimiento, obteniendo poc valor añadido ya que ambos ofrecen una funcionalidad they both offer similar functionality.

En la mayoría de los casos, es más prudente utilizar RSBAC sin SELinux, o SELinux sin RSBAC.

¿Puede utilizar SELinux con cualquier sistema de ficheros?

SELinux requiere acceso al contexto de seguridad de los ficheros para funcionar correctamente. Para ello, SELinux utiliza los atributos extendidos de fichero que deben por tanto ofrecer los sistemas de ficheros con los que se opere. Si el sistema de ficheros soporta los atributos extendidos de fichero y ha configurado su núcleo para habilitar este soporte, entonces SELinux funcionará en esos sistemas.

Los sistemas de ficheros generales, tales como: ext2, ext3, ext4, jfs, xfs y btrfs ofrecen soporte para atributos extendidos (pero no olvide habilitarlo en la configuración del núcleo), el sistema tmpfs también ofrece este soporte (por ejemplo para que lo utilice udev). Si su colección sistema de ficheros se limita a este conjunto, entonces no debería tener problemas.

Se soportan también los sistemas de ficheros anticuados como vfat e iso9660, pero con una importante limitación: todos los ficheros en cada uno de los sistemas de ficheros tendrán la misma información de contexto de seguridad ya que estos sistemas no ofrecen soporte para atributos extendidos de ficheros.

Se puede dar soporte a Los sistemas de ficheros en red de la misma forma que a los sistemas de ficheros anticuados (todos los ficheros comparten el mismo contexto de seguridad). Sin embargo, se ha realizado algún esfuerzo de desarrollo para ofrecer atributos extendidos en sistemas populares como NFS. Aunque todavía estamos lejos de que esto se pueda utilizar en un sistema de producción, parece que algún día también se ofrecerá soporte completo para estos sistemas en SELinux.

¿Puedo utilizar SELinux con AMD64 no-multilib?

Sí, simplemente utilice el perfil hardened/linux/amd64/no-multilib/selinux y ya estará preparado.

¿Qué es exactamente UBAC?

UBAC (User Based Access Control) o Control de Acceso Basado en Usuario, introduce límites adicionales cuando se usa la directriz de SELinux. Los dominios o tipos que participan y que han sido ambos marcados como ubac_constrained_type (que es un atributo) tendrán los privilegios permitidos en efecto únicamente si ambos están corriendo con el mismo contexto de usuario SELinux.

Listado de Código 2.1: Dominios y sus contextos de usuario SELinux

# La regla permisiva de SELinux
allow foo_t bar_t:file { read };

# Esto funcionará:
staff_u:staff_r:foo_t reads file with type staff_u:object_r:bar_t

# Esto no será permitido:
user_u:user_r:foo_t reads file with type staff_u:object_r:bar_t

Desde luego, este no es siempre el caso. Aparte del requerimiento mencionado anteriormente de que ambos tipos sean ubac_constrained_type, si el dominio origen es sysadm_t, entonces la limitación no tendrá efecto (el dominio sysadm_t está exento de las limitaciones UBAC). También, si el usuario SELinux origen o destino es system_u entonces la limitación tampoco tendrá efecto.

3.  Utilizar SELinux

¿>Cómo habilito SELinux?

Esto se explica en el Manual de SELinux para Gentoo en el capítulo Usar SELinux en Gentoo Hardened.

¿Como cambio entre los modos permissive y enforcing (permisivo y forzado)?

La forma más fácil es utilizar la orden setenforce. Con setenforce 0 le indica a SELinux que quiere trabajar en modo permisivo. De igual modo, con setenforce 1 le indica a SELinux para que trabaje en modo forzado.

Puede también añadir una opción a l núcleo enforcing=0 o enforcing=1 en la configuración del gestor de arranque (o durante la rutina de inicio del sistema). Esto le permite correr SELinux en modo permisivo o forzado desde que el sistema se inicia.

El estado por defecto del sistema se guarda en /etc/selinux/config.

¿Cómo deshabilito SELinux completamente?

Puede ocurrir que, ejecutar SELinux en modo permisivo no sea suficiente para corregir apropiadamente los problemas que vayan surgiendo. Para deshabilitar SELinux completely, necesitará editar /etc/selinux/config y ajustar SELINUX=disabled. A continuación, deberá reiniciar su sistema.

Importante: Cuando esté corriendo su sistema con SELinux deshabilitado, deberá iniciar en modo permisivo y etiquetar de nuevo todo el sistema de ficheros. Las actividades que se realizaron mientras SELinux estaba deshabilitado podrían haber creado nuevos ficheros y haber eliminado las etiquetas de algunos ficheros ya existentes, causando que estos ficheros no dispongan de contexto de seguridad.

¿Cómo averiguo qué regla de contexto de fichero se está utilizando para un fichero en particular?

Si utiliza la orden matchpathcon, obtendrá el contexto de seguridad que se debería estar utilizando para una determinada ruta (sea fichero o directorio), sin embargo, esto no le muestra que regla se utiliza para deducirlo. Para ello, puede utilizar findcon:

Listado de Código 3.1: Usar findcon

~# findcon /etc/selinux/strict/contexts/files/file_contexts -p /lib64/rc/init.d
/.*                          system_u:object_r:default_t
/lib64/rc/init\.d(/.*)?   system_u:object_r:initrc_state_t
/lib64/.*                    system_u:object_r:lib_t

Cuando las utilidades de SELinux están tratando de aplicar un contexto, intentarán que concuerde la regla más específica, por lo que, en el caso de arriba es la que nos lleva al contexto initrc_state_t.

La más específica significa, en el orden de pruebas:

  1. Si la línea A contiene una expresión regular y la línea B no la tiene, entonces la línea B es más específica.
  2. Si el número de caracteres antes de la primera expresión regular en la línea A es menor que el número de caracteres antes de la primera expresión regular en la línea B, entonces la línea B es más específica.
  3. Si el número de caracteres en la línea A es menor que en la línea B, entonces la línea B es más específica.
  4. Si la línea A no mapea a un tipo específico de SELinux type y la línea B sí lo hace, entonces la línea B es más específica.

Sin embargo, cuando añada sus propios contextos de fichero (utilizando semanage), estas condiciones no se aplican. En lugar de esto, las herramientas como restorecon ¡tomarán la última coincidencia dentro de los contextos de fichero localmente añadidos! Puede comprobar el contenido de las reglas añadidas localmente en /etc/selinux/strict/contexts/files/file_contexts.local (sustituya strict con su tipo SELinux).

¿Cómo realizo pequeños cambios (adiciones) a la directriz?

Si está interesado en el desarrollo de SELinux en Gentoo Hardened, por favor, eche un vistazo a la Guía de desarrollo de SELinux y otra documentación mostrada en la página de proyecto de SELinux (en inglés).

Sin embargo, en alguna ocasión, necesitará conservar algunos cambios en su directriz debido a cómo ha configurado su sistema o cuando necesite permitir alguna acción que no vaya a ser aceptada como un cambio en la directriz que afecta a toda la distribución. En ese caso, continúe leyendo.

Las actualizaciones de la directriz son posibles únicamente cuando necesite permitir privilegios adicionales. No es posible eliminar reglas de la directriz, solo mejorarlas. Para mantener su propio conjunto de reglas adicionales, cree un fichero en el que conserve sus cambios. En el siguiente ejemplo, usaré el término fixlocal, sustitúyalo por el nombre que desee, pero mantenga ese nombre consistente. En el fichero (fixlocal.te) escriba el siguiente texto (de nuevo, sustituya fixlocal por el nombre que haya elegido):

Listado de Código 3.2: Contenido de fixlocal.te

policy_module(fixlocal, 1.0)

require {
# Declaraciones de tipos, clases y permisos usados

}

# Declaraciones de reglas de directriz

En este fichero puede añadir las reglas que desee. En el siguiente ejemplo, añadiremos tres reglas:

  1. Conceder a mozilla_t el privilegio execmem (basado en una denegación que se aplica cuando mozilla no se puede iniciar).
  2. Permitir a ssh_t conectar con cualquier puerto aparte del puerto SSH.
  3. Permitir al dominio user_t enviar mensajes directamente al registrador del sistema.

Listado de Código 3.3: Contenido de fixlocal.te

policy_module(fixlocal, 1.0)

require {
  type mozilla_t;
  type ssh_t;
  type user_t;

  class process { execmem };
}

# Conceder a mozilla el privilegio execmem
allow mozilla_t self:process { execmem };

# Permitir al cliente SSH conectar a cualquier puerto (tal y como indica el usuario
# a través de la orden # "ssh -p <númerodepuerto> ...")
corenet_tcp_connect_all_ports(ssh_t)

# Permitir al dominio user_t enviar mensajes al registrador del sistema
logging_send_syslog_msg(user_t)

Si necesita ofrecer sentencias de permisión (como la descrita arriba para el dominio mozilla_t), asegúrese de que el tipo (mozilla_t), clase (process) y privilegio (execmem) se mencionan en el párrafo require { ... }.

Cuanto utilice nombres de interfaz, asegúrese de que los tipos (ssh_t y user_t) se mencionan en el párrafo require { ... }.

Para encontrar el nombre adecuado de la interfaz (como la corenet_tcp_connect_all_ports de arriba), puede, bien, echar un vistazo en línea a la API de la Directriz de Referencia de SELinux o, si se ha construido sec-policy/selinux-base-policy con el ajuste USE doc, en los ficheros /usr/share/doc/selinux-base-policy-.*/html. Desde luego, también puede pedir ayuda en el canal #gentoo-hardened de irc.freenode.net, la lista de correo, los foros, etc. para encontrar las reglas y sentencias adecuadas para su caso.

Una vez creado el fichero de directriz, puede construirla utilizando el fichero Makefile que ofrece el sistema:

Listado de Código 3.4: Construir un fichero fixlocal.pp

(Esta parte utiliza "strict" como ejemplo de tipo de directriz, sustitúyalo port su propio tipo)
# make -f /usr/share/selinux/strict/include/Makefile fixlocal.pp

A continuación, si la construcción es correcta, puede cargarla en memoria. Una vez cargada, ésta será cargada en cada inicio, de modo que no necesitará repetir esto una y otra vez.

Listado de Código 3.5: Cargar la directriz

# semodule -i fixlocal.pp

4.  Mensajes de error del núcleo SELinux

Obtengo un error register_security cuando arranca el sistema

Durante el arranque del sistema, se muestra el siguiente mensaje:

Listado de Código 4.1: Mensaje del núcleo sobre register_security

There is already a security framework initialized, register_security failed.
Failure registering capabilities with the kernel
selinux_register_security: Registering secondary module capability
Capability LSM initialized

No hay nada de lo que preocuparse (es perfectamente normal).

Esto significa que el módulo de capacidad LSM no se pudo registrar como módulo principal ya que SELinux es el módulo principal. El tercer mensaje indica que ha registrado SELinux como módulo secundario.

Obtengo un mensaje 'Permission ... in class ... not defined' durante el arranque

Durante el arranque del sistema, se muestra el siguiente mensaje:

Listado de Código 4.2: Mensaje del núcleo sobre permiso(s) no definido(s)

SELinux: 2048 avtab hash slots, 16926 rules.
SELinux: 2048 avtab hash slots, 16926 rules.
SELinux:  6 users, 6 roles, 1083 types, 34 bools
SELinux:  77 classes, 16926 rules
SELinux:  Permission read_policy in class security not defined in policy.
SELinux:  Permission audit_access in class file not defined in policy.
SELinux:  Permission audit_access in class dir not defined in policy.
SELinux:  Permission execmod in class dir not defined in policy.
...
SELinux: the above unknown classes and permissions will be denied
SELinux:  Completing initialization.

Esto significa que el núcleo Linux que está arrancado ofrece soporte para permisos que no están definidos en la directriz (que a su vez son ofertados a través del paquete sec-policy/selinux-base-policy). Si no aparecen más errores durante las operaciones normales, entonces puede ignorarlo (los permisos formarán parte de las definiciones de directriz que se realicen en adelante).

5.  SELinux y Gentoo

Obtengo un error de que un módulo de SELinux no está presente cuando utilizo emerge

Cuando se intenta utilizar emerge, aparece el siguiente error:

Listado de Código 5.1: Mensaje de error de emerge acerca del módulo SELinux

!!! SELinux module not found. Please verify that it was installed.

Esto indica que el módulo SELinux para portage no se encuentra o está dañado. Las versiones recientes de Portage ofrecen este módulo directamente, pero los contextos de seguridad de los ficheros necesarios pueden ser erróneos para su sistema. Intente etiquetar de nuevo los ficheros de paquete portage:

Listado de Código 5.2: Etiquetar de nuevo todos los ficheros de portage

~# rlpkg portage

Aparece el mensaje 'FEATURES variable contains unknown value(s): loadpolicy'

Cuando se ejecuta emerge, aparece el siguiente error:

Listado de Código 5.3: Error de emerge acerca de loadpolicy

FEATURES variable contains unknown value(s): loadpolicy

Esto es un remanente del conjunto de módulos de directriz SELinux antiguos en los que se necesitaba que esta CARACTERÍSTICA (FEATURE) estuviera disponible. Hace tiempo que se eliminó del árbol.

Por favor, actualice su perfil a uno reciente (uno terminado en /selinux) y asegúrese de que /etc/make.conf no tiene definido FEATURES="loadpolicy".

Mientras utilizo rlpkg, obtengo: 'conflicting specifications for ... and ..., using ...'

Cuando se trata de etiquetar de nuevo un paquete (rlpkg nombredepaquete) o el propio sistema (rlpkg -a -r) se obtiene un error similar al siguiente:

Listado de Código 5.4: La orden rlpkg protesta sobre especificaciones en conflicto

filespec_add: conflicting specifications for /usr/bin/getconf and
/usr/lib64/misc/glibc/getconf/XBS5_LP64_OFF64, using
system_u:object_r:lib_t

En la mayoría de las ocasiones esto se debe a ficheros con enlaces duros (hard links). Recuerde, SELinux utiliza los atributos extendidos del sistema de ficheros para almacenar el contexto de seguridad de los ficheros. Si dos rutas distintas apuntan al mismo fichero mediante el uso de enlaces duros (esto es, los ficheros comparten el mismo inodo), entonces ambos ficheros tendrán el mismo contexto de seguridad.

La solución depende de cada caso en particular. Se muestran a continuación varias formas de solucionar esto en el orden en el que más probable se obtenga un remedio:

  1. Aunque ambos ficheros son el mismo, no se utilizan en el mismo contexto. En estos casos, se recomienda eliminar uno de los ficheros y copiar el otro fichero al primero (rm B; cp A B). De esta forma, ambos ficheros tienen inodos diferentes y se pueden etiquetar de forma correcta.
  2. Ambos ficheros se utilizan para el mismo propósito. En este caso, sería mejor etiquetar el fichero que no ha sido etiquetado de forma correcta (digamos, un binario en algún lugar de la ubicación /usr/lib64) utilizando semanage (semanage fcontext -a -t dominio_correcto /usr/lib64/camino/al/fichero)

No es mala idea informar (después de comprobar que nadie lo ha hecho ya) de esto en el bugzilla de Gentoo para que se actualicen las directrices correctamente.

Cuando se instala un paquete, ld.so protesta: 'object 'libsandbox.so' from LD_PRELOAD cannot be preloaded: ignored'

Mientras se instala un paquete, puede aparecer el siguiente mensaje de error:

Listado de Código 5.5: Mensaje de error cuando se está instalando un paquete

>> Installing (1 of 1) net-dns/host-991529
>>> Setting SELinux security labels
ERROR: ld.so: object 'libsandbox.so' from LD_PRELOAD cannot be preloaded: ignored.

Este mensaje debería ocurrir únicamente después de que aparezca el mensaje Setting SELinux security labels. Ocurre porque SELinux le indica a glibc que deshabilite LD_PRELOAD (y otras variables de entorno que se consideran dañinas) durante los cambios entre dominios. Aquí, portage invoca la orden setfiles (parte de la instalación de SELinux) cuando cambia desde portage_t a setfiles_t, lo cual limpia la variable de entorno.

Creemos que en esta ocasión es más seguro confiar en la directriz de SELinux (ya que setfiles ejecuta de todas formas su propio dominio confinado) en lugar de actualizar la directriz para permitir el cambio desde portage_t a setfiles_t sin limpiar estas variables de entorno. Observe que libsandbox.so no se deshabilita durante las construcciones e instalaciones de paquetes, únicamente durante la actividad en la que Portage etiqueta los ficheros recién instalados.

Por lo tanto, este error es cosmético, desde nuestro punto de vista, y se puede ignorar (desafortunadamente no se puede ocultar).

Emerge no funciona, muestra el mensaje: 'Permission denied: /etc/make.conf'

Esto es de esperar si no está utilizando el rol sysadm_r. Cualquier actividad relacionada con Portage requiere que esté en el rol sysadm_r. Para cambiar a ese rol, en primer lugar valide si actualmente está en staff_u (o, si añadió sus propias identidades SELinux, un usuario que tenga permiso para cambiar al rol sysadm_r). A continuación ejecute newrole -r sysadm_r para hacer el cambio.

Listado de Código 5.6: Cambiar a sysadm_r

~$ emerge --info
Permission denied: '/etc/make.conf'
~$ id -Z
staff_u:staff_r:staff_t
~$ newrole -r sysadm_r
Password: # Introduzca su clave de usuario

Esto es también necesario si ha entrado en el sistema como root pero a través de SSH. El comportamiento por defecto es que SSH define el rol más bajo para un usuario en particular cuando éste se conecta. No debería permitir entrar como root desde un equipo remoto bajo ningún concepto.

Cron no puede cargar el crontab de root: '(root) ENTRYPOINT FAILED (crontabs/root)'

Cuando obtenga el error mencionado con una crontab de root o una crontab de un usuario administrativo, pero no con una crontab de un usuario normal, entonces deberá comprobar el contexto del fichero crontab:

Listado de Código 5.7: Comprobar el contexto del fichero crontab

~# ls -Z /var/spool/cron/crontabs/root
staff_u:object_r:user_cron_spool_t /var/spool/cron/crontabs/root

A continuación, comprueba que el contexto por defecto es para el usuario correcto (en este caso, root) cuando se origina desde el dominio crond_t:

Listado de Código 5.8: Comprobar el contexto por defecto del usuario root

~# getseuser root system_u:system_r:crond_t
seuser:  root, level (null)
Context 0       root:sysadm_r:cronjob_t
Context 1       root:staff_r:cronjob_t

Como puede ver, el contexto por defecto es siempre para el usuario de SELinux root. Sin embargo, el contexto del fichero /var/spool/cron/crontabs/root en el ejemplo de arriba es para el usuario SELinux staff_u. Por lo tanto, cron no podrá leer este fichero (el tipo user_cron_spool_t es un tipo UBAC con limitación).

Para corregir esto, cambie el usuario del fichero a root:

Listado de Código 5.9: Cambiar el usuario SELinux del fichero crontab de root

~# chcon -u root /var/spool/cron/crontabs/root

Otra forma de corregirlo sería deshabilitar UBAC completamente. Esto se puede hacer con USE="-ubac".

Cuando consulto la directriz, obtengo: 'ERROR: could not find datum for type ...'

Cuando se utiliza seinfo o sesearch para consultar la directriz en el sistema, se obtienen errores similares a:

Listado de Código 5.10: Forzando el error 'could not find datum'

~# seinfo -tasterisk_t
ERROR: could not find datum for type asterisk_t

Esto, en la mayoría de las ocasiones, sucede porque sus herramientas están utilizando una directriz de un nuevo binario para forzar la directriz, sin embargo, otro binario para realizar la consulta. Puede verificar si este es el caso, listando la última fecha de modificación de los ficheros:

Listado de Código 5.11: Comprobar la última fecha de modificación de los ficheros de directriz

~# ls -ltr /etc/selinux/strict/policy/policy.*

El último fichero modificado debería ser el mismo que el devuelto por /selinux/policyvers:

Listado de Código 5.12: Comprobar la versión de directriz en tiempo de ejecución

~# cat /selinux/policyvers; echo
24

Si éste no es el caso (que seguramente es la razón principal por la que está leyendo estas preguntas frecuentes) entonces intente forzar la versión de la directriz de utilidades a la versión correcta:

Listado de Código 5.13: Editar semanage.conf

~# vim /etc/selinux/semanage.conf
# Busque la línea policy-version y elimine el comentario para definirlo a la versión correcta
policy-version = 24

Importante: Si está actualizando el núcleo de su sistema, se puede dar soporte a versiones más altas. En este caso, bien, deje la varible de nuevo sin definir para "saltar" de forma automática a una versión más alta of fuércela a la versión más alta.

Portage no puede etiquetar los ficheros porque "setfiles" ha dejado de funcionar

Portage utiliza la orden setfiles para definir la etiquetas de los ficheros que instala. Sin embargo, esta orden es un ejecutable enlazado dinámicamente, por lo que cualquier actualización, depende de la librerías enlazadas (libselinux.so, libsepol.so, libaudit.so y por supuesto libc.so), las cuales podrían causar que la aplicación fallara. La solución estándar de Gentoo (revdep-rebuild) no funcionará ya que la herramienta intentará reconstruir policycoreutils, que no podrá instalarse porque Portage no puede definir las etiquetas de los ficheros.

La solución es reconstruir policycoreutils deshabilitando el soporte selinux de Portage y etiquetar manualmente los ficheros instalados usando chcon, basado en los datos que ofrece matchpathcon.

Listado de Código 5.14: Recuperarse de fallos de instalación de Portage

# FEATURES="-selinux" emerge --oneshot policycoreutils
# for FILE in $(qlist policycoreutils); do \
CONTEXT=$(matchpathcon -n ${FILE}); chcon ${CONTEXT} ${FILE}; done

Ahora, Portage funcionará correctamente, etiquetando los ficheros de la forma correcta.

Las aplicaciones no cambian en una partición montada con nosuid

Si tiene sistemas de ficheros montados con la opción nosuid, entonces las aplicaciones iniciadas desde estos sistemas de ficheros no cambiarán al dominio apropiado. Esto se ha hecho de forma intencionada.

Por tanto, un binario passwd, aunque esté etiquetado de forma correcta con passwd_exec_t, no cambiará al dominio passwd_t si ese binario está almacenado en un sistema de ficheros montado con nosuid.

¿Por qué necesito autenticarme de nuevo cada vez que opero con guiones de inicio?

Cuando, como administrador, desee lanzar o parar demonios, necesitará hacerlo como system_u:system_r. Cambiar a este contexto es una operación altamente privilegiada (ya que está abandonando efectivamente el contexto de usuario y entrando en el contexto del sistema) y por lo tanto la configuración por defecto requiere que el usuario tenga que autenticarse de nuevo.

Puede cambiar este comportamiento si está utilizando PAM, editando /etc/pam.d/run_init y añadiendo la siguiente línea al principio:

Listado de Código 5.15: Cambio en la configuración pam de run_init para permitir que root no tenga que autenticarse una y otra vez

auth     sufficient     pam_rootok.so

Con esta configuración, puede ahora realizar sus actividades con los guiones de inicio mediante run_init y éste no le pedirá que se autentique una y otra vez:

Listado de Código 5.16: Usar run_init

# run_init rc-service local status
Authenticating swift.
 * status: started

¿Cómo utilizo SELinux con initramfs?

Actualmente no soportamos el arranque en modo forzado con una imagen initramfs (pero estamos trabajando en ello). A fecha de hoy, arranque en modo permisivo. Una vez el sistema haya arrancado, cambie a modo forzado (setenforce 1).

Si corre SELinux en un sistema en producción y no quisiera que los atacantes puedan cambiar a modo permisivo (incluso si tuvieran los privilegios necesarios), ajuste el booleano secure_mode_policyload. Cuando lo habilite, el modo forzado ya no podrá ser desactivado (hasta que reinicie).

Listado de Código 5.17: Cambiando secure_mode_policyload

# setsebool secure_mode_policyload on

Los accesos a través de xdm (o similar) fallan

Si accede a través de xdm, gdm, kdm, slim o cualquier otro gestor de acceso gráfico, puede que note que en modo permisivo su contexto no está activado, y en modo forzado simplemente no puede acceder.

La razón es que se necesita configurar PAM para incluir la presencia de SELinux en la gestión de su sesión:

Listado de Código 5.18: Actualizar el ajuste pam para gdm

...
session  required   pam_loginuid.so
session  optional   pam_console.so
session  optional   pam_selinux.so

Replique las llamadas hacia pam_selinux.so en los ficheros /etc/pam.d/gdm* (o similares dependiendo de su gestor de acceso gráfico).

¿Qué es SELinuxfs y dónde debería estar?

selinuxfs es, como sugiere su nombre, el sistema de ficheros de SELinux. Se trata de un pseudo-sistema de ficheros, lo que significa que se representa a través de ficheros y directorios, sin embargo, esos ficheros y directorios no están en su disco, sino que son generados por el núcleo Linux cada vez que se accede a los mismos.

El sistema de ficheros es usado por las utilidades de SELinux como una interfaz para consultar el estado de SELinux, el cual es mantenido por el núcleo Linux.

Historicamente (antes de libselinux-2.1.9), el punto de montaje del sistema de ficheros de SELinux debía ser /selinux. A partir de libselinux-2.1.9, la localización por defecto en la que se busca el sistema de ficheros es /sys/fs/selinux, aunque la librería todavía recurre a la localización original /selinux si no puede encontrarlo en el nuevo lugar.

Sin embargo, la localización /sys/fs/selinux actualmente tiene un problema para aquellos sistemas que no utilizan initramfs, esto significa que /sys no se ha montado cuando init intenta montar /sys/fs/selinux. Estamos trabajando en la forma de resolver esta cuestión, por lo que de momento, mantendremos /selinux activo.



Imprimir

Página actualizada 21 de mayo, 2012

Sumario: Preguntas frecuentes (FAQ) sobre la integración de SELinux con Hardened. Este documento con preguntas frecuentes es una colección de soluciones que se han discutido en IRC, listas de correo, foros o en otros lugares.

Chris PeBenito
Autor

Sven Vermeulen
Autor

José María Alonso
Traductor

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.