Fiche pratique pour les administrateurs système sur SELinux : 42 réponses à des questions importantes

La traduction de l'article a été préparée spécialement pour les étudiants du cours « Administrateur Linux ».

Fiche pratique pour les administrateurs système sur SELinux : 42 réponses à des questions importantes

Ici, vous trouverez des réponses aux questions essentielles sur la vie, l'univers et tout cela dans Linux avec une sécurité renforcée.

« Une vérité importante, c'est que les choses ne sont pas toujours ce qu'elles semblent, c'est bien connu... »

―Douglas Adams, Le Guide du voyageur galactique

Sécurité. Amélioration de la fiabilité. Conformité. Politique. Les Quatre Cavaliers de l'Apocalypse de l'administrateur système. En plus de nos tâches quotidiennes — surveillance, sauvegarde, mise en œuvre, configuration, mise à jour, etc. — nous sommes également responsables de la sécurité de nos systèmes. Même ceux où un fournisseur tiers nous recommande de désactiver la sécurité renforcée. Cela ressemble au travail d'Ethan Hunt dans 'Mission Impossible'.

Confrontés à ce dilemme, certains administrateurs système choisissent de prendre la pilule bleue, car ils pensent qu'ils ne connaîtront jamais la réponse à la grande question de la vie, de l'univers et tout cela. Et, comme nous le savons tous, cette réponse est 42.

Dans l'esprit de 'Le Guide du voyageur galactique', voici 42 réponses aux questions importantes sur la gestion et l'utilisation SELinux dans vos systèmes.

1. SELinux est un système de contrôle d'accès obligatoire, ce qui signifie que chaque processus a une étiquette (label). Chaque fichier, répertoire et objet système a également des étiquettes. Les règles de la politique régissent l'accès entre les processus et les objets étiquetés. Le noyau assure le respect de ces règles.

2. Les deux concepts les plus importants sont : Étiquetage — étiquetage (fichiers, processus, ports, etc.) et Contrôle de type (qui isole les processus les uns des autres en fonction des types).

3. Le format correct de l'étiquette utilisateur: rôle: type: niveau (facultatif).

4. L'objectif de la sécurité multi-niveaux (La sécurité multi-niveaux — MLS) est de gérer les processus (domaines) en fonction du niveau de sécurité des données qu'ils vont utiliser. Par exemple, un processus secret ne peut pas lire des données top secrètes.

5. Assurer la sécurité multicatégorielle (La sécurité multicatégorielle — MCS) protège les processus similaires les uns des autres (par exemple, les machines virtuelles, les mécanismes OpenShift, les environnements SELinux, les conteneurs, etc.).

6. Les options du noyau pour modifier les modes de SELinux au démarrage :

  • autorelabel=1 → force le système à relabeliser
  • selinux=0 → le noyau ne charge pas l'infrastructure SELinux
  • enforcing=0 → démarrer en mode permissif

7. Si vous devez reclassifier l'ensemble du système :

# touch /.autorelabel
#reboot

Si l'étiquetage du système contient un grand nombre d'erreurs, il se peut que vous ayez besoin de démarrer en mode permissif afin que la reclassement réussisse.

8. Pour vérifier si SELinux est activé : # getenforce

9. Pour activer/désactiver temporairement SELinux : # setenforce [1|0]

10. Vérification de l'état de SELinux : # sestatus

11. Fichier de configuration : /etc/selinux/config

12. Comment fonctionne SELinux ? Voici un exemple d'étiquetage pour le serveur web Apache :

  • Représentation binaire : /usr/sbin/httpd→httpd_exec_t
  • Répertoire de configuration : /etc/httpd→httpd_config_t
  • Répertoire des fichiers journaux : /var/log/httpd → httpd_log_t
  • Répertoire de contenu : /var/www/html → httpd_sys_content_t
  • Script de démarrage : /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Processus : /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Ports : 80/tcp, 443/tcp → httpd_t, http_port_t

Processus exécuté dans le contexte httpd_t, peut interagir avec l'objet étiqueté httpd_something_t.

13. De nombreuses commandes acceptent l'argument -Z pour afficher, créer et modifier le contexte :

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

Les contextes sont établis lorsque les fichiers sont créés en fonction du contexte de leur répertoire parent (à quelques exceptions près). Les RPM peuvent établir des contextes pendant l'installation.

14. Il existe quatre raisons principales aux erreurs de SELinux, décrites plus en détail aux points 15-21 ci-dessous :

  • Problèmes d'étiquetage
  • À cause de quelque chose que SELinux doit savoir
  • Erreur dans la politique/application SELinux
  • Vos informations peuvent être compromises

15. Problème d'étiquetage: si vos fichiers sont /srv/myweb mal étiquetés, l'accès peut être refusé. Voici quelques moyens de corriger cela :

  • Si vous connaissez l'étiquette :
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Si vous connaissez le fichier avec une étiquetage équivalente :
    # semanage fcontext -a -e /srv/myweb /var/www
  • Rétablir le contexte (dans les deux cas) :
    # restorecon -vR /srv/myweb

16. Problème d'étiquetage : si vous déplacez le fichier au lieu de le copier, le fichier conservera son contexte d'origine. Pour corriger ce problème :

  • Changez la commande de contexte avec l'étiquette :
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Changez la commande de contexte avec l'étiquette de lien :
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Rétablir le contexte (dans les deux cas) : # restorecon -vR /var/www/html/

17. Si SELinux a besoin de savoir, que HTTPD écoute le port 8585, informez SELinux :

# semanage port -a -t http_port_t -p tcp 8585

18. SELinux a besoin de savoir valeurs logiques permettant de modifier des parties de la politique SELinux à l'exécution sans avoir besoin de réécrire la politique SELinux. Par exemple, si vous souhaitez que httpd envoie des e-mails, entrez : # setsebool -P httpd_can_sendmail 1

19. SELinux a besoin de savoir valeurs logiques activant/désactivant des options SELinux :

  • Pour voir toutes les valeurs logiques : # getsebool -a
  • Pour voir la description de chacune : # semanage boolean -l
  • Pour définir une valeur logique : # setsebool [_boolean_] [1|0]
  • Pour un réglage permanent, ajoutez -P. Par exemple : # setsebool httpd_enable_ftp_server 1 -P

20. Les politiques/applications SELinux peuvent contenir des erreurs, y compris :

  • Chemins de code inhabituels
  • Configurations
  • Redirection de stdout
  • Fuites de descripteurs de fichiers
  • Mémoire exécutable
  • Bibliothèques mal construites

Ouvrez des tickets (n'envoyez pas de rapports dans Bugzilla ; il n'y a pas de SLA dans Bugzilla).

21. Vos informations peuvent être compromises, si vous avez des domaines restreints essayant de :

  • Charger des modules du noyau
  • Désactiver le mode enforce de SELinux
  • Écrire dans etc_t/shadow_t
  • Modifier les règles iptables

22. Outils SELinux pour le développement de modules politiques :

# yum -y install setroubleshoot setroubleshoot-server

Redémarrez ou redémarrez auditd après l'installation.

23. Windows VPS pour le travail à distance

journalctl

pour afficher la liste de tous les journaux liés à setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24. Windows VPS pour le travail à distance journalctl pour afficher la liste de tous les journaux liés à une étiquette SELinux particulière. Par exemple :

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. En cas d'erreur SELinux, utilisez le journal setroubleshoot avec une suggestion de plusieurs solutions possibles.
Par exemple, depuis journalctl:

Jun 14 19:41:07 web1 setroubleshoot : SELinux empêche httpd d'accéder à getattr sur le fichier /var/www/html/index.html. Pour le message complet, exécutez : sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux empêche httpd d'accéder à getattr sur le fichier /var/www/html/index.html.

***** Le plugin restorecon (99,5 % de confiance) suggère ************************

Si vous souhaitez corriger l'étiquette,
l'étiquette par défaut de /var/www/html/index.html doit être httpd_syscontent_t.
Ensuite, vous pouvez exécuter restorecon.
Faites
# /sbin/restorecon -v /var/www/html/index.html

26. Journalisation : SELinux enregistre des informations à de nombreux endroits :

  • /var/log/messages
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Journalisation : recherche d'erreurs SELinux dans le journal d'audit :

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28. Pour trouver des messages SELinux Access Vector Cache (AVC) pour un service particulier :

# ausearch -m avc -c httpd

29. Utilitaire audit2allow collecte des informations à partir des journaux d'opérations interdites, puis génère des règles de politique des permissions SELinux. Par exemple :

  • Pour créer une description lisible de la raison du refus d'accès : # audit2allow -w -a
  • Pour visualiser la règle d'application forcée des types permettant l'accès refusé : # audit2allow -a
  • Pour créer un module personnalisé : # audit2allow -a -M mypolicy
  • L'option -M crée un fichier d'application forcée de type (.te) avec le nom spécifié et compile la règle en un paquet de politique (.pp) : mypolicy.pp mypolicy.te
  • Pour installer un module personnalisé : # semodule -i mypolicy.pp

30. Pour configurer un processus (domaine) individuel pour fonctionner en mode permissive : # semanage permissive -a httpd_t

31. Si vous ne voulez plus que le domaine soit permissif : # semanage permissive -d httpd_t

32. Pour désactiver tous les domaines permissifs : # semodule -d permissivedomains

33. Activation de la politique MLS de SELinux : # yum install selinux-policy-mls
dans /etc/selinux/config :

SELINUX=permissive
SELINUXTYPE=mls

Assurez-vous que SELinux fonctionne en mode permissive : # setenforce 0
Utilisez le script fixfiles, pour garantir que les fichiers seront remarcqués lors du prochain redémarrage :

# fixfiles -F onboot # reboot

34. Créer un utilisateur avec une plage MLS spécifique : # useradd -Z staff_u john

En utilisant la commande useradd, associez un nouvel utilisateur à un utilisateur SELinux existant (dans ce cas, staff_u).

35. Pour voir la correspondance entre les utilisateurs SELinux et Linux : # semanage login -l

36. Définissez une plage spécifique pour l'utilisateur : # semanage login --modify --range s2:c100 john

37. Pour corriger l'étiquette dans le répertoire personnel de l'utilisateur (si nécessaire) : # chcon -R -l s2:c100 /home/john

38. Pour voir les catégories actuelles : # chcat -L

39. Pour modifier les catégories ou commencer à créer les vôtres, modifiez le fichier comme suit :

/etc/selinux/_<selinuxtype>_/setrans.conf

40. Pour exécuter une commande ou un script dans un fichier spécifique, un rôle et un contexte utilisateur :

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t contexte fichier
  • -r contexte rôle
  • -u contexte utilisateur

41. Les conteneurs fonctionnant avec SELinux désactivé :

  • Podman : # podman run --security-opt label=disable …
  • Docker : # docker run --security-opt label=disable …

42. Si vous devez donner au conteneur un accès complet au système :

  • Podman : # podman run --privileged …
  • Docker : # docker run --privileged …

Et maintenant, vous savez déjà la réponse. Donc, s'il vous plaît : ne paniquez pas et activez SELinux.

Liens :

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster