SELinux

Security Enhanced Linux

setenforce modifica el modo actual de SELinux de un sistema.

El modo predeterminado de SELinux de un sistema se define en el archivo /etc/selinux/config.

[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# setenforce
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]# setenforce Enforcing
[root@localhost ~]# getenforce
Enforcing
Otra manera de configurar temporalmente el modo SELinux es pasar un parámetro al kernel en el arranque. El paso de un argumento del kernel de enforcing=0 hace que el sistema arranque en el modo permisivo. Un valor de 1 especificaría el modo de cumplimiento. SELinux se puede deshabilitar cuando se especifica el argumento selinux=0. Un valor de 1 habilitaría SELinux.

El archivo de configuración que determina el modo de SELinux en el que se establece al momento del arranque es /etc/selinux/config. Observe que contiene algunos comentarios útiles:

# 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,
#     minimum - Modification of targeted policy. Only selected processes
#               are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Use /etc/selinux/config para modificar el modo predeterminado de SELinux durante el arranque. En el ejemplo que se muestra, está configurado en el modo de cumplimiento.

Al pasar los argumentos del kernel selinux= o enforcing=, se anulan todos los valores predeterminados especificados en /etc/selinux/config.

[root@localhost]# cd /etc/selinux/targeted/contexts

[root@localhost]# less /etc/selinux/targeted/contexts/files/file_contexts

El comando semanage fcontext se usa para administrar las reglas de políticas de SELinux que determinan el contexto predeterminado para archivos y directorios.

restorecon aplica el contexto definido por la política de SELinux a archivos y directorios.

[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t '/websites(/.*)?'

[root@localhost ~]# restorecon -Rv /websites
La expresión regular extendida más común utilizada en las reglas fcontext es (/.*)?, que significa “como opción, coincidir con un / seguido por una serie de caracteres”. Busca coincidencias con el directorio detallado antes de la expresión y todo lo que contiene ese directorio de forma recursiva.

Los booleanos de SELinux son switches que modifican el comportamiento de la política de SELinux. Los booleanos de SELinux son reglas que pueden habilitarse o deshabilitarse. Los administradores de seguridad pueden utilizarlos para realizar ajustes selectivos en la política.

  • setsebool activa/desactiva reglas de políticas de SELinux.
  • semanage boolean -l muestra el valor persistente de booleanos de SELinux.

Las páginas del manual que finalizan con _selinux a menudo proporcionan información útil sobre booleanos de SELinux.

Apache puede publicar contenido web alojado en los directorios de inicio de los usuarios, pero SELinux evita esto de forma predeterminada. En este ejercicio, identificará y cambiará el booleano de SELinux que permitirá a Apache acceder a los directorios de inicio de los usuarios.

Recursos Archivos: /etc/httpd/conf.d/userdir.conf Máquinas: serverX Resultados: Tendrá un servidor web que publica contenido web desde los directorios de inicio de los usuarios.

El servidor web de Apache ya debe estar instalado y ejecutándose en serverX.example.com.

Inicie sesión como rroot en serverX. Habilite la función Apache que permite a los usuarios publicar contenido web desde sus directorios de inicio. Edite el archivo de configuración /etc/httpd/conf.d/userdir.conf y cambie la línea con la directiva UserDir para que se lea lo siguiente:

#UserDir disabled
UserDir public_html
[root@serverX ~]# vi /etc/httpd/conf.d/userdir.conf

[root@serverX ~]# grep '#UserDir' /etc/httpd/conf.d/userdir.conf
#UserDir disabled

[root@serverX ~]# grep '^ *UserDir' /etc/httpd/conf.d/userdir.conf
UserDir public_html

Reinicie el servicio web Apache para que tengan efecto los cambios realizados.

[root@serverX ~]# systemctl restart httpd

Cree algo de contenido web que sea publicado desde un directorio de inicio de los usuarios.

Inicie sesión como student en otra ventana y cree un directorio public_html.

[student@serverX ~]$ mkdir ~/public_html

Cree algo de contenido en un archivo index.html.

[student@serverX ~]$ echo 'This is student content on serverX.' > ~/public_html/index.html

Cambie los permisos en el directorio de inicio de student de modo que Apache pueda acceder al subdirectorio public_html.

[student@serverX ~]$ chmod 711 ~

Abra un navegador web en serverX e intente ver la siguiente URL: http://localhost/~&stu;/index.html. Recibirá un mensaje de error que dice que no tiene permiso para acceder al archivo.

En su ventana root, use el comando getsebool para ver si hay booleanos que restrinjan el acceso a los directorios de inicio.

[root@serverX ~]# getsebool -a | grep home
[... Output omitted ...]
httpd_enable_homedirs --> off
[... Output omitted ...]

Use setsebool para habilitar el acceso al directorio de inicio de forma persistente.

[root@serverX ~]# setsebool -P httpd_enable_homedirs on

Intente ver http://localhost/~&stu;/index.html nuevamente. Debería ver el mensaje “This is student content on serverX (Esto es contenido del estudiante en serverX).”