Chapitre 4. Configuration de SELinux pour les applications et les services avec des configurations non standard
Lorsque SELinux est en mode d'application, la politique par défaut est la politique ciblée. Les sections suivantes fournissent des informations sur la mise en place et la configuration de la stratégie SELinux pour divers services après avoir modifié les valeurs par défaut de la configuration, telles que les ports, l'emplacement des bases de données ou les autorisations du système de fichiers pour les processus.
Vous apprenez à modifier les types SELinux pour les ports non standard, à identifier et à corriger les étiquettes incorrectes pour les changements de répertoires par défaut et à ajuster la politique à l'aide des booléens SELinux.
4.1. Personnalisation de la politique SELinux pour le serveur HTTP Apache dans une configuration non standard
Vous pouvez configurer le serveur HTTP Apache pour qu'il écoute sur un port différent et pour qu'il fournisse du contenu dans un répertoire autre que celui par défaut. Pour éviter les refus SELinux qui en découlent, suivez les étapes de cette procédure pour ajuster la politique SELinux de votre système.
Conditions préalables
-
Le paquet
httpd
est installé et le serveur HTTP Apache est configuré pour écouter sur le port TCP 3131 et pour utiliser le répertoire/var/test_www/
au lieu du répertoire par défaut/var/www/
. -
Les paquets
policycoreutils-python-utils
etsetroubleshoot-server
sont installés sur votre système.
Procédure
Démarrez le service
httpd
et vérifiez l'état :# systemctl start httpd # systemctl status httpd ... httpd[14523]: (13)Permission denied: AH00072: make_sock: could not bind to address [::]:3131 ... systemd[1]: Failed to start The Apache HTTP Server. ...
La politique SELinux suppose que
httpd
fonctionne sur le port 80 :# 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
Modifier le type SELinux du port 3131 pour qu'il corresponde au port 80 :
# semanage port -a -t http_port_t -p tcp 3131
Recommencer
httpd
:# systemctl start httpd
Cependant, le contenu reste inaccessible :
# wget localhost:3131/index.html ... HTTP request sent, awaiting response... 403 Forbidden ...
Trouvez la raison à l'aide de l'outil
sealert
:# sealert -l "*" ... SELinux is preventing httpd from getattr access on the file /var/test_www/html/index.html. ...
Comparez les types SELinux pour le chemin standard et le nouveau chemin à l'aide de l'outil
matchpathcon
:# matchpathcon /var/www/html /var/test_www/html /var/www/html system_u:object_r:httpd_sys_content_t:s0 /var/test_www/html system_u:object_r:var_t:s0
Modifiez le type SELinux du nouveau répertoire de contenu
/var/test_www/html/
pour qu'il corresponde au type du répertoire par défaut/var/www/html
:# semanage fcontext -a -e /var/www /var/test_www
Réétiqueter le répertoire
/var
de manière récursive :# restorecon -Rv /var/ ... Relabeled /var/test_www/html from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0 Relabeled /var/test_www/html/index.html from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
Vérification
Vérifiez que le service
httpd
est en cours d'exécution :# systemctl status httpd ... Active: active (running) ... systemd[1]: Started The Apache HTTP Server. httpd[14888]: Server configured, listening on: port 3131 ...
Vérifiez que le contenu fourni par le serveur HTTP Apache est accessible :
# wget localhost:3131/index.html ... HTTP request sent, awaiting response... 200 OK Length: 0 [text/html] Saving to: ‘index.html’ ...
Ressources supplémentaires
-
Les pages de manuel
semanage(8)
,matchpathcon(8)
, etsealert(8)
.