GNU/Linux >> Tutoriales Linux >  >> Linux

15 ejemplos del comando chcon de SELinux para cambiar el contexto de seguridad

En SELinux, una de las tareas frecuentes que puede realizar es cambiar el contexto de seguridad de un objeto. Para esto, usará el comando chcon.

chcon significa Cambiar Contexto.

Este comando se usa para cambiar el contexto de seguridad de SELinux de un archivo.

Este tutorial explica los siguientes ejemplos de comandos chcon:

  1. Cambiar el contexto completo de SELinux
  2. Cambiar contexto utilizando otro archivo como referencia
  3. Cambiar solo el usuario en el contexto de SELinux
  4. Cambiar solo el rol en el contexto de SELinux
  5. Cambiar solo el tipo en el contexto de SELinux
  6. Cambiar solo el rango (nivel) en el contexto de SELinux
  7. Combina usuario, rol, tipo, nivel en chcon
  8. Comportamiento predeterminado de Chcon en enlace simbólico
  9. Forzar cambio de contexto SELinux de enlace simbólico
  10. Cambiar el contexto de SELinux de forma recursiva
  11. Mostrar detalles detallados de la operación chcon
  12. Comportamiento predeterminado de Chcon en enlaces simbólicos para recursivo
  13. Obligar a chcon a atravesar enlaces simbólicos especificados para recursivo
  14. Obligar a chcon a atravesar TODOS los enlaces simbólicos para recursivo
  15. Comportamiento de Chcon en / directorio raíz para cambios en todo el sistema

1. Cambiar el contexto completo de SELinux

Para ver el contexto de seguridad de un archivo, use la opción -Z (Z mayúscula) en el comando ls como se muestra a continuación.

# ls -lZ httpd.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 httpd.conf

En el ejemplo anterior, el contexto de seguridad del archivo httpd.conf es el siguiente:

unconfined_u:object_r:admin_home_t:s0

Ese es un contexto SELinux incorrecto para el archivo httpd.conf que se encuentra en el directorio /etc/httpd/conf.

Entonces, para cambiar el contexto de seguridad, use el siguiente comando chcon.

# chcon system_u:object_r:httpd_config_t:s0 httpd.conf

En el ejemplo anterior, hemos cambiado el contexto de seguridad del archivo httpd.conf al siguiente, que es el correcto.

system_u:object_r:httpd_config_t:s0

Podemos verificar esto usando el siguiente comando ls -lZ.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 httpd.conf

Nota:En el ejemplo anterior, estamos dando el contexto completo de SELinux de un archivo (es decir, usuario, función, tipo y rango) en el formato de usuario:función:tipo:rango sin dividirlo más.

Cada vez que se enfrente a algunos problemas relacionados con SELinux, es posible que tenga la tentación de simplemente Deshabilitar SELinux como explicamos anteriormente. Pero, en muchas situaciones, puede descubrir que es solo que el archivo en cuestión tiene un contexto de seguridad incorrecto, que se puede cambiar usando el comando chcon.

2. Cambiar contexto utilizando otro archivo como referencia

A veces es posible que no sepa qué contexto de SELinux debe configurar para un archivo.

En ese caso, puede usar el contexto de seguridad de otro archivo como referencia y usarlo para asignarlo a su archivo.

Básicamente, en lugar de especificar el contexto completo de SELinux para el archivo, solo está utilizando el contexto de otro archivo para su archivo.

En el siguiente ejemplo, vemos que tanto ssl.conf como httpd.conf tienen un contexto SELinux diferente.

# ls -lZ
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 ssl.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 httpd.conf

En este caso, sabemos que el archivo ssl.conf tiene el contexto de seguridad correcto. Pero, el httpd.conf tiene uno incorrecto.

Por lo tanto, cambiaremos el contexto de seguridad del archivo httpd.conf, pero usaremos el contexto de ssl.conf como referencia para este cambio, como se muestra a continuación.

# chcon --reference=ssl.conf httpd.conf

