Este documento proporciona información sobre cómo trabajar con SELinux, incluyendo el control de usuarios finales, verificar el contexto de seguridad de procesos, usuarios y archivos, y asignar nuevas etiquetas de seguridad a archivos y directorios. Explica cómo mover y copiar archivos de manera segura usando opciones como -Z y -p, y cómo restaurar las etiquetas predeterminadas usando el comando restorecon.
1. 757
Trabajar con SELinux
SELinux presenta un nuevo paradigma de seguridad y nuevo grupo de prácticas y herramientas para
los administradores y algunos de los usuarios finales. Las herramientas y técnicas que se discuten en
este capítulo se enfocan en operaciones estándar que usuarios finales, administradores y analistan
realizan.
45.1. Control de Usuario Final de SELinux
En general, los usuarios finales tienen poca interacción con SELinux cuando Red Hat Enterprise Linux
esta ejecutando la política objetivo. Esto se debe a que los usuarios están ejecutando en el dominio
de unconfined_t junto con el resto del sistema a excepción de los demonios objetivo.
En la mayoria de los casos , los controles DAC estándares le evitan el tener que realizar tareas para
las cuales usted no tiene el acceso o los permisos requeridos antes de que se le consulte a SELinux.
Por lo tanto es muy probable que usted nunca genere un mensaje avc: denied.
Las siguientes secciones cubren las tareas y práticas generales que los usuarios finales pueden llegar
a necesita realizar en un sistema Red Hat Enterprise Linux. Estas tareas aplican a los usurios de tod
nivel de privilegios y no sólamente a usuarios finales.
45.1.1. Mover y Copiar Archivos
En operaciones del sistema de archivos, el contexto de seguridad debe ser considerado en términos
de la etiqueta del archivo, el proceso que lo evalúa y los directorios en donde está ocurriendo la
operación. Debido a esto, el mover y copiar archivos con mv y cp puede llegar a tener resultados
inesperados.
Copiar Archivos: Opciones para cp de SELinux
A menos de que especifique lo contrario, cp sigue el comportamiento predeterminado de crear un
archivo nuevo con base en el dominio del proceso de creación y el tipo de directorio objetivo. A
menos de que haya una reglas espcifica para configuara la etiqueta, el archivo hereda el tipo del
directorio objetivo.
Utilice la opción -Z user:role:type para especificar la etiqueta requerida para el nuevo archivo.
La opción -p (or --preserva=modo, propiedad, sellos de fecha) preserva los atributos
especificados y si es posible preserva los atribuots adicionales como enlaces.
touc h bar foo
ls -Z ba r foo
-rw-rw-r-- a use r auser user_u:object_r:user_home _t bar
-rw-rw-r-- a use r auser user_u:object_r:user_home _t foo
Si utiliza el comando cp sin ningún argumento de línea de comando adicional se creará una copia del
archivo en la nueva ubicación utilizando el tipo predeterminado del proceso de cración y el directorio
objetivo. En este caso, debido a que no aplica ninguna regla especifica a cp y /tmp, el nuevo archivo
tiene el tipo del directorio padre:
2. 758
Verificar el Contexto de Seguridad de un Proceso, Usuario u Objeto de Archivo
cp bar /tmp
ls -Z /tmp/ba r
-rw-rw-r-- a user auser user_u:object_r:tmp_t /tmp/bar
El tipo tmp_t es el tipo predeterminado para archivos temporales.
Utilice la opción -Z para especificar la etiqueta para el nuevo archivo:
cp -Z user_u:object_r:user_home_t foo /tmp
ls -Z /tmp/foo
-rw-rw-r-- a user auser user_u:object_r:user_home _t /tmp/foo
Mover Archivos: SELinux O pciones para mv
Moving files with mv retains the original type associated with the file. Care should be taken using this
command as it can cause problems. For example, if you move files with the type user_home_t into
~/public_html, then the httpd daemon is not able to serve those files until you relabel them. Refer
to Sección 45.1.3, “Nuevas Etiquetas para un Archivo o Directorio” for more information about file
labeling.
Comando Comportamiento
mv The file retains its original label. This may cause problems,
confusion, or minor insecurity. For example, the tmpwatch
program running in the sbin_t domain might not be allowed
to delete an aged file in the /tmp directory because of the file's
type.
cp Hace una copia del archivo utilizando el comportamiento
predeterminado con base en el dominio del procesode
creación (cp) y el tipo del directorio objetivo.
cp -p Hace una copia del archivo preservando los atributos
especificados y los contextos de seguridad si es posible. Los
atributos predeterminados son mode, ownership y timestamps.
Los atributos adicionales son links y all.
cp -Z <user:role:type> Hace una copia del archivo con las etiquetas especificadas. La
opción -Z es sinónimo de --context.
Tabla 45.1. Comportamiento de los Comandos mv y cp
45.1.2. Verificar el Contexto de Seguridad de un Proceso, Usuario u
Objeto de Archivo
Verificar un ID de Proceso
In Red Hat Enterprise Linux, the -Z option is equivalent to --context, and can be used with the ps,
id, ls, and cp commands. The behavior of the cp command with respect to SELinux is explained in
Tabla 45.1, “Comportamiento de los Comandos mv y cp”.
El siguiente ejemplo es una pequeña muestra de la salida del comando ps. La mayoría de los
procesos están ejecutando en el dominio unconfined_t, con pocas excepciones.
3. 759
Verificar el Contexto de Seguridad de un Proceso, Usuario u Objeto de Archivo
[user@localhost ~]$ ps auxZ
LABEL USER PID %CPU %MEM VSZ RSS TTY STAT START
TIME COMMAND
syste m_u:syste m_r:init_t root 1 0.0 0.1 2032 620 ? Ss 15:09
0:00 init [5]
syste m_u:syste m_r:kernel_t root 2 0.0 0.0 0 0 ? S 15:09
0:00 [migra tion/0]
syste m_u:syste m_r:kernel_t root 3 0.0 0.0 0 0 ? SN 15:09
0:00 [ksoftirqd/0]
user_u:system_r:unc onfined_t user 3122 0.0 0.6 6908 3232 ? S 16:47
0:01 /usr/libe xec/gc onfd-2 5
user_u:system_r:unc onfined_t user 3125 0.0 0.1 2540 588 ? S 16:47
0:00 /usr/bin/gnome-keyring-daemon
user_u:system_r:unc onfined_t user 3127 0.0 1.4 33612 6988 ? Sl 16:47
0:00 /usr/libe xec/gnome -settings-dae mon
user_u:system_r:unc onfined_t user 3144 0.1 1.4 16528 7360 ? Ss 16:47
0:01 me tac ity --s m-clie nt-id=de fa ult1
user_u:system_r:unc onfined_t user 3148 0.2 2.9 79544 14808 ? Ss 16:47
0:03 gnome-panel --s m-c lie nt-id de fa ult2
Verificar un ID de Usuario
You can use the -Z option with the id command to determine a user's security context. Note that with
this command you cannot combine -Z with other options.
[root@localhost ~]# id -Z
user_u:syste m_r:unconfine d_t
Observe que no puede utilizar la opción -Z con el comando id para inspeccionar el contexto de
seguridad de un usario diferente. Es decir que usted sólamente puede visualizar el contexto de
seguridad del usuario conectado actualmente:
[user@localhost ~]$ id
uid=501(user) gid=501(user) groups=501(user) context=user_u:syste m_r:unc onfine d_t
[user@localhost ~]$ id root
uid=0(root) gid=0(root) groups=0(root),1(bin),2(dae mon),3(sys),4(a dm),6(disk),10(wheel)
[user@loca lhost ~]$ id -Z root
id: ca nnot displa y c onte xt when selinux not ena ble d or when displaying the id
of a differe nt use r
Verifica el ID de un Archivo
Puede utilizar la opción -Z con el comando ls para agrupar información con formato común largo.
Puede visualizar información sobre el modo, usuario, grupo, contexto de seguridad y nombre del
archivo.
cd /etc
ls -Z h* -d
drwxr-xr-x root root syste m_u:objec t_r:e tc _t ha l
-rw-r--r-- root root system_u:object_r:etc_t host.conf
-rw-r--r-- root root user_u:object_r:etc_t hosts
4. 760
Verificar el Contexto de Seguridad de un Proceso, Usuario u Objeto de Archivo
-rw-r--r-- root root syste m_u:objec t_r:etc _t hosts.a llow
-rw-r--r-- root root syste m_u:objec t_r:etc _t hosts.ca nna
-rw-r--r-- root root syste m_u:objec t_r:etc _t hosts.de ny
drwxr-xr-x root root syste m_u:object_r:hotplug_etc _t hotplug
drwxr-xr-x root root syste m_u:object_r:etc _t hotplug.d
drwxr-xr-x root root syste m_u:objec t_r:httpd_sys_c onte nt_t htdig
drwxr-xr-x root root syste m_u:object_r:httpd_c onfig_t httpd
45.1.3. Nuevas Etiquetas para un Archivo o Directorio
Puede que necesite volver a etiquetar un archivo cunaod lo está moviendo o copiando a directorios
especiales relacionados con los demonios objetivo así como los directorios ~/public_html o
cuando se escriben scripts que funcionan en directorios fuera de /home.
Hay dos tipos generales de operaciones para volver a etiquetar:
• Cambiando deliberadamente el tipo de archivo
• Restablecer archivos a su estado predeterminado de acuerdo con la política
There are also relabeling operations that an administrator performs. These are covered in
Sección 45.2.2, “Creación de Etiquetas Nuevas para Sistemas de Archivos”.
Tip
Gran parte del control de permisos de SELinux en la política objetivo es el Tipo de
Refuerzo (TE). Por lo tanto, generalmente puede ignorar la información de la
etiqueta de seguridad sobre el usuario y el rol y enfocarse en sólo cambiar el tipo.
Normalmente no necesita considerar la configuración del rol y del usuario en los
archivos.
Nota
If relabeling affects the label on a daemon's executable, you should restart the
daemon to be sure it is running in the correct domain. For example, if /usr/sbin/
mysqld has the wrong security label, and you address this by using a relabeling
operation such as restorecon, you must restartmysqld after the relabeling
operation. Setting the executable file to have the correct type (mysqld_exec_t)
ensures that it transitions to the proper domain when started.
Utilice el comando chcon para cambiar un archivo al tipo correcto. Necesita saber el tipo correcto
que quiere aplicar para utilizar este comando. Los directorios y archivos en el siguiente ejemplo se
encuentran etiquetados con el tipo predeterminado definido por los objetos del sistema de archivos
creados en /home:
cd ~
ls -Zd public _html/
drwxrwxr-x ause r auser user_u:object_r:use r_home _t public_html/
ls -Z web_files/
-rw-rw-r-- a user ause r user_u:object_r:user_home_t 1.html
-rw-rw-r-- a user ause r user_u:object_r:user_home_t 2.html
-rw-rw-r-- a user ause r user_u:object_r:user_home_t 3.html
5. 761
Nuevas Etiquetas para un Archivo o Directorio
-rw-rw-r-- auser auser user_u:object_r:user_home _t 4.html
-rw-rw-r-- auser auser user_u:object_r:user_home _t 5.html
-rw-rw-r-- auser auser user_u:object_r:user_home _t index.html
Si mueve estos archivos al directorio public_html retienen el tipo original:
mv web_files/* public _html/
ls -Z public _html/
-rw-rw-r-- auser auser user_u:object_r:user_home _t 1.html
-rw-rw-r-- auser auser user_u:object_r:user_home _t 2.html
-rw-rw-r-- auser auser user_u:object_r:user_home _t 3.html
-rw-rw-r-- auser auser user_u:object_r:user_home _t 4.html
-rw-rw-r-- auser auser user_u:object_r:user_home _t 5.html
-rw-rw-r-- auser auser user_u:object_r:user_home _t index.html
Para que estos archivos sean visibles desde una carpeta especial HTML de usuarios públicos, ellos
necesitan tener un tipo httpd que tenga permiso de leer, aumiendo que el Servidor HTTP Apache se
encuentra configurado para UserDir y que el valor boleano httpd_enable_homedirs esté activado.
chcon -R -t httpd_user_c ontent_t public _html/
ls -Z public _html
-rw-rw-r-- auser auser use r_u:object_r:httpd_user_c onte nt_t 1.html
-rw-rw-r-- auser auser use r_u:object_r:httpd_user_c onte nt_t 2.html
-rw-rw-r-- auser auser use r_u:object_r:httpd_user_c onte nt_t 3.html
-rw-rw-r-- auser auser use r_u:object_r:httpd_user_c onte nt_t 4.html
-rw-rw-r-- auser auser use r_u:object_r:httpd_user_c onte nt_t 5.html
-rw-rw-r-- auser auser use r_u:object_r:httpd_user_c onte nt_t index.html
ls -Z public _html/ -d
drwxrwxr-x auser auser user_u:objec t_r:httpd_user_c onte nt_t public _html/
Tip
Si el archivo no tiene etiqueta así como un archivo creado mientras que SELinux
estaba deshabilitado en el kernel, necesita darle una etiqueta completa con chcon
system_u:object_r:shlib_t foo.so. De otra manera, recibirá un error sobre
aplicación de un contexto parcial a un archivo sin etiqueta.
Use the restorecon command to restore files to the default values according to the policy. There
are two other methods for performing this operation that work on the entire file system: fixfiles or
a policy relabeling operation. Each of these methods requires superuser privileges. Cautions against
both of these methods appear in Sección 45.2.2, “Creación de Etiquetas Nuevas para Sistemas de
Archivos”.
The following example demonstrates restoring the default user home directory context to a set of files
that have different types. The first two sets of files have different types, and are being moved into a
directory for archiving. Their contexts are different from each other, and are incorrect for a standard
user's home directory:
ls -Z /tmp/
-rw-rw-r-- auser auser user_u:object_r:tmp_t /tmp/file1
-rw-rw-r-- auser auser user_u:object_r:tmp_t /tmp/file2
6. 762
Nuevas Etiquetas para un Archivo o Directorio
-rw-rw-r-- auser auser user_u:object_r:tmp_t /tmp/file3
mv /tmp/{1,2,3} arc hive s/
mv public_html/* arc hives/
ls -Z archives/
-rw-rw-r-- auser auser user_u:object_r:tmp_t file1
-rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t file1.html
-rw-rw-r-- auser auser user_u:object_r:tmp_t file2
-rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t file2.html
-rw-rw-r-- auser auser user_u:object_r:tmp_t file3
-rw-rw-r-- auser auser use r_u:object_r:httpd_user_c onte nt_t file3.html
-rw-rw-r-- auser auser use r_u:object_r:httpd_user_c onte nt_t file4.html
-rw-rw-r-- auser auser use r_u:object_r:httpd_user_c onte nt_t file5.html
-rw-rw-r-- auser auser use r_u:object_r:httpd_user_c onte nt_t index.html
The archives/ directory already has the default type because it was created in the user's home
directory:
ls -Zd arc hive s/
drwxrwxr-x auser auser user_u:object_r:user_home_t arc hives/
Utilizando el comando restorecon para darle una nueva etiqueta a los archivos utiliza los contextos
de los archivos predeterminados establecidos por la política así que estos archivos se les da la
etiqueta predeterminada para el directorio actual.
/sbin/restorecon -R arc hives/
ls -Z archives/
-rw-rw-r-- auser auser system_u:object_r:user_home _t file1
-rw-rw-r-- auser auser system_u:object_r:user_home _t file1.html
-rw-rw-r-- auser auser system_u:object_r:user_home _t file2
-rw-rw-r-- auser auser system_u:object_r:user_home _t file2.html
-rw-rw-r-- auser auser system_u:object_r:user_home _t file3
-rw-rw-r-- auser auser system_u:object_r:user_home _t file3.html
-rw-rw-r-- auser auser system_u:object_r:user_home _t file4.html
-rw-rw-r-- auser auser system_u:object_r:user_home _t file5.html
-rw-rw-r-- auser auser system_u:object_r:user_home _t index.html
45.1.4. Creación de Archivos que Retienen Contextos de Seguridad
Puede utilizar las utilidades tar o star para crear ficheros que retengan contextos de seguridad
SELinux. El siguiente ejemplo utiliza star para demostrar como crear tal fichero. Necesita utilizar
las opciones apropiadas -xattr y -H=exustar para asegurarse de que los atributos extras son
capturados y de que el encabezamiento para el archivo *.star sea de un tipo que soporta por
completo xattrs. Consulte la página del manual patra obtener mayor información sobre estas y otras
opciones.
The following example illustrates the creation and extraction of a set of html files and directories. Note
that the two directories have different labels. Unimportant parts of the file context have been omitted
for printing purposes (indicated by ellipses '...'):
ls -Z public _html/ we b_file s/
public _html/:
-rw-rw-r-- a user a user ...httpd_user_c onte nt_t 1.html
7. 763
Creación de Archivos que Retienen Contextos de Seguridad
-rw-rw-r-- a user a user ...httpd_user_c onte nt_t 2.html
-rw-rw-r-- a user a user ...httpd_user_c onte nt_t 3.html
-rw-rw-r-- a user a user ...httpd_user_c onte nt_t 4.html
-rw-rw-r-- a user a user ...httpd_user_c onte nt_t 5.html
-rw-rw-r-- a user a user ...httpd_user_c onte nt_t index.html
we b_files/:
-rw-rw-r-- a user ause r user_u:object_r:user_home_t 1.html
-rw-rw-r-- a user ause r user_u:object_r:user_home_t 2.html
-rw-rw-r-- a user ause r user_u:object_r:user_home_t 3.html
-rw-rw-r-- a user ause r user_u:object_r:user_home_t 4.html
-rw-rw-r-- a user ause r user_u:object_r:user_home_t 5.html
-rw-rw-r-- a user ause r user_u:object_r:user_home_t inde x.html
El siguiente comando crea el fichero reteniendo todos los contextos de seguridad de SELinux:
star -xattr -H=e xustar -c -f a ll_we b.sta r public _html/ we b_file s/
star: 11 blocks + 0 bytes (total of 112640 bytes = 110.00k).
Utilice el comando ls con la opción -Z para validar el contexto de seguridad:
ls -Z all_web.star
-rw-rw-r-- a user auser user_u:object_r:user_home _t all_web.star
Ahora puede copiar el fichero a un directorio diferente. En este ejemplo, el fichero es copiado a /
tmp. Si no hay una política especifica para tomar un tipo temporal derivativo, el comportamiento
predeterminado es adquirir el tipo tmp_t.
cp all_we b.sta r /tmp/ cd /tmp/
ls -Z all_web.star
-rw-rw-r-- a use r a user user_u:objec t_r:tmp _t a ll_we b.sta r
Ahora puede expandir los ficheros utilizando star y restablece los atributos extendidos:
star -xattr -x -f all_web.star
star: 11 blocks + 0 bytes (total of 112640 bytes = 110.00k).
ls -Z /tmp/public _html/ /tmp/we b_file s/
/tmp/public _html/:
-rw-rw-r-- auser auser ...httpd_sys_c onte nt_t 1.html
-rw-rw-r-- auser auser ...httpd_sys_c onte nt_t 2.html
-rw-rw-r-- auser auser ...httpd_sys_c onte nt_t 3.html
-rw-rw-r-- auser auser ...httpd_sys_c onte nt_t 4.html
-rw-rw-r-- auser auser ...httpd_sys_c onte nt_t 5.html
-rw-rw-r-- auser auser ...httpd_sys_c onte nt_t inde x.html
/tmp/we b_files/:
-rw-rw-r-- auser auser user_u:object_r:user_home _t 1.html
-rw-rw-r-- auser auser user_u:object_r:user_home _t 2.html
-rw-rw-r-- auser auser user_u:object_r:user_home _t 3.html
-rw-rw-r-- auser auser user_u:object_r:user_home _t 4.html
-rw-rw-r-- auser auser user_u:object_r:user_home _t 5.html
-rw-rw-r-- auser auser user_u:object_r:user_home _t inde x.html
8. 764
Creación de Archivos que Retienen Contextos de Seguridad
Atención
Si utiliza una ruta absoluta cuando crea un fichero utilizando star, el fichero se
expande en esa misma ruta. Por ejemplo, un fichero hecho son este comando
restablece los archivos a /var/log/httpd/:
star -xattr -H=e xustar -c -f httpd_logs.star /var/log/httpd/
Si trata de expandir este fichero, star emite una advertencia si los archivos en la
ruta son más nuevos que los que se encuentran el fichero.
45.2. Controles administrativos de SELinux
In addition to the tasks often performed by users in Sección 45.1, “Control de Usuario Final de
SELinux”, SELinux administrators could be expected to perform a number of additional tasks. These
tasks typically require root access to the system. Such tasks are significantly easier under the targeted
policy. For example, there is no need to consider adding, editing, or deleting Linux users from the
SELinux users, nor do you need to consider roles.
Esta sección cubre los tipos de tareas que se necesitan de un administrador que mantiene Red Hat
Enterprise Linux ejecutando SELinux.
45.2.1. Ver el Estado de SELinux
El comando sestatus proporciona una vista configurable al estado de SELinux. La forma más
simple de este comando muestra la siguiente información:
[root@localhost ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Polic y ve rsion: 21
Policy from config file: targeted
La opción -v incluye información sobre los contextos de seguridad de una serie de archivos que se
encuentran especificados en /etc/sestatus.conf:
[root @localhost ~]# sestatus -v
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Polic y ve rsion: 21
Policy from config file: targeted
Proc ess c onte xts:
Current c onte xt: user_u:syste m_r:unconfined_t
Init context: system_u:system_r:init_t
/sbin/minge tty syste m_u:syste m_r:getty_t
9. 765
Creación de Etiquetas Nuevas para Sistemas de Archivos
/usr/sbin/sshd syste m_u:syste m_r:unc onfine d_t:s0-s0:c 0.c 1023
File contexts:
Controlling term: use r_u:objec t_r:de vpts_t
/etc /passwd syste m_u:objec t_r:etc _t
/etc/shadow system_u:object_r:sha dow_t
/bin/ba sh syste m_u:objec t_r:shell_e xec _t
/bin/login syste m_u:obje ct_r:login_e xec _t
/bin/sh syste m_u:object_r:bin_t -> syste m_u:object_r:shell_e xec _t
/sbin/a ge tty syste m_u:objec t_r:getty_e xec _t
/sbin/init system_u:object_r:init_exec_t
/sbin/mingetty syste m_u:object_r:getty_e xec _t
/usr/sbin/sshd syste m_u:obje ct_r:sshd_e xec _t
/lib/libc.so. 6 syste m_u:object_r:lib_t -> syste m_u:objec t_r:lib_t
/lib/ld-linux.so. 2 syste m_u:object_r:lib_t -> syste m_u:object_r:ld_so_t
La -b presenta el estado actual de los valores boleanos. Puede utilizar esto en combinación con grep
u otras herramientas para determinar el estado de valores boleanos en particular:
[root@host2a ~]# sesta tus -b | gre p httpd | grep on$
httpd_builtin_scripting on
httpd_disa ble _tra ns on
httpd_ena ble_cgi on
httpd_enable_homedirs on
httpd_unifie d on
45.2.2. Creación de Etiquetas Nuevas para Sistemas de Archivos
Puede que nunca necesite crear etiquetas nuevas para un sistemas de archivos completo.
Usualmente esto sólamente ocurre cuando crea una etiqueta nueva para un sistema de archivos por
primera vez para SELinux o cuando está cambiando entre diferentes tipos de políticas así como el
cambio de la política objetivo a la estricta.
Cre ación de Etique tas Nue vas para un Siste ma de Archivos Utilizando init
El método recomendado para crear una etiqueta nueva para un sistemas de archivos es reinciando la
máquina. Esto permite que el proceso init realice la creación de una nueva etiqueta asegurándose
de que las aplicaciones tienen las etiquetas correctas cuando se inician y de que se inician en el
orden correcto. Si crea una nueva etiqueta para un sistema de archivos si reiniciarlo, puede que
algunos de los procesos continuen ejecutándose con un contexto incorrecto. Puede llegar a ser dificil
asegurarse manualmentede que todos los demonios son reiniciados y ejecutados en el contexto
correcto.
Utilice el siguiente procedimiento para cambiar la etiqueta de un sistema de archivos utilizando este
método.
touch /.autorelabel
reboot
En tiempo de arranque init.rc verifica la existencia de /.autorelabel. Si este archivo existe,
SELinux crea etiquetas nuevas para el sistema de archivos completo (utilizando el comando /sbin/
fixfiles -f -F relabel) y luego borra /.autorelabel.
10. 766
Creación de Etiquetas Nuevas para Sistemas de Archivos
Cre acón de Etique tas Nuevas para un Siste ma de Archivos utilizando fixfiles
Es posible crear una etiqueta nueva para un sistema de archivos utilizando el comando fixfiles o
con base en la base de datos RPM:
Utilice el siguiente comando para crear una etiqueta nueva para un sistemas de archivos utilizando
sólamente el comando fixfiles:
fixfiles relabel
Utilice el siguiente comando para crear etiquetas nuevas para un sistema de archivos con base en la
base de datos RPM:
fixfiles -R <packagenam e> restore
Utilizando fixfiles para restablecer contextos de los paquetes es más seguro y rápido.
Atención
El ejecutar fixfiles en el sistema de archivos completo sin reiniciar puede hacer
inestable el sistema.
Si la operación de creación de una nueva etiqueta aplica una nueva política que es
diferente de la política que se encontraba cuando el sistema se reinició, los procesos
existentes pueden estar ejecutándose en dominios incorrectos e inseguros. Por
ejemplo, un proceso puede estar en un dominio que no es una transición permitida
para ese proceso en la nueva política, dados los permisos inesperados en sólo ese
proceso.
Además una de las opciones para fixfiles relabel pide aprobación para
vaciar /tmp/ ya que no es posible crear una etiqueta nueva de manera confiable
para /tmp/. Debido a que fixfiles se ejecutacomo root, se borran los archivos
temporales de los cuales dependen las aplicaciones. Esto puede hacer el sistema
inestable o que se comportede una manera inesperada.
45.2.3. Administración de Directorios Principales NFS
En Red Hat Enterprise Linux 5, la mayoría de los demonios objetivo no interactúan con los datos de
usuarios y no son afectados por los directorios principales montados con NFS. El Servidor Apache
HTTP es una excepción. Por ejemplo los scripts CGI que se encuentran montados en el sistemade
archivos tienen el tipo nfs_t, el cual es un tipo que no se le permite ejecutar a httpd_t.
Si tiene problemas con el tipo predeterminado de nfs_t trate de montar los directorios principales
con un contexto diferente:
mount -t nfs -o c onte xt=user_u:objec t_r:user_home _dir_t
fileserver.exa mple.c om:/share d/homes/ /home
11. 767
Otorgar Acceso a un Directorio o a un Arbol
Atención
Sección 45.2.9, “Especificación del Contexto de Seguridad del Sistema de Archivos
Entero” explains how to mount a directory so that httpd can execute scripts. If you
do this for user home directories, it gives the Apache HTTP Server increased access
to those directories. Remember that a mountpoint label applies to the entire mounted
file system.
Las versiones futuras de la política de SELinux abordan la funcionalidad de NFS.
45.2.4. Otorgar Acceso a un Directorio o a un Arbol
De manera similay a los permisos estándares de Linux DAC, un demonio objetivo tiene que tener
permisos SELinux para poder descender en el árbol de directorios. Esto no significa que un directorio
y su cotenido necesitan tener el mismo tipo. Hay muchos tipos así como root_t, tmp_t y usr_t
que otorgan acceso de lectura para un directorio. Estos tipos son apopiados para directorios que
no contienen ninguna información confidencial y que usted quiere que sean ampliamente leíbles.
También se pueden utilizar para un directorio padre de directorios más seguros con contextos
diferentes.
Si está trabajando con un mensaje avc: deniedhay algunos problemas comunes que surgen con
la traversal del directorio. Por ejemplo, muchos programas ejecutan un comando euqivalente a ls -
l / que no es necesario para su operación pero que genera un mensaje de rechazo en los registros.
Para estos necesita crear una regla dontaudit en su archivo local.te.
Al tratar de interpretar mensajes de rechazo de AVC no se confunda por el componente path=/.
La ruta no está relacionada con la etiqueta para el sistema de archivos root, /. De hecho es relativo al
root del sistema de archivos en el nodo del dipositivo. Por ejemplo, si su directorio /var/ se encuentra
ubicado en un dispositivo LVM (Administración de Volúmenes Lógicos
1
), /dev/dm-0, el nodo
dispositivo es identificado en el mensaje como dev=dm-0.Cuando vea path=/ en este ejemplo, ese
es el nivel superior del dispositivo LVM dm-0, no necesariamente el mismo que la designación del
sistema de archivos root /.
45.2.5. Copias de Seguridad y Restauración del Sistema
Refer to the explanation in Sección 45.1.4, “Creación de Archivos que Retienen Contextos de
Seguridad”.
45.2.6. Activación o Desactivación del Refuerzo
You can enable and disable SELinux enforcement at runtime or configure it to start in the correct mode
at boot time, using the command line or GUI. SELinux can operate in one of three modes: disabled,
meaning not enabled in the kernel; permissive, meaning SELinux is running and logging but not
controlling permissions; or enforcing, meaning SELinux is running and enforcing policy.
Utilice el comando setenforce para cambiar entre los modos permisivo y reforzar durante el tiempo
de ejecución. Utilice setenforce 0 para entrar en modo permisivo y utilice setenforce 1 para
entrar en modo de reforzamiento.
LVM es el agrupamiento físico en los pools virtuales que se particionan en volúmenes lógicos.
12. 768
Otorgar Acceso a un Directorio o a un Arbol
El comando sestatus presenta el modo actual y el modo del archivo de configuración referenciado
durante el arranque:
sestatus | grep -i mode
Curre nt mode: permissive
Mode from config file: permissive
Observe que el cambio del refuerzo durante tiempo de ejecución no afecta la configuración de tiempo
de arranque:
setenforce 1
sestatus | grep -i mode
Current mode: enforcing
Mode from config file: permissive
También puede desactivar el modo de refuerzo para un sólo demonio. Por ejemplo, si está tratando
de resolver problemas del demonio named y SELinux entonces puede apagar el refuerzo para sólo
ese demonio.
Utilice el comando getsebool para obtener el estado actual del valor booleano:
[root@host2a ~]# getsebool name d_disable_trans
named_disable_trans --> off
Utilice el siguiente comando para desactivar el modo de refuerzo para este demonio:
[root@host2a ~]# setsebool na med_disable_trans 1
[root@host2a ~]# getsebool name d_disable_trans
named_disable_trans --> on
Nota
Esto configura el valor del tiempo de ejecución sólamente. Utilice la opción -P para
hacer persistentes lo cambios a través de los reinicios.
Any *_disable_trans booleans that are set to "on" invoke the conditional that prevents
the process from transitioning to the domain on execution.
Utilice el siguiente comando para ver cuales de estos valores booleanos están configurados:
ge tse bool -a | gre p disa ble.*on
httpd_disa ble _tra ns=1
mysqld_disable _trans=1
ntpd_disa ble _tra ns=1
Puede configurar cualquier número de valores booleanos utilizando el comando setsebool:
13. 769
Activación o Desactivación del Refuerzo
setsebool -P httpd_disa ble_trans=1 mysqld_disable_trans=1 ntpd_disa ble_trans=1
You can also use togglesebool <boolean_name> to change the value of a specific boolean:
[root@host2a ~]# ge tse bool httpd_disa ble _tra ns
httpd_disa ble _tra ns --> off
[root@host2a ~]# toggle se bool httpd_disa ble _tra ns
httpd_disable_trans: active
Puede configurar todas estas características utilizando system-config-selinux. Se utilizan los
mismos archivos de configuración así que los cambios aparecen bidireccionalmente.
Cambio de un Valor Boole ano en Tiempo de Ejecución
Utilice el siguiente procedimiento para cambiar un valor boolenao en tiempo de ejecución utilizando el
GUI.
Nota
Se requieren privilegios de administrador para realizar este procedimiento.
1. En el menú Sistema vaya a Administración y luego haga click en Nivel de Seguridad y
Cortafuegos para visualizar el diálogo de Configuración del Nivel de Seguridad.
2. Luego haga click en la pestaña SELinux y después en Configuración SELinux.
3. En la lista de selección haga click en la entrada Nombre del Servicio y seleccione la opción
Desactivar la protección SELinux para un demonio nombrado.
4. Haga click sobre OK para aplicar el cambio. Observe que el recargar la política puede tomar un
poco de tiempo.
14. 770
Activación o Desactivación del Refuerzo
Figura 45.1. Using the Security Level Configuration dialog box to change a runtime boolean.
Si quiere controlar estas características con scripts puede usar los comandos setenforce(1),
getenforce(1) y selinuxenabled(1).
45.2.7. Activar o Desactivar SELinux
Importante
Los cambios que realice a los archivos mientras que SELinux se encuentra
desactivado puede llegar a darles una etiqueta de seguridad inesperada y los arcivos
nuevos no tendrán una etiqueta. Puede que necesite darle una etiqueta nueva a una
parte o para todo el sistema de archivos despúes de re-activar SELinux.
Desde la línea de comandos puede editar el archivo /etc/sysconfig/selinux. Este archivo es un
symlink a /etc/selinux/config. El archivo de configuraciónese explíca por si mismo. El cambiar
15. 771
Cambio de la Política
el valor de SELINUX o SELINUXTYPE cambia el estado de SELinux y el nombre de la política que se
utiliza la proxima vez que el sistema arranca.
[root@host2a ~]# cat /etc/sysconfig/selinux
# This file controls the state of SELinux on the syste m.
# SELINUX= can ta ke one of these three va lues:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instea d of e nforc ing.
# disabled - SELinux is fully disabled.
SELINU X=permissive
# SELINUXTYPE= type of polic y in use. Possible va lues are:
# targeted - Only targete d net work daemons are protected.
# strict - Full SELinux protection.
SELINUXT YP E=targeted
# SETLOCALDEFS= Check loc al definition c ha nges
SETLOCALDEFS=0
Cambio del Modo de SELinux Utilizando GUI
Utilice el siguiente procedimiento para cambiar el modo de SELinux utilizando GUI.
Nota
Necesita privilegios de administrador para realizar este procedimiento.
1. En el menú Sistema vaya a Administración y luego haga click en Nivel de Seguridad y
Cortafuegos para visualizar el diálogo de Configuración del Nivel de Seguridad.
2. Haga click en la pestaña SELinux
3. En Configuración SELinux puede selecionar Deshabilitado, Reforzar o Permisivo y
luego haga click en OK.
4. Si lo cambió de Habilitado a Deshabilitado o viceversa neceita reiniciar las máquina para
que tenga efecto el cambio.
Los cambios realizados utilizando este diálogo se reflejan de inmediato en /etc/sysconfig/
selinux.
45.2.8. Cambio de la Política
Esta sección proporciona una breve introducción para utilizar políticas personalizadas en su sistema.
Una discución completa sobre este tema se encuentra más alla del alcance de este documento.
Para cargar una política diferente en su sistema cambie la siguiente línea en /etc/sysconfig/
selinux:
SEL IN U XT YPE =<policynam e>
16. 772
Cambio de la Política
where <policyname> is the policy name directory under /etc/selinux/. This assumes that you
have the custom policy installed. After changing the SELINUXTYPE parameter, run the following
commands:
touch /.autorelabel
reboot
Utilice el siguiente procedimiento para cargar una política diferente utilizando la utilidad system-
config-selinux:
Nota
Necesita privilegios de administrador para realizar este procedimiento.
1. Asegúrese de que la estructura del directorio para la política requerida se encuentra completa
bajo /etc/selinux .
2. En el menú Sistema vaya a Administración y luego haga click en Nivel de Seguridad y
Cortafuegos para visualizar el diálogo de Configuración del Nivel de Seguridad.
3. Haga click en la pestaña SELinux
4. En la lista Tipo de Política seleccione la política que desea cargar y luego haga click en OK.
Esta lista sólamente es visible si se instala más de una política.
5. Reinicie la máquina para que los cambios tengan efecto:
17. 773
Especificación del Contexto de Seguridad del Sistema de Archivos Entero
Figura 45.2. Using the Security Level Configuration dialog box to load a custom policy.
45.2.9. Especificación del Contexto de Seguridad del Sistema de
Archivos Entero
Puede utilizar el comando mount -o context= para configurar un contexto individual para un
sistema de archivos completo. Este puede ser un sistema de archivos que ya se encuentra montado y
que soporta xattrs o un sistema de archivos de red que obtiene una etiqueta genfs tal como cifs_t o
nfs_t.
Por ejemplo, si necesita que el Servidor HTTP Apache lea desde un directorio montado o
que se produzcaun loopback del sistema de archivos necesitará configurar el tipo como
httpd_sys_content_t:
mount -t nfs -o context=syste m_u:object_r:httpd_sys_c onte nt_t
server1.e xa mple.c om:/shared/scripts /var/www/c gi
18. 774
Especificación del Contexto de Seguridad del Sistema de Archivos Entero
Tip
Cuando soluciona problemas relacionados con httpd y SELinux reduce la
complejidad de su situación. Por ejemplo, si tiene el sistema de archivos montado en
/mnt y enlazado simbólicamente a /var/www/html/foo tiene dos contextos de
seguridad de los que se debe preocupar. Debido a que un contexto de seguridad es
de la clase de objeto file y el otro de tipo lnk_file, son creados de manera diferente
por l polític y puede llegar a tener lugar un comportamiento inesperado.
45.2.10. Cambio de la Categoria de Seguridad de un Archivo o
Usuario
45.2.11. Ejecución de un Comando en un Contexto de Seguridad
Especifico
Puede utilizar el comando runcon para ejecutar un comando en un cotexto específico. Esto esútil
para scripts o para probar políticas pero se debe asegurar de que es implementado de manera
correcta.
Por ejemplo, puede utilizar el siguiente comando para ejecutar un script para probar una posible mala
etiquetación del contenido. Los argumentos que aparecen después del comando son considerados
como parte del comando (en este ejemplo, ~/bin/contexttest es un script definido por el
usuario).
runcon -t httpd_t ~/bin/contexttest -ARG1 -ARG2
También puede especificar el contexto completo así:
runcon user_u:syste m_r:httpd_t ~/bin/contexttest
45.2.12. Comandos Utiles para Scripts
La siguiente es una lista de los comandos útiles introducidos con SELinux y los cuales le pueden ser
útiles al escribir scripts para ayudar a administrar su sistema:
getenforce
Este comando devuelve el estado de refuerzo de SELinux.
setenforce [ Enforcing | Permissive | 1 | 0 ]
Este comando controla el modo de refuerzo de SELinux. La opción 1 o Refuerzo le dice a
SELinux que entre el modo de refuerzo. La opción 0 o Permisivo le dice a SELinux que entre en
modo pasivo. Todavíase registran las violaciones de acceso pero no se previenen.
selinuxenabled
El comando sale con un estado 0 si se habilita SELinux y 1 si SELinux es deshabilitado.
19. 775
Cambio a un Rol Diferente
selinuxena bled echo $? 0
getsebool [-a] [boolean_name]
This command shows the status of all booleans (-a) or a specific boolean (<boolean_name>).
setsebool [-P] <boolean_name> value | bool1=val1 bool2=val2 ...
Este comando configura uno o más valores boolenaos. La opción -P hace que los cambios sean
persistentes en los reinicios.
togglesebool boolean ...
Este comando alterna la configuración de uno o más valores booleanos. Esto afecta la
configuración de los valores booleanos en la memoria sólamente y los cambios no son
persistentes en los reinicios.
45.2.13. Cambio a un Rol Diferente
Utilice el comando newrole para ejecutar una shell nueva con el tipo y/o rol especificado. El cambio
de roles típicamente sólo tiene sentido en la política estricta; la política objetivo generalmente está
restringida a un sólo rol. Cambiar los tipos puede ser útil para propositos de prueba, validación y
desarrollo.
newrole -r <role_r > -t <type_t> [-- [ARGS]...]
The ARGS are passed directly to the shell specified in the user's entry in the /etc/passwd file.
Nota
El comando newrole es parte del paquete policycoreutils-newrole, el cual
se necesita si instala la política MLS o la estricta. No es instalada por defecto en Red
Hat Enterprise Linux.
45.2.14. Cuando Reiniciar
La razón principal para reiniciar el sistema desde la perspectiva de SELinux es para dar etiquetas
nuevas al sistema de archivos. en ciertas ocasiones puede que necesite reinicar el sistema para
habilitar o deshabilitar SELinux.
45.3. Control Analista de SELinux
Esta sección describe algunas de las tareas comunes que un analista de seguridad puede llegar a
necesitar realizar en un sistema SELinux.
45.3.1. Activación de la Auditoría de Kernel
Como parte de un análisis de SELinux o de la solución de problemas pude que usted elija habilitar
una completa auditoría a nivel de kernel. Esto puede llegar a ser bastante verboso debido a que
genera uno o más mensajes de aditoría adicionales por cada mensaje de auditoría AVC. Para
habilitar este nivel de auditoría agregue el parámetro audit=1 a su línea de arranque de kernel ya
sea en el archivo /etc/grub.conf o en el menú GRUB en tiempo de arranque.
20. 776
Cambio a un Rol Diferente
Este es un ejemplo de una entrada de registro de auditoríacompleta cuando se le niega
acceso a httpd a ~/public_html porque el directorio no tiene un etiqueta de contenido
de web. Note que los sellos de fecha y el número serial el el cmpo de la auditoría son
idénticos en ambos casos. Esto hace más fácil el seguirle la pista a un evento específico en
los registros de auditoría:
Jan 15 08:03:56 hostname kernel:
audit(1105805036.075:2392892): avc: de nied { getattr
} for pid=2239 e xe =/usr/sbin/httpd
path=/home/auser/public_html dev=h db2 ino=921135
sconte xt=user_u:syste m_r:httpd_t
tconte xt=syste m_u:object_r:user_home _t tclass=dir
El siguiente mensaje de auditoría dice más sobre la fuente incluyendo la clase de llamada de
sistema involucrada mostrando que el http trató de iniciar el directorio:
Jan 15 08:03:56 hostname kernel:
audit(1105805036.075:2392892): syscall=195
exit=4294967283 a0=9ef88e0 a1=bfecc0d4 a2=a97ff4
a3=bfecc0d4 items=1 pid=2239 loginuid=-1 uid=48 gid=48
euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48
El siguiente mensaje proporciona más información sobre el objetivo:
Jan 15 08:03:56 hostname kernel: audit(1105805036.075:2392892):
item=0 name=/home/auser/public_html inode=921135 dev=00:00
El sello de número serial siempre es idéntico para un evento revisado en particular. El sello
de fecha pude que sea o no idéntico.
Nota
If you are using an audit daemon for troubleshooting, the daemon may
capture audit messages into a location other than /var/log/messages,
such as /var/log/ audit/audit.log.
45.3.2. Volcado y Vista de Registros
La implementación de Red Hat Enterprise Linux 5 enruta los mensajes de auditoría AVC a
/var/ log/messages. Puede utilizar cualquiera de las utilidades de búsqueda estándar
(por ejemplo, grep) para buscar líneas que contengan avc o audit.