Pendant des années, SELinux a contribué à prévenir les dommages causés aux systèmes par les exploits zero-day. Cet outil est également utile pour l'isolation des machines virtuelles et est requis pour l'isolation des conteneurs. Pourtant, SELinux est encore couramment désactivé ou placé en mode permissif.
targeted
de SELinux La stratégie est conçue pour isoler divers domaines de processus tout en permettant l'interaction entre les services selon les besoins. Quelques commandes suffisent à un administrateur pour configurer un système afin d'utiliser cette politique avec ses applications personnalisées, en gardant SELinux en mode d'application.
[En savoir plus sur l'utilisation de la documentation sur la politique SELinux ici.]
Le semanage
La commande est utilisée pour ajuster les contextes de fichier, les contextes de port et les booléens. S'il existe toujours un conflit avec un processus particulier, ce domaine peut être placé en mode permissif jusqu'à ce qu'une enquête plus approfondie puisse être effectuée. Cela laisse le reste du système protégé en mode application.
Avec seulement les quatre semanage
commandes ci-dessous, la plupart des systèmes peuvent être configurés pour que vos applications personnalisées s'exécutent avec SELinux en mode d'application.
Le semanage boolean
commande
Le targeted
la politique inclut de nombreux booléens pour activer et désactiver les ensembles de allow
règles, en partant du principe que les services ont plusieurs cas d'utilisation et sont exécutés différemment dans chaque environnement. L'utilisation de booléens permet différents ensembles de règles pour différents cas d'utilisation :un serveur Web dans un environnement universitaire peut avoir besoin d'autoriser les étudiants à publier du contenu à partir de leurs répertoires d'accueil, tandis qu'un site d'entreprise destiné au public peut avoir besoin de refuser l'accès à tout utilisateur répertoires, limiter les exécutables SSI et afficher les données stockées sur un partage NFS.
Le httpd_selinux
La page de manuel décrit l'utilisation de tous les booléens fournis pour le httpd
domaine ainsi qu'un exemple de setsebool
commandes pour activer de manière persistante chaque booléen. Une autre façon (et plus récente) de voir et de modifier ces booléens consiste à utiliser le semanage boolean
commande.
Le -l
L'option répertorie tous les booléens de la stratégie chargée. Vous pouvez ensuite filtrer par mot-clé :
$ sudo semanage boolean -l | grep httpd
httpd_anon_write (off , off) Allow httpd to anon write
httpd_builtin_scripting (on , on) Allow httpd to builtin scripting
httpd_can_check_spam (off , off) Allow httpd to can check spam
httpd_can_connect_ftp (off , off) Allow httpd to can connect ftp
httpd_can_connect_ldap (off , off) Allow httpd to can connect ldap
Cette sortie inclut le nom du booléen, l'état actuel et persistant du booléen et une brève description de la façon dont le booléen est utilisé.
Changer le booléen avec semanage
utiliser :
$ sudo semanage boolean -m --off httpd_ssi_exec
Vous pouvez également lister les booléens personnalisés localement en ajoutant le -C
choix :
$ sudo semanage boolean -l -C
SELinux boolean State Default Description
httpd_ssi_exec (off , off) Allow httpd to ssi exec
virt_sandbox_use_all_caps (on , on) Allow virt to sandbox use all caps
virt_use_nfs (on , on) Allow virt to use nfs
Les pages de manuel de chaque domaine SELinux contiennent des descriptions de tous les booléens fournis pour ces domaines. Pour plus d'options lors de la modification des booléens SELinux avec semanage
, voir le semanage-boolean
page de manuel.
Vous pouvez automatiser ces semanage
commandes avec leurs modules et rôles Ansible associés. Le module Ansible pour semanage boolean
est seboolean
. Ceci, ainsi que les modules associés décrits ci-dessous, sont utilisés par les rôles fournis par linux-system-roles
package dans Fedora ou rhel-system-roles
package dans Red Hat Enterprise Linux. Le package Red Hat est disponible à partir de Red Hat Enterprise Linux 7.4 et se trouve dans le référentiel "Extras".
Le semanage fcontext
commande
Le targeted
La stratégie fournit des informations de contexte de fichier pour le fichier d'application, y compris les fichiers de données, de journal et d'exécution, les emplacements alternatifs par défaut et communs. Ces définitions de contexte sont les mappings que le restorecon
commande utilise pour vérifier ou modifier le contexte du fichier.
Le semanage fcontext
La commande peut être utilisée pour répertorier les définitions de contexte de fichier et en ajouter d'autres. Le -l
L'option affiche tous les contextes de la stratégie chargée. Vous pouvez ensuite filtrer par mot-clé :
$ sudo semanage fcontext -l | grep sshd
/etc/rc\.d/init\.d/sshd regular file system_u:object_r:sshd_initrc_exec_t:s0
/etc/ssh/primes regular file system_u:object_r:sshd_key_t:s0
/etc/ssh/ssh_host.*_key regular file system_u:object_r:sshd_key_t:s0
/etc/ssh/ssh_host.*_key\.pub regular file system_u:object_r:sshd_key_t:s0
/usr/lib/systemd/system/sshd-keygen.* regular file system_u:object_r:sshd_keygen_unit_file_t:s0
Cette sortie inclut le modèle d'expression régulière pour les noms de fichiers cibles, le type de fichier et le contexte de fichier à attribuer au nom de fichier correspondant.
La page de manuel associée, dans ce cas man sshd_selinux
, inclut une liste des fichiers gérés et une description de chaque contexte de fichier disponible pour le domaine. Il existe également des exemples de commandes pour spécifier et appliquer un autre étiquetage.
Par exemple, si vous vouliez stocker le sshd
host keys dans un sous-répertoire séparé, vous pouvez exécuter les deux commandes suivantes :
$ sudo semanage fcontext -a -t sshd_key_t '/etc/ssh/keys(/.*)?'
$ sudo restorecon -r /etc/ssh/keys
Dans cet exemple, l'expression régulière correspondra au répertoire /etc/ssh/keys
ainsi que tous les sous-répertoires et fichiers trouvés dans le /etc/ssh/keys
répertoire.
Tout comme les booléens, vous pouvez afficher tous les contextes de fichiers personnalisés localement en ajoutant le -C
choix :
$ sudo semanage fcontext -l -C
SELinux fcontext type Context
/usr/share/dnfdaemon/dnfdaemon-system all files system_u:object_r:rpm_exec_t:s0
Pour plus d'options lors de la modification des contextes de fichiers SELinux, consultez le semanage-fcontext
page de manuel.
Vous pouvez automatiser le semanage fcontext
commande avec Ansible sefcontext
module. Le restorecon
La commande devra toujours être exécutée avec un module de commande séparé. Voir ansible-doc sefcontext
pour des exemples. Le selinux
le rôle système inclut les deux tâches.
Le semanage port
commande
En plus des contextes de fichiers, le targeted
La stratégie définit également les contextes de port. Tout comme pour les booléens et les contextes de fichiers, les pages de manuel spécifiques au domaine répertorient les types définis et peuvent également afficher les exemples de commandes nécessaires pour exécuter un service sur un port différent.
Visualisez les contextes de ports avec :
$ sudo semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
Lors de l'exécution d'un service sur un port personnalisé, vous devez modifier le fichier de configuration du service et également ajouter une définition de port SELinux. Sans la définition du port, le service ne parviendra pas à démarrer et consignera une erreur semblable à "Impossible de se lier au port".
Ajoutez une définition de port avec :
$ sudo semanage port -a -t http_cache_port_t -p tcp 8010
Lorsque vous spécifiez le port, vous devez inclure à la fois le protocole et le numéro de port. De plus, un seul type peut être défini pour chaque protocole et numéro de port. Pour plus d'options lors de la modification des contextes de port SELinux, consultez le semanage-port
page de manuel.
Vous pouvez automatiser le semanage-port
commande avec le seport
Module ansible.
Le semanage permissive
commande
Au lieu de déplacer l'ensemble du système en mode permissif, ou pire, de désactiver complètement SELinux, vous pouvez placer un seul domaine en mode permissif. Un domaine en mode permissif autorise toutes les actions tout en enregistrant tout refus éventuel. Les autres domaines du système restent en mode d'application, qui enregistre et refuse les actions qui ne sont pas spécifiquement autorisées.
Les pages de manuel pour les domaines communs répertorient les types SELinux qui peuvent être placés en mode permissif.
Pour répertorier tous les domaines actuellement en mode permissif, utilisez :
$ sudo semanage permissive -l
Lors de l'installation initiale, il est peu probable qu'il y ait des domaines en mode permissif.
Pour placer un domaine en mode permissif, utilisez :
$ sudo semanage permissive -a squid_t
Le -d
supprime un domaine permissif, réactivant ainsi le mode d'application pour ce domaine.
Pour plus d'options lors du placement de domaines en mode permissif, consultez le semanage-permissive
page de manuel.
Ansible selinux_permissive
module peut être utilisé pour placer un domaine en mode permissif. Voir ansible-doc selinux_permissive
pour des exemples.
Les fichiers
L'ensemble du semanage
les commandes qui ajoutent ou modifient les informations de stockage de la configuration de la stratégie ciblée dans *local
fichiers sous /etc/selinux/targeted
arborescence de répertoires. Ces fichiers comportent tous des avertissements indiquant qu'ils ne doivent pas être modifiés directement, mais sont utilisés pour préserver la personnalisation. Lorsque les packages SELinux et de stratégie sont mis à jour, ces fichiers de personnalisation locaux sont laissés en place et appliqués à la stratégie mise à jour.