Aide-mémoire de l'administrateur système SELinux: 42 réponses à des questions importantes

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




Ici, vous obtiendrez des réponses à des questions importantes sur la vie, l'univers et tout cela sous Linux avec une sécurité renforcée.

"La vérité importante est que les choses ne sont pas toujours ce qu'elles semblent être bien connues ..."

―Douglas Adams, le guide de l'auto-stoppeur de la galaxie

La sécurité Amélioration de la fiabilité. Conformité. La politique. Quatre cavaliers de l'apocalypse du sysadmin. 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 où un fournisseur tiers recommande de désactiver la sécurité renforcée. Ceci est similaire au travail d' Ethan Hunt de Mission Impossible.

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 tout ça. Et, comme nous le savons tous, cette réponse est 42.

Dans l'esprit du «Guide de l'auto-stoppeur de la galaxie», voici 42 réponses à des questions importantes sur la gestion et l'utilisation de SELinux sur vos systèmes.

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

2. Les deux concepts les plus importants sont: Ă©tiquetage - Ă©tiquetage (fichiers, processus, ports, etc.) et application du type (qui isole les processus les uns des autres en fonction des types).

3. Le format d'Ă©tiquette correct est user:role:type:level (facultatif).

4. L'objectif de fournir une sécurité à plusieurs niveaux (MLS ) est de 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 la sécurité multi-catégories (MCS ) protège les processus similaires les uns des autres (par exemple, les machines virtuelles, les mécanismes OpenShift, les sandbox SELinux, les conteneurs, etc.).

6. Paramètres du noyau pour changer les modes SELinux au démarrage:

  • autorelabel=1 force le système Ă  commencer un nouveau marquage
  • selinux=0 noyau ne charge pas l'infrastructure SELinux
  • enforcing=0 chargement en mode permissif

7. Si vous devez marquer de nouveau l'ensemble du système:

# touch /.autorelabel
#reboot


Si le marquage système contient un grand nombre d'erreurs, vous devrez peut-être démarrer en mode permissif pour que le marquage 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 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

Un processus exécuté dans le contexte de httpd_t peut interagir avec un objet 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 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 comme lors de l'installation.

14. Il existe quatre causes principales d'erreurs SELinux, qui sont décrites plus en détail dans les paragraphes 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 de marquage : si vos fichiers dans /srv/myweb marqués de manière incorrecte, 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
  • Après avoir restaurĂ© le contexte (pour les deux cas):
    # restorecon -vR /srv/myweb

16. Le problème avec le marquage: si vous déplacez le fichier au lieu de le copier, le fichier conservera son contexte d'origine. Pour résoudre ce problème:

  • Modifiez la commande de contexte intitulĂ©e:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Modifiez la commande de contexte avec le libellĂ© 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 a besoin de savoir que HTTPD Ă©coute sur le port 8585, dites Ă  SELinux:

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

18. SELinux doit connaître les valeurs booléennes qui vous permettent de modifier des parties de la politique SELinux au moment de l'exécution sans avoir à connaître la réécriture des politiques SELinux. Par exemple, si vous souhaitez que httpd envoie un e-mail, entrez: # setsebool -P httpd_can_sendmail 1

19. SELinux doit connaître les 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 fantaisie
  • Configurations
  • Rediriger stdout
  • Fuites du descripteur de fichier
  • MĂ©moire exĂ©cutable
  • Bibliothèques mal construites

Billets ouverts (n'envoyez pas de rapport Ă  Bugzilla; il n'y a pas de SLA Ă  Bugzilla).

21. Vos informations peuvent être compromises si vous avez des domaines limités essayant de:

  • TĂ©lĂ©charger les modules du noyau
  • DĂ©sactiver le mode SELinux appliquĂ©
  • Écrivez dans etc_t/shadow_t
  • Modifier les règles iptables

22. Outils SELinux pour développer des modules politiques:

# yum -y install setroubleshoot setroubleshoot-server

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

23. Utilisation
 journalctl 
pour répertorier tous les journaux associés à setroubleshoot :

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

24. Utilisez journalctl pour répertorier tous les journaux associés à une étiquette SELinux particulière. Par exemple:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Si une erreur SELinux se produit, utilisez le journal setroubleshoot avec quelques solutions possibles.
Par exemple, Ă  partir 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 des informations Ă  plusieurs endroits:

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

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

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

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

# ausearch -m avc -c httpd

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

  • Pour crĂ©er une description lisible de la raison du refus d'accès: # audit2allow -w -a
  • Pour afficher une règle d'application de type qui autorise un accès refusĂ©: # audit2allow -a
  • Pour crĂ©er un module personnalisĂ©: # audit2allow -a -M mypolicy
  • L'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 fonctionner en mode permissif: # 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 SELinux: # yum install selinux-policy-mls
/etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls
# yum install selinux-policy-mls
/etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls


Assurez-vous que SELinux est en mode permissif: # setenforce 0
Utilisez le script fixfiles pour vous assurer que les fichiers seront re-marqués lors du prochain redémarrage:

# fixfiles -F onboot # reboot

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

Ă€ l'aide de la commande useradd , useradd le nouvel utilisateur Ă  l'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 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 de rĂ´le
  • -u contexte utilisateur

41. Conteneurs travaillant 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 connaissez déjà la réponse. Par conséquent, veuillez ne pas paniquer et activer SELinux.

Références:


Source: https://habr.com/ru/post/fr484896/


All Articles