ProHoster > Blog > administration > Aide-mémoire SELinux pour les administrateurs système : 42 réponses aux questions importantes
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".
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 :
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 :
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 :
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 :