GNU/Linux >> Tutoriels Linux >  >> Linux

Un guide de l'administrateur système sur SELinux :42 réponses aux grandes questions

"C'est un fait important et populaire que les choses ne sont pas toujours ce qu'elles semblent…"

―Douglas Adams, Le guide du voyageur galactique

Sécurité. Durcissement. Conformité. Politique. Les quatre cavaliers de l'apocalypse SysAdmin. En plus de nos tâches quotidiennes - surveillance, sauvegarde, implémentation, réglage, mise à jour, etc. - nous sommes également en charge de la sécurisation de nos systèmes. Même les systèmes où le fournisseur tiers nous dit de désactiver la sécurité renforcée. Cela ressemble à un travail pour Mission Impossible est Ethan Hunt.

Face à ce dilemme, certains administrateurs système décident 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 de tout le reste. Et, comme nous le savons tous, cette réponse est 42 .

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

  1. SELinux est un système LABELING, ce qui signifie que chaque processus a un LABEL. Chaque fichier, répertoire et objet système a un LABEL. Les règles de politique contrôlent l'accès entre les processus étiquetés et les objets étiquetés. Le noyau applique ces règles.
  1. Les deux concepts les plus importants sont :Étiquetage (fichiers, processus, ports, etc.) et Application du type (qui isole les processus les uns des autres en fonction des types).
  1. Le format d'étiquette correct est user:role:type:level (facultatif ).
  1. L'objectif de l'application de la sécurité à plusieurs niveaux (MLS) est de contrôler les processus (domaines ) en fonction du niveau de sécurité des données qu'ils utiliseront. Par exemple, un processus secret ne peut pas lire les données top secrètes.
  1. Application de la sécurité multicatégorie (MCS) protège les processus similaires les uns des autres (comme les machines virtuelles, les engrenages OpenShift, les bacs à sable SELinux, les conteneurs, etc.).
  1. Paramètres du noyau pour changer les modes SELinux au démarrage :
    • autorelabel=1 → force le système à réétiqueter
    • selinux=0 → le noyau ne charge aucune partie de l'infrastructure SELinux
    • enforcing=0 → démarrer en mode permissif
  1. Si vous devez réétiqueter tout le système :
    # touch /.autorelabel
    # reboot

    Si l'étiquetage du système contient une grande quantité d'erreurs, vous devrez peut-être démarrer en mode permissif pour que le réétiquetage automatique réussisse.

  1. Pour vérifier si SELinux est activé :

    # getenforce
  1. Pour activer/désactiver temporairement SELinux :

    # setenforce [1|0]
  1. Outil d'état SELinux :

    # sestatus
  1. Fichier de configuration :

    /etc/selinux/config
  1. Comment fonctionne SELinux ? Voici un exemple d'étiquetage pour un serveur Web Apache :
    • Binaire :/usr/sbin/httpdhttpd_exec_t
    • Répertoire de configuration :/etc/httpdhttpd_config_t
    • Répertoire du fichier journal :/var/log/httpdhttpd_log_t
    • Répertoire de contenu :/var/www/htmlhttpd_sys_content_t
    • Script de démarrage :/usr/lib/systemd/system/httpd.servicehttpd_unit_file_d
    • Processus :/usr/sbin/httpd -DFOREGROUNDhttpd_t
    • Ports :80/tcp, 443/tcphttpd_t, http_port_t

Un processus s'exécutant dans le httpd_t le contexte peut interagir avec un objet avec le httpd_something_t étiquette.

  1. 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 définis lorsque les fichiers sont créés en fonction du contexte de leur répertoire parent (à quelques exceptions près). Les RPM peuvent définir des contextes dans le cadre de l'installation.

  1. Il existe quatre principales causes d'erreurs SELinux, qui sont expliquées plus en détail dans les points 15 à 21 ci-dessous :
    • Problèmes d'étiquetage
    • Quelque chose que SELinux doit savoir
    • Un bogue dans une politique/application SELinux
    • Vos informations peuvent être compromises
  1. Problème d'étiquetage : Si vos fichiers dans /srv/myweb ne sont pas étiquetés correctement, l'accès peut être refusé. Voici quelques façons de résoudre ce problème :
    • Si vous connaissez le libellé :

      # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
    • Si vous connaissez le fichier avec le libellé équivalent :

      # semanage fcontext -a -e /srv/myweb /var/www
    • Restaurer le contexte (dans les deux cas) :

      # restorecon -vR /srv/myweb
  1. Problème d'étiquetage : Si vous déplacez un fichier au lieu de le copier, le fichier conserve son contexte d'origine. Pour résoudre ces problèmes :
    • Modifiez la commande de contexte avec le libellé :

      $ sudo chcon -t httpd_system_content_t /var/www/html/index.html
    • Changez la commande de contexte avec le libellé de référence :

      $ sudo chcon --reference /var/www/html/ /var/www/html/index.html
    • Restaurer le contexte (dans les deux cas) :

      $ sudo restorecon -vR /var/www/html/
  1. Si SELinux a besoin de savoir HTTPD écoute sur le port 8585, dites à SELinux :

    $ sudo semanage port -a -t http_port_t -p tcp 8585
  1. SELinux doit savoir Les booléens permettent de modifier des parties de la politique SELinux lors de l'exécution sans aucune connaissance de l'écriture de la politique SELinux. Par exemple, si vous souhaitez que httpd envoie des e-mails, saisissez :

    $ sudo setsebool -P httpd_can_sendmail 1
  1. SELinux doit savoir Les booléens sont juste des paramètres d'activation/désactivation pour SELinux :
    • Pour voir tous les booléens :# getsebool -a
    • Pour voir la description de chacun :# semanage boolean -l
    • Pour définir un booléen, exécutez :# setsebool [_boolean_] [1|0]
    • Pour le configurer de façon permanente, ajoutez -P . Par exemple :

      # setsebool httpd_enable_ftp_server 1 -P
  1. Les règles/applications SELinux peuvent contenir des bogues, notamment :
    • Chemins de code inhabituels
    • Configurations
    • Redirection de stdout
    • Descripteurs de fichiers divulgués
    • Mémoire exécutable
    • Bibliothèques mal construites
  1. Vos informations peuvent être compromises si vous avez des domaines confinés essayant de :
    • Charger les modules du noyau
    • Désactivez le mode d'application de SELinux
    • Écrire dans etc_t/shadow_t
    • Modifier les règles iptables
  1. Outils SELinux pour le développement de modules de politique :
    $ yum -y install setroubleshoot setroubleshoot-server

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

  1. Utilisez journalctl pour répertorier tous les journaux liés à setroubleshoot :
    $ sudo journalctl -t setroubleshoot --since=14:20

  1. Utilisez journalctl pour répertorier tous les journaux liés à une étiquette SELinux particulière. Par exemple :
    $ sudo journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
  1. Utilisez setroubleshoot log lorsqu'une erreur SELinux se produit et suggère des solutions possibles. Par exemple, depuis journalctl :

    Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

    # sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
    SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.

    ***** Plugin restorecon (99.5 confidence) suggests ************************

    If you want to fix the label,
    /var/www/html/index.html default label should be httpd_syscontent_t.
    Then you can restorecon.
    Do
    # /sbin/restorecon -v /var/www/html/index.html
  1. Logging :SELinux enregistre des informations partout :
    • /var/log/messages
    • /var/log/audit/audit.log
    • /var/lib/setroubleshoot/setroubleshoot_database.xml
  1. Journalisation :Recherche d'erreurs SELinux dans le journal d'audit :

    $ sudo ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
  1. Pour rechercher des messages SELinux Access Vector Cache (AVC) pour un service particulier :

    $ sudo ausearch -m avc -c httpd
  1. Le audit2allow L'utilitaire rassemble des informations à partir des journaux des opérations refusées, puis génère des règles d'autorisation de politique SELinux. Par exemple :
    • Pour produire une description lisible de la raison pour laquelle l'accès a été refusé :# audit2allow -w -a
    • Pour afficher la règle d'application de type qui autorise l'accès refusé :# audit2allow -a
    • Pour créer un module personnalisé :# audit2allow -a -M mypolicy

      Le -M L'option crée un fichier d'application de type (.te) avec le nom spécifié et compile la règle dans un package de stratégie (.pp) :mypolicy.pp mypolicy.te
    • Pour installer le module personnalisé :# semodule -i mypolicy.pp
  1. Pour configurer un seul processus (domaine) pour qu'il s'exécute en mode permissif :# semanage permissive -a httpd_t
  1. Si vous ne souhaitez plus qu'un domaine soit permissif :# semanage permissive -d httpd_t
  1. Pour désactiver tous les domaines permissifs :

    $ sudo semodule -d permissivedomains
  1. Activation de la politique SELinux MLS :

    $ sudo yum install selinux-policy-mls

    Dans /etc/selinux/config:

    SELINUX=permissive
    SELINUXTYPE=mls

    Assurez-vous que SELinux s'exécute en mode permissif :

    $ sudo setenforce 0

    Utilisez les fixfiles script pour s'assurer que les fichiers sont réétiquetés au prochain redémarrage :

    $ sudo fixfiles -F onboot
    $ sudo reboot
  1. Créez un utilisateur avec une plage MLS spécifique :

    $ sudo useradd -Z staff_u tux

    Utilisation de useradd commande, associez le nouvel utilisateur à un utilisateur SELinux existant (dans ce cas, staff_u ).

  1. Pour afficher le mappage entre les utilisateurs SELinux et Linux :

    $ sudo semanage login -l
  1. Définissez une plage spécifique pour un utilisateur :

    $ sudo semanage login --modify --range s2:c100 tux
  1. Pour corriger le libellé du répertoire personnel de l'utilisateur (si nécessaire) :

    $ sudo chcon -R -l s2:c100 /home/tux
  1. Pour lister les catégories actuelles :

    $ sudo chcat -L
  1. Pour modifier les catégories ou commencer à créer les vôtres, modifiez le fichier comme suit :

    /etc/selinux/_<selinuxtype>_/setrans.conf
  1. Pour exécuter une commande ou un script dans un fichier, un rôle et un contexte utilisateur spécifiques :

    $ sudo runcon -t initrc_t -r system_r -u user_u yourcommandhere
    • -t est le contexte du fichier
    • -r est le contexte du rôle
    • -u est le contexte utilisateur
  1. Conteneurs fonctionnant avec SELinux désactivé :
    • Avec Podman :# podman run --security-opt label=disable …
    • Avec Docker :# docker run --security-opt label=disable …
  1. Si vous devez accorder à un conteneur un accès complet au système :
    • Avec Podman :# podman run --privileged …
    • Avec Docker :# docker run --privileged …

Et avec cela, vous connaissez déjà la réponse. Alors s'il vous plaît : Ne paniquez pas et activez SELinux .

Source :

  • SELinux par Dan Walsh
  • Votre guide pratique visuel pour l'application des politiques SELinux également par Dan Walsh
  • Security Enhanced Linux pour les simples mortels par Thomas Cameron
  • Le livre de coloriage SELinux par Máirín Duffy
  • Guide de l'utilisateur et de l'administrateur de SELinux—Red Hat Enterprise Linux 7

Linux
  1. Un guide du terminal Linux pour les débutants

  2. Aide-mémoire pratique d'un administrateur système pour SELinux

  3. Top 30 des questions et réponses d'entretien OpenStack

  4. 20 questions et réponses d'entrevue avec Postfix

  5. Guide de l'administrateur système pour la configuration d'un serveur de messagerie

Guide Ansible :la commande ad hoc

Guide de l'administrateur système sur les composants de base de Kubernetes

Le guide ultime de la manipulation d'images avec ImageMagick

Le guide complet pour installer MySQL sur Ubuntu

Cronjob - Le guide complet des Cronjobs

Les 50 questions et réponses d'entrevue Linux les plus posées