GNU/Linux >> Tutoriels Linux >  >> Linux

15 Exemples de commande SELinux chcon pour modifier le contexte de sécurité

Dans SELinux, l'une des tâches fréquentes que vous pouvez effectuer est de modifier le contexte de sécurité d'un objet. Pour cela, vous utiliserez la commande chcon.

chcon signifie Changer de contexte.

Cette commande est utilisée pour changer le contexte de sécurité SELinux d'un fichier.

Ce didacticiel explique les exemples de commande chcon suivants :

  1. Modifier le contexte SELinux complet
  2. Modifier le contexte en utilisant un autre fichier comme référence
  3. Modifier uniquement l'utilisateur dans le contexte SELinux
  4. Modifier uniquement le rôle dans le contexte SELinux
  5. Modifier uniquement le type dans le contexte SELinux
  6. Modifier uniquement la plage (niveau) dans le contexte SELinux
  7. Combiner Utilisateur, Rôle, Type, Niveau dans chcon
  8. Comportement par défaut de Chcon sur le lien symbolique
  9. Forcer le changement de contexte SELinux du lien symbolique
  10. Modifier le contexte SELinux de manière récursive
  11. Afficher les détails détaillés de l'opération chcon
  12. Comportement par défaut de Chcon sur les liens symboliques pour la récursivité
  13. Forcer chcon à parcourir les liens symboliques spécifiés pour la récursivité
  14. Forcer chcon à parcourir TOUS les liens symboliques pour la récursivité
  15. Chcon Behavior on / root directory for Systemwide Change

1. Modifier le contexte SELinux complet

Pour afficher le contexte de sécurité d'un fichier, utilisez l'option -Z (Z majuscule) dans la commande ls comme indiqué ci-dessous.

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

Dans l'exemple ci-dessus, le contexte de sécurité du fichier httpd.conf est le suivant :

unconfined_u:object_r:admin_home_t:s0

Il s'agit d'un mauvais contexte SELinux pour le fichier httpd.conf qui se trouve sous le répertoire /etc/httpd/conf.

Donc, pour changer le contexte de sécurité, utilisez la commande chcon suivante.

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

Dans l'exemple ci-dessus, nous avons modifié le contexte de sécurité du fichier httpd.conf pour le suivant, qui est le bon.

system_u:object_r:httpd_config_t:s0

Nous pouvons le vérifier en utilisant la commande ls -lZ suivante.

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

Remarque :Dans l'exemple ci-dessus, nous donnons le contexte SELinux complet d'un fichier (c'est-à-dire utilisateur, rôle, type et plage) au format utilisateur :rôle :type :plage sans le casser davantage.

Chaque fois que vous êtes confronté à des problèmes liés à SELinux, vous pouvez être tenté de simplement désactiver SELinux comme nous l'avons expliqué précédemment. Mais, dans de nombreuses situations, vous pouvez découvrir que c'est simplement que le fichier en question a un mauvais contexte de sécurité, qui peut être modifié à l'aide de la commande chcon.

2. Modifier le contexte en utilisant un autre fichier comme référence

Parfois, vous ne savez peut-être pas quel contexte SELinux vous devez définir pour un fichier.

Dans ce cas, vous pouvez utiliser le contexte de sécurité d'un autre fichier comme référence et l'utiliser pour l'affecter à votre fichier.

Fondamentalement, au lieu de spécifier le contexte SELinux complet pour le fichier, vous utilisez simplement le contexte d'un autre fichier pour votre fichier.

Dans l'exemple suivant, nous voyons que ssl.conf et httpd.conf ont un contexte SELinux différent.

# 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

Dans ce cas, nous savons que le fichier ssl.conf a le bon contexte de sécurité. Mais, le httpd.conf en a un incorrect.

Nous allons donc modifier le contexte de sécurité du fichier httpd.conf, mais nous utiliserons le contexte de ssl.conf comme référence pour ce changement, comme indiqué ci-dessous.

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

Après la modification ci-dessus, vous pouvez voir que le fichier httpd.conf a le même contexte de sécurité que le fichier 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

Sur une note connexe, pour afficher l'état actuel de SELinux, utilisez la commande sestatus. Il est important que vous compreniez la sortie de la commande sestatus comme expliqué ici :3 Sortie de la commande sestatus de SELinux expliquée avec des exemples

3. Modifier uniquement l'utilisateur dans le contexte SELinux

Au lieu de changer l'ensemble du contexte de sécurité SELinux, nous pouvons également n'en modifier qu'une partie.

Voici le contexte de sécurité actuel du fichier httpd.conf.

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

Dans l'exemple ci-dessus, "unconfined_u" est la partie USER du contexte de sécurité.

En utilisant l'option chcon -u, nous ne pouvons modifier que la partie utilisateur du contexte de sécurité.

Dans l'exemple suivant, nous définissons la partie utilisateur du contexte de sécurité sur system_u pour le fichier httpd.conf.

# chcon -u system_u httpd.conf

Comme vous le voyez dans la sortie suivante, seule la partie USER du contexte de sécurité est modifiée pour le fichier httpd.conf.

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

Vous pouvez également utiliser –user au lieu de -u. Les deux commandes suivantes sont exactement les mêmes.

# chcon --user system_u httpd.conf

# chcon -u system_u httpd.conf

4. Modifier uniquement le rôle dans le contexte SELinux

En utilisant l'option chcon -r, nous ne pouvons modifier que la partie ROLE du contexte de sécurité.

Dans l'exemple suivant, nous définissons la partie rôle du contexte de sécurité sur object_r pour le fichier httpd.conf.

# chcon -r object_r httpd.conf

Comme vous le voyez dans la sortie suivante, seule la partie ROLE du contexte de sécurité est modifiée pour le fichier httpd.conf.

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

Lorsque vous attribuez un rôle qui n'est pas reconnu par SELinux, vous obtenez l'erreur d'argument non valide suivante. Dans cet exemple, il n'y a pas de rôle tel que "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

Vous pouvez également utiliser –role au lieu de -r. Les deux commandes suivantes sont exactement les mêmes.

# chcon --role object_r httpd.conf

# chcon -r object_r httpd.conf

5. Modifier uniquement le TYPE dans le contexte SELinux

C'est probablement ce que vous utiliserez principalement, car TYPE est ce qui nous préoccupe la plupart du temps dans une configuration SELinux typique.

Voici le contexte de sécurité actuel du fichier httpd.conf.

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

Dans l'exemple ci-dessus, "admin_home_t" est la partie TYPE du contexte de sécurité.

En utilisant l'option chcon -t, nous ne pouvons modifier que la partie type du contexte de sécurité.

Dans l'exemple suivant, nous définissons la partie type du contexte de sécurité sur httpd_config_t pour le fichier httpd.conf.

# chcon -t httpd_config_t httpd.conf

Comme vous le voyez dans la sortie suivante, seule la partie TYPE du contexte de sécurité est modifiée pour le fichier httpd.conf.

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

Vous pouvez également utiliser –type au lieu de -t. Les deux commandes suivantes sont exactement les mêmes.

# chcon -t httpd_config_t httpd.conf

# chcon --type httpd_config_t httpd.conf

6. Modifier uniquement la GAMME (niveau) dans le contexte SELinux

En utilisant l'option chcon -l, nous ne pouvons modifier que la partie RANGE (également appelée niveau) du contexte de sécurité. La portée n'est utilisée qu'en MLS et dans une situation typique, nous pourrions ne pas modifier la portée.

Dans l'exemple suivant, nous définissons la partie plage du contexte de sécurité sur "s0" pour le fichier httpd.conf.

# chcon -l s0 httpd.conf

Comme vous le voyez dans la sortie suivante, seule la partie ROLE du contexte de sécurité est modifiée pour le fichier httpd.conf.

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

Vous pouvez également utiliser –range au lieu de -l. Les deux commandes suivantes sont exactement les mêmes.

# chcon -l s0 httpd.conf

# chcon --range s0 httpd.conf

7. Combinez Utilisateur, Rôle, Type, Niveau dans chcon

Vous pouvez combiner l'option utilisateur (-u), rôle (-r), type (-t) ou niveau (-l) dans chcon.

Par exemple, ce qui suit les modifiera tous les quatre comme indiqué ci-dessous.

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

Ou, vous pouvez mélanger et assortir et n'en changer que quelques-uns à la fois. Par exemple, dans l'exemple suivant, nous modifions uniquement l'UTILISATEUR et le TYPE du fichier httpd.conf.

# chcon -u system_u -t httpd_config_t httpd.conf

8. Comportement par défaut de Chcon sur le lien symbolique

Dans l'exemple suivant, apache.conf est un lien symbolique vers le fichier httpd.conf. Les deux ont le mauvais contexte de sécurité.

# 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

Dans l'exemple suivant, je change l'UTILISATEUR et le TYPE pour le lien symbolique apache.conf.

# chcon -u system_u -t httpd_config_t apache.conf

MAIS, comme vous le voyez ici, cela a vraiment changé le contexte SELinux pour le fichier vers lequel il pointe au lieu de le changer pour le lien symbolique.

# 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

C'est le comportement par défaut de la commande chcon. c'est-à-dire qu'il changera le contexte du fichier vers lequel il pointe au lieu du lien symbolique lui-même.

Ce comportement est appelé déréférencement. Chcon a une option appelée –dereference qui changera le fichier au lieu du lien symbolique.

Les deux exemples suivants sont exactement les mêmes.

# chcon -u system_u -t httpd_config_t apache.conf

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

9. Forcer le changement de contexte SELinux du lien symbolique

Au lieu de modifier le contexte de sécurité du fichier référencé par un lien symbolique, vous pouvez également forcer chcon à modifier le contexte du lien symbolique lui-même.

Dans l'exemple suivant, apache.conf est un lien symbolique vers le fichier httpd.conf. Les deux ont le mauvais contexte de sécurité.

# 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

Lorsque nous spécifions l'option –no-dereference dans chcon, cela changera le contexte du lien symbolique et non le fichier vers lequel il pointe.

Ainsi, l'exemple suivant changera le lien symbolique USER et TYPE pour apache.conf (et non le fichier httpd.conf).

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

Comme vous le voyez ci-dessous, seul le contexte SELinux du lien symbolique apache.conf est remplacé par celui que nous avons spécifié ci-dessus.

# 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

Au lieu de -no-dereference, nous pouvons également spécifier l'option "-h" comme indiqué ci-dessous.

Les deux commandes suivantes sont exactement identiques.

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

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

10. Modifier le contexte SELinux de manière récursive

Dans cet exemple, voici le contexte Linux de sécurité actuel de tous les fichiers sous 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

En utilisant l'option récursive chcon -R, nous pouvons modifier de manière récursive tous les fichiers du fichier conf.d pour donner le contexte de sécurité, comme indiqué ci-dessous.

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

Comme vous le voyez ci-dessous, le contexte est modifié de manière récursive pour tous les fichiers du fichier 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

Remarque :S'il existe d'autres sous-répertoires dans conf.d, tous ces sous-répertoires et les fichiers situés en dessous seront également affectés par l'option -R.

Vous pouvez également utiliser l'option –recursive. Les deux commandes suivantes sont exactement identiques.

# 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. Afficher les détails détaillés de l'opération chcon

En utilisant l'option -v, vous pouvez afficher les détails de ce que fait chcon.

-v signifie verbeux, qui affichera le nom du fichier en cours de traitement par la commande chcon, comme indiqué ci-dessous.

Ceci est très utile lorsque vous combinez avec l'option récursive -R, où vous pouvez modifier le contexte d'un grand nombre de fichiers, et vous aimez voir ce que chcon fait actuellement, comme indiqué ci-dessous.

# 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. Comportement par défaut de Chcon sur les liens symboliques pour les récursifs

Dans cet exemple, "config" est un lien symbolique vers le répertoire conf.d comme indiqué ci-dessous.

# 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

Par défaut, lorsque vous effectuez une opération récursive sur un lien symbolique, il ne traversera pas la structure du répertoire.

Vous pouvez le voir en combinant l'option -v avec -R, qui n'affiche aucun nom de fichier dans la sortie. Cela indique qu'il ne traverse pas le lien symbolique "config".

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

Ce comportement par défaut est également référencé par l'option -P (P majuscule).

Ainsi, les deux commandes suivantes sont exactement les mêmes. Les deux ne traverseront pas les liens symboliques.

# chcon -Rv -t httpd_config_t config

# chcon -RPv -t httpd_config_t configuration

13. Forcer chcon à parcourir les liens symboliques spécifiés pour les récursifs

Dans cet exemple, "config" est un lien symbolique vers le répertoire conf.d comme indiqué ci-dessous.

# 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

Lorsque vous spécifiez un symbole dans la commande chcon, vous pouvez forcer chcon à le traverser en utilisant l'option -H comme indiqué ci-dessous.

Comme vous le voyez dans la sortie suivante, chcon traverse le lien symbolique de configuration et traite tous les fichiers lorsque nous avons spécifié l'option "-H" avec l'option "-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. Forcer chcon à parcourir TOUS les liens symboliques pour les récursifs

Dans cet exemple, "config" est un lien symbolique vers le répertoire conf.d comme indiqué ci-dessous.

# 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

Dans l'exemple suivant, dans le répertoire de configuration, nous avons le répertoire "ndd", qui est un lien symbolique.

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

Si vous souhaitez que la commande chcon traverse tous les liens symboliques qu'elle rencontre lors de l'opération récursive, vous devez spécifier l'option -L.

L'option suivante a combiné l'option -L avec l'option -R. Cela traversera chaque lien symbolique qu'il rencontre. Par exemple, comme vous le voyez ci-dessous, cela a traversé le lien symbolique "ndd" et traité tous les fichiers en conséquence.

# 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’

Remarque :Lorsque vous spécifiez l'option -P, ou -H ou -L (avec -R), si pour une raison quelconque, vous les avez combinées, alors ce qui est spécifié comme dernière option prendra effet.

15. Chcon Behavior sur / répertoire racine pour le changement à l'échelle du système

Par défaut, vous pouvez utiliser chcon pour modifier de manière récursive le contexte SELinux sur tous les fichiers sous votre système de fichiers racine, comme indiqué ci-dessous.

Cela s'appelle ne pas conserver l'option racine (c'est-à-dire que –no-preserve-root est le comportement par défaut)

AVERTISSEMENT :n'exécutez pas cette commande sur votre système. Vous finirez par avoir un système inutilisable. Les deux commandes suivantes se comporteront exactement de la même manière.

chcon -Rv system_u:object_r:httpd_config_t:s0 /

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

Mais ce n'est pas recommandé, sauf si vous savez ce que vous faites, car vous ne voulez pas que le contexte SELinux de tous les fichiers de votre système soit le même. Si vous avez fait une erreur et défini un mauvais contexte pour un fichier, vous voudrez peut-être comprendre comment utiliser la commande restorecon pour restaurer le contexte SELinux

Lorsque vous spécifiez l'option –no-preserve-root, elle ne traversera pas la racine si vous la spécifiez en tant qu'option de ligne de commande, comme indiqué ci-dessous.

# 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

Étant donné que le comportement par défaut est dangereux, pour éviter toute erreur accidentelle, chaque fois que vous utilisez l'option récursive -R sur un répertoire énorme (en particulier à l'intérieur d'un script shell), je vous recommande d'utiliser –preserve-root. De cette façon, par erreur, si vous donnez / à la fin de la commande chcon, cela ne modifiera pas accidentellement tous les fichiers de votre système.


Linux
  1. 8 Exemples de commandes Linux TR

  2. 5 exemples de commandes tactiles Linux (comment modifier l'horodatage des fichiers)

  3. chcon exemples de commandes sous Linux

  4. Exemples de commandes setenforce sous Linux

  5. Exemples de commandes chown sous Linux

3 La sortie de la commande SELinux sestatus expliquée avec des exemples

10 exemples de commandes Linux restorecon pour restaurer le contexte SELinux

7 exemples pratiques de commande Linux Locate - mlocate et updatedb

sestatus Exemples de commandes sous Linux

Exemples de commandes id sous Linux

Exemples de commandes dnf