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 marquageselinux=0
noyau ne charge pas l'infrastructure SELinuxenforcing=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: