Aide-mémoire SELinux pour les administrateurs système : 42 réponses aux questions importantes

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

Aide-mémoire SELinux pour les administrateurs système : 42 réponses aux questions importantes

Ici, vous obtiendrez des réponses à des questions importantes sur la vie, l'univers et tout ce qui concerne Linux avec une sécurité améliorée.

"La vérité importante selon laquelle les choses ne sont pas toujours ce qu'elles semblent être est de notoriété publique..."

-Douglas Adams, Le Guide du voyageur galactique

Sécurité. Fiabilité accrue. Correspondance. Politique. Administrateur système des Quatre Cavaliers de l'Apocalypse. 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 les systèmes pour lesquels le fournisseur tiers nous recommande de désactiver la sécurité renforcée. C'est comme du travail Ethan Chasse de « Mission : Impossible ».

Face à ce dilemme, certains administrateurs système décident de prendre pilule bleue, parce qu’ils pensent qu’ils ne connaîtront jamais la réponse à la grande question de la vie, de l’univers et tout ça. Et comme nous le savons tous, cette réponse est 42.

Dans l'esprit du Guide du voyageur galactique, voici 42 réponses à des questions importantes sur le contrôle et l'utilisation. SELinux sur vos systèmes.

1. SELinux est un système de contrôle d'accès forcé, ce qui signifie que chaque processus possède une étiquette. Chaque fichier, répertoire et objet système possède également des étiquettes. Les règles de stratégie contrôlent l'accès entre les processus et les objets balisés. Le noyau applique ces règles.

2. Les deux notions les plus importantes sont : Étiquetage — marquages ​​(fichiers, processus, ports, etc.) et Application du type (qui isole les processus les uns des autres en fonction des types).

3. Format d'étiquette correct user:role:type:level (facultatif).

4. Le but de fournir une sécurité à plusieurs niveaux (Sécurité multi-niveaux - MLS) consiste à gérer 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 des données top secrètes.

5. Assurer une sécurité multicatégorie (Sécurité multicatégorie - MCS) protège les processus similaires les uns des autres (par exemple, les machines virtuelles, les moteurs OpenShift, les sandbox SELinux, les conteneurs, etc.).

6. Options du noyau pour changer les modes SELinux au démarrage :

  • autorelabel=1 → amène le système à exécuter un réétiquetage
  • selinux=0 → le noyau ne charge pas l'infrastructure SELinux
  • enforcing=0 → chargement en mode permissif

7. Si vous devez réétiqueter l'ensemble du système :

# touch /.autorelabel
#reboot

Si le marquage du système contient un grand nombre d'erreurs, vous devrez peut-être démarrer en mode permissif pour que le remarquage 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 de marquage 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 du fichier journal : /var/log/httpd → httpd_log_t
  • Répertoire de contenu : /var/www/html → httpd_sys_content_t
  • Script de lancement : /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é en contexte httpd_t, peut interagir avec un objet étiqueté httpd_something_t.

13. De nombreuses commandes acceptent un 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 comme lors de l'installation.

14. Il existe quatre causes principales d'erreurs SELinux, qui sont décrites plus en détail aux points 15 à 21 ci-dessous :

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

15. Problème d'étiquetage: si vos fichiers sont dans /srv/myweb sont mal marqués, l’accès peut être refusé. Voici quelques façons de résoudre ce problème :

  • Si vous connaissez l'étiquette :
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Si vous connaissez un fichier avec des marquages ​​équivalents :
    # semanage fcontext -a -e /srv/myweb /var/www
  • Restauration du 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 résoudre ce problème :

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

17. si SELinux que vous devez savoirque HTTPD écoute sur le port 8585, dites à SELinux :

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

18. SELinux que vous devez savoir Valeurs booléennes qui permettent de modifier certaines parties de la politique SELinux au moment de l'exécution sans que la politique SELinux soit écrasée. Par exemple, si vous souhaitez que httpd envoie un e-mail, saisissez : # setsebool -P httpd_can_sendmail 1

19. SELinux que vous devez savoir valeurs logiques pour activer/désactiver les paramètres SELinux :

  • Pour voir toutes les valeurs booléennes : # getsebool -a
  • Pour voir une description de chacun : # semanage boolean -l
  • Pour définir une valeur booléenne : # setsebool [_boolean_] [1|0]
  • Pour une installation permanente, ajoutez -P. Par exemple: # setsebool httpd_enable_ftp_server 1 -P

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

  • Chemins de code inhabituels
  • Les configurations
  • Redirection de la sortie standard
  • Fuites du descripteur de fichier
  • Mémoire exécutable
  • Bibliothèques mal construites

Billets ouverts (ne soumettez pas de rapport à Bugzilla ; Bugzilla n'a pas de SLA).

21. Vos informations peuvent être compromisessi vous avez des domaines restreints, essayez de :

  • Charger les modules du noyau
  • Désactiver le mode SELinux forcé
  • Écrire à etc_t/shadow_t
  • Changer les règles iptables

22. Outils SELinux pour développer des modules de politique :

# yum -y install setroubleshoot setroubleshoot-server

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

23. utilisation

journalctl

pour afficher une liste de tous les journaux associés à setroubleshoot:

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

24. utilisation journalctl pour lister tous les journaux associés à une balise SELinux spécifique. Par exemple:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Si une erreur SELinux se produit, utilisez le journal setroubleshoot proposant plusieurs solutions possibles.
Par exemple, de 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

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

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

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

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

28. Pour rechercher les messages SELinux Access Vector Cache (AVC) pour un service spécifique :

# 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 d'autorisation SELinux. Par exemple:

  • Pour créer une description lisible des raisons pour lesquelles l'accès est refusé : # audit2allow -w -a
  • Pour afficher une règle d'application de type autorisant l'accès refusé : # audit2allow -a
  • Pour créer un module personnalisé : # audit2allow -a -M mypolicy
  • Option -M 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 un module personnalisé : # semodule -i mypolicy.pp

30. Pour configurer un processus distinct (domaine) pour qu'il fonctionne en mode permissif : # semanage permissive -a httpd_t

31. Si vous ne souhaitez 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 SELinux : # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Assurez-vous que SELinux fonctionne en mode permissif : # setenforce 0
Utiliser un script fixfilespour vous assurer que les fichiers seront réétiquetés au prochain redémarrage :

# fixfiles -F onboot # reboot

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

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

35. Pour afficher le mappage 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 le libellé du répertoire personnel de l'utilisateur (si nécessaire) : # chcon -R -l s2:c100 /home/john

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

39. Pour changer de catégorie ou commencer à créer la vôtre, modifiez le fichier comme suit :

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

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

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

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

41. Conteneurs exécutés avec SELinux désactivé :

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

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

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

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

Liens:

Source: habr.com

Ajouter un commentaire