5.10. Mantención de las Etiquetas de SELinux
Estas secciones describen qué les pasa a los contextos SELinux cuando se copia, mueve y compacta archivos y directorios. También explica cómo preservar los contextos cuando se copia o se compacta.
5.10.1. Copia de Directorios y Archivos
Cuando se copia un archivo o directorio, se crea uno si no existía. El contexto de ese archivo o directorio nuevo está basado en las reglas de etiquetados predeterminada, y no el contexto original del archivo o directorio (a menos que se usen opciones para preservar el contexto original). Por ejemplo, los archivos creados en los directorios home de los usuarios se etiquetan con el tipo user_home_t:
$ touch archivo1
$ ls -Z archivo1
-rw-rw-r-- usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
Si un archivo se copia a otro directorio, tal como /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
Cuando el 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.
Cuando un archivo se copia sobre otro existente, el contexto del archivo existente se preserva, a menos que el usuario especifique opciones de 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.
Cuando se copia un archivo con el comando 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
En este ejemplo, 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.
Use el comando 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
En este ejemplo, el 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/.
Use el comando 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
En este ejemplo, el contexto se define en la opción -Z. Sin la opción -Z, archivo2 se etiquetaría con el contexto unconfined_u:object_r:user_home_t.
Cuando un archivo se copia sobre otro existente, el contexto del archivo existente se preserva (a menos que se use una opción para preservar los contextos). Por ejemplo:
# 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
En este ejemplo, se crean dos archivos: /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.
Importante
Copie archivos y directorios, en vez de moverlos. Esto ayuda a asegurar que se etiquetan con los contextos de SELinux correctos. Los contextos SELinux incorrectos pueden hacer que los procesos no puedan acceder a esos archivos y directorios.