Después del cambio anterior, puede ver que el archivo httpd.conf tiene el mismo contexto de seguridad que el archivo ssl.conf.

# ls -lZ
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 ssl.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 httpd.conf

En una nota relacionada, para ver el estado actual de SELinux, use el comando sestatus. Es importante que comprenda la salida del comando sestatus como se explica aquí:3 Salida del comando sestatus de SELinux explicada con ejemplos

3. Cambiar solo el USUARIO en el contexto de SELinux

En lugar de cambiar todo el contexto de seguridad de SELinux, también podemos cambiar solo un valor parcial.

El siguiente es el contexto de seguridad actual del archivo httpd.conf.

# ls -lZ httpd.conf 
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 httpd.conf

En el ejemplo anterior, "unconfined_u" es la parte del USUARIO del contexto de seguridad.

Usando la opción chcon -u, podemos cambiar solo la parte del usuario del contexto de seguridad.

En el siguiente ejemplo, estamos configurando la parte del usuario del contexto de seguridad en system_u para el archivo httpd.conf.

# chcon -u system_u httpd.conf

Como puede ver en el siguiente resultado, solo se cambia la parte de USUARIO del contexto de seguridad para el archivo httpd.conf.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 httpd.conf

También puede usar –usuario en lugar de -u. Los dos comandos siguientes son exactamente iguales.

# chcon --user system_u httpd.conf

# chcon -u system_u httpd.conf

4. Cambiar solo el ROL en el contexto de SELinux

Usando la opción chcon -r, podemos cambiar solo la parte ROLE del contexto de seguridad.

En el siguiente ejemplo, estamos configurando la parte del rol del contexto de seguridad en object_r para el archivo httpd.conf.

# chcon -r object_r httpd.conf

Como puede ver en el siguiente resultado, solo se cambia la parte ROLE del contexto de seguridad para el archivo httpd.conf.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 httpd.conf

Cuando asigna un rol que SELinux no reconoce, obtendrá el siguiente error de argumento no válido. En este ejemplo, no existe un rol como "identity_r".

# chcon -r identity_r httpd.conf
chcon: failed to change context of ‘httpd.conf’ to ‘system_u:identity_r:admin_home_t:s0’: Invalid argument

También puede usar –role en lugar de -r. Los dos comandos siguientes son exactamente iguales.

# chcon --role object_r httpd.conf

# chcon -r object_r httpd.conf

5. Cambiar solo el TIPO en el contexto de SELinux

Esto es probablemente lo que usará principalmente, ya que TYPE es lo que nos preocupa la mayor parte del tiempo en una configuración típica de SELinux.

El siguiente es el contexto de seguridad actual del archivo httpd.conf.

# ls -lZ httpd.conf 
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 httpd.conf

En el ejemplo anterior, "admin_home_t" es la parte TYPE del contexto de seguridad.

Usando la opción chcon -t, podemos cambiar solo la parte de tipo del contexto de seguridad.

En el siguiente ejemplo, estamos configurando la parte de tipo del contexto de seguridad en httpd_config_t para el archivo httpd.conf.

# chcon -t httpd_config_t httpd.conf

Como puede ver en el siguiente resultado, solo se cambia la parte TYPE del contexto de seguridad para el archivo httpd.conf.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 httpd.conf

También puede usar –type en lugar de -t. Los dos comandos siguientes son exactamente iguales.

# chcon -t httpd_config_t httpd.conf

# chcon --type httpd_config_t httpd.conf

6. Cambiar solo el RANGO (nivel) en el contexto de SELinux

Usando la opción chcon -l, podemos cambiar solo la parte RANGO (que también se llama nivel) del contexto de seguridad. El rango se usa solo en MLS y, en una situación típica, es posible que no cambiemos el rango.

En el siguiente ejemplo, estamos configurando la parte del rango del contexto de seguridad en "s0" para el archivo httpd.conf.

# chcon -l s0 httpd.conf

Como puede ver en el siguiente resultado, solo se cambia la parte ROLE del contexto de seguridad para el archivo httpd.conf.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 httpd.conf

También puede usar –rango en lugar de -l. Los dos comandos siguientes son exactamente iguales.

# chcon -l s0 httpd.conf

# chcon --range s0 httpd.conf

7. Combinar Usuario, Rol, Tipo, Nivel en chcon

Puede combinar la opción de usuario (-u), función (-r), tipo (-t) o nivel (-l) en chcon.

Por ejemplo, lo siguiente cambiará los cuatro como se muestra a continuación.

# chcon -u system_u -r object_r  -t httpd_config_t -l s0 httpd.conf

O bien, puede mezclar y combinar y cambiar solo algunos de ellos a la vez. Por ejemplo, en el siguiente ejemplo, estamos cambiando solo el USUARIO y el TIPO del archivo httpd.conf.

# chcon -u system_u -t httpd_config_t httpd.conf

8. Comportamiento predeterminado de Chcon en enlace simbólico

En el siguiente ejemplo, apache.conf es un enlace simbólico al archivo httpd.conf. Ambos tienen un contexto de seguridad incorrecto.

# ls -lZ
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 apache.conf -> httpd.conf
-rw-r--r--. unconfined_u:object_r:admin_home_t:s0 httpd.conf

En el siguiente ejemplo, estoy cambiando el USUARIO y el TIPO para el enlace simbólico apache.conf.

# chcon -u system_u -t httpd_config_t apache.conf

PERO, como puede ver aquí, esto realmente ha cambiado el contexto de SELinux para el archivo al que apunta en lugar de cambiarlo por el enlace simbólico.

# ls -lZ
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 apache.conf -> httpd.conf
-rw-r--r--. system_u:object_r:httpd_config_t:s0 httpd.conf

Este es el comportamiento predeterminado del comando chcon. es decir, cambiará el contexto del archivo al que apunta en lugar del enlace simbólico en sí.

Este comportamiento se denomina desreferenciación. Chcon tiene una opción llamada –dereference que cambiará el archivo en lugar del enlace simbólico.

Los dos ejemplos siguientes son exactamente iguales.

# chcon -u system_u -t httpd_config_t apache.conf

# chcon --dereference -u system_u -t httpd_config_t apache.conf

9. Forzar cambio de contexto SELinux de enlace simbólico

En lugar de cambiar el contexto de seguridad del archivo al que hace referencia un enlace simbólico, también puede forzar a chcon a cambiar el contexto del enlace simbólico en sí.

En el siguiente ejemplo, apache.conf es un enlace simbólico al archivo httpd.conf. Ambos tienen un contexto de seguridad incorrecto.

# ls -lZ
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 apache.conf -> httpd.conf
-rw-r--r--. unconfined_u:object_r:admin_home_t:s0 httpd.conf

Cuando especificamos la opción –no-dereference en chcon, cambiará el contexto del enlace simbólico y no el archivo al que apunta.

Entonces, el siguiente ejemplo cambiará el USUARIO y el TIPO para el enlace simbólico apache.conf (y no el archivo httpd.conf).

# chcon --no-dereference -u system_u -t httpd_config_t apache.conf

Como puede ver a continuación, solo el contexto de SELinux del enlace simbólico apache.conf se cambia al que especificamos anteriormente.

# ls -lZ
lrwxrwxrwx. system_u:object_r:httpd_config_t:s0 apache.conf -> httpd.conf
-rw-r--r--. unconfined_u:object_r:admin_home_t:s0 httpd.conf

En lugar de –no-dereference, también podemos especificar la opción '-h' como se muestra a continuación.

Los dos comandos siguientes son exactamente iguales.

# chcon -h -u system_u -t httpd_config_t apache.conf

# chcon --no-dereference -u system_u -t httpd_config_t apache.conf

10. Cambiar el contexto de SELinux de forma recursiva

En este ejemplo, sigue el contexto de Linux de seguridad actual de todos los archivos en conf.d

# ls -lZ conf.d/
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 autoindex.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 nss.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 README
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 userdir.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 welcome.conf

Usando la opción recursiva chcon -R, podemos cambiar recursivamente todos los archivos en el conf.d al contexto de seguridad dado como se muestra a continuación.

# chcon -R system_u:object_r:httpd_config_t:s0 conf.d

Como puede ver a continuación, el contexto se cambia recursivamente para todos los archivos en conf.d

# ls -lZ conf.d
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 autoindex.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 nss.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 README
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 userdir.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 welcome.conf

Nota:si hay otros subdirectorios dentro de conf.d, todos esos subdirectorios y los archivos debajo de ellos también se verán afectados por la opción -R.

También puede usar la opción recursiva. Los dos comandos siguientes son exactamente iguales.

# chcon --recursive system_u:object_r:httpd_config_t:s0 conf.d

# chcon -R system_u:object_r:httpd_config_t:s0 conf.d

11. Mostrar detalles detallados de la operación chcon

Usando la opción -v, puede mostrar los detalles de lo que está haciendo chcon.

-v significa detallado, que mostrará el nombre del archivo que el comando chcon está procesando actualmente, como se muestra a continuación.

Esto es muy útil cuando se combina con la opción recursiva -R, donde puede cambiar el contexto de muchos archivos y le gusta ver qué está haciendo chcon actualmente como se muestra a continuación.

# chcon -Rv system_u:object_r:httpd_config_t:s0 conf.d
changing security context of ‘conf.d/README’
changing security context of ‘conf.d/autoindex.conf’
changing security context of ‘conf.d/userdir.conf’
changing security context of ‘conf.d/welcome.conf’
changing security context of ‘conf.d/nss.conf’
changing security context of ‘conf.d’

12. Comportamiento predeterminado de Chcon en enlaces simbólicos para recursivo

En este ejemplo, "config" es un enlace simbólico al directorio conf.d como se muestra a continuación.

# ls -lZ
drwxr-xr-x. system_u:object_r:httpd_config_t:s0 conf.d
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 config -> conf.d

De forma predeterminada, cuando realiza una operación recursiva en un enlace simbólico, no atravesará la estructura del directorio.

Puede ver esto combinando la opción -v con -R, que no muestra ningún nombre de archivo en la salida. Esto indica que no está atravesando el enlace simbólico "config".

# chcon -Rv -t httpd_config_t config
changing security context of ‘configuration’

La opción -P (P mayúscula) también hace referencia a este comportamiento predeterminado.

Entonces, los dos comandos siguientes son exactamente iguales. Ambos no atravesarán enlaces simbólicos.

# chcon -Rv -t httpd_config_t config

# chcon -RPv -t httpd_config_t configuration

13. Forzar chcon para atravesar enlaces simbólicos especificados para recursivo

En este ejemplo, "config" es un enlace simbólico al directorio conf.d como se muestra a continuación.

# ls -lZ
drwxr-xr-x. system_u:object_r:httpd_config_t:s0 conf.d
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 config -> conf.d

Cuando especifica un símbolo en el comando chcon, puede obligar a chcon a atravesarlo usando la opción -H como se muestra a continuación.

Como puede ver en el siguiente resultado, chcon atraviesa el enlace simbólico de configuración y procesa todos los archivos cuando especificamos la opción "-H" junto con la opción "-R".

# chcon -RHv -t httpd_config_t config
changing security context of ‘config/README’
changing security context of ‘config/autoindex.conf’
changing security context of ‘config/userdir.conf’
changing security context of ‘config/welcome.conf’
changing security context of ‘config/nss.conf’
changing security context of ‘config/ndd’
changing security context of ‘config’

14. Forzar a chcon a atravesar TODOS los enlaces simbólicos para recursivo

En este ejemplo, "config" es un enlace simbólico al directorio conf.d como se muestra a continuación.

# ls -lZ
drwxr-xr-x. system_u:object_r:httpd_config_t:s0 conf.d
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 config -> conf.d

En el siguiente ejemplo, dentro del directorio de configuración, tenemos el directorio "ndd", que es un enlace simbólico.

# ls -l configuration/ndd
lrwxrwxrwx. 1 root root 6 Jul  8 00:13 configuration/ndd -> ../ndd

Si desea que el comando chcon atraviese todos los enlaces simbólicos que encuentre durante la operación recursiva, debe especificar la opción -L.

La siguiente opción ha combinado la opción -L con la opción -R. Esto atravesará todos los enlaces simbólicos que encuentre. Por ejemplo, como puede ver a continuación, esto atravesó el enlace simbólico "ndd" y procesó todos los archivos en consecuencia.

# chcon -RLv -t httpd_config_t configuration
changing security context of ‘configuration/README’
changing security context of ‘configuration/autoindex.conf’
changing security context of ‘configuration/userdir.conf’
changing security context of ‘configuration/welcome.conf’
changing security context of ‘configuration/nss.conf’
changing security context of ‘configuration/ndd/nd1-conf’
changing security context of ‘configuration/ndd/nd2-conf’
changing security context of ‘configuration/ndd/nd3-conf’
changing security context of ‘configuration/ndd/nd-main.conf’
changing security context of ‘configuration/ndd’
changing security context of ‘configuration’

Nota:Cuando especifica la opción -P, -H o -L (junto con -R), si por alguna razón las ha combinado, entonces lo que se especifique como la última opción tendrá efecto.

15. Comportamiento de Chcon en / directorio raíz para cambios en todo el sistema

De manera predeterminada, puede usar chcon para cambiar recursivamente el contexto de SELinux en todos los archivos de su sistema de archivos raíz, como se muestra a continuación.

Esto se denomina opción de no conservar la raíz (es decir, no-conservar-raíz es el comportamiento predeterminado)

ADVERTENCIA:No ejecute este comando en su sistema. Terminarás teniendo un sistema inutilizable. Los dos comandos siguientes se comportarán exactamente igual.

chcon -Rv system_u:object_r:httpd_config_t:s0 /

chcon -Rv --no-preserve-root system_u:object_r:httpd_config_t:s0 /

Pero no se recomienda, a menos que sepa lo que está haciendo, ya que no desea que el contexto de SELinux para todos los archivos de su sistema sea el mismo. Si cometió un error y estableció un contexto incorrecto en un archivo, es posible que desee comprender cómo usar el comando restorecon para restaurar el contexto de SELinux

Cuando especifica la opción –no-preserve-root, no atravesará la raíz, cuando la especifica como una opción de línea de comando como se muestra a continuación.

# chcon -Rv --preserve-root system_u:object_r:httpd_config_t:s0 /
chcon: it is dangerous to operate recursively on `/'
chcon: use --no-preserve-root to override this failsafe

Dado que el comportamiento predeterminado es peligroso, para evitar errores accidentales, cada vez que esté haciendo la opción recursiva -R en un directorio enorme (especialmente desde dentro de un script de shell), le recomiendo que use –preserve-root. De esta manera, si por error da / al final del comando chcon, no cambiará accidentalmente todos los archivos en su sistema.


Linux
  1. 7 ejemplos de comandos Linux df

  2. 8 ejemplos de comandos TR de Linux

  3. 5 ejemplos de comandos táctiles de Linux (cómo cambiar la marca de tiempo del archivo)

  4. Ejemplos de comandos rm en Linux

  5. Ejemplos de comandos ps en Linux

3 Salida del comando SELinux sestatus explicada con ejemplos

10 ejemplos de comandos de restauración de Linux para restaurar el contexto de SELinux

7 ejemplos prácticos de comandos de localización de Linux:mlocate y updatedb

Ejemplos de comandos sestatus en Linux

Ejemplos de comandos id en Linux

Ejemplos de comandos dnf