Introduction
Dans ce laboratoire, vous acquerrez une expérience pratique dans la gestion de la sécurité SELinux sous RHEL. Vous apprendrez à modifier les modes d'application de SELinux, de manière temporaire et persistante, et à configurer Apache avec des contextes de fichiers SELinux personnalisés. Le laboratoire couvre également l'ajustement de la politique SELinux pour les répertoires personnels des utilisateurs à l'aide de booléens et fournit des étapes pratiques pour le dépannage et la résolution des refus SELinux pour les serveurs web Apache et le contenu web personnalisé.
Modifier le mode d'application de SELinux
Dans cette étape, vous apprendrez à gérer les modes SELinux, de manière temporaire et persistante. SELinux (Security-Enhanced Linux) est un mécanisme de sécurité qui fournit un contrôle d'accès obligatoire (MAC - Mandatory Access Control) pour le noyau Linux. Il définit les droits d'accès pour les processus, les fichiers et autres ressources système.
SELinux fonctionne dans trois modes principaux :
- Enforcing : La politique SELinux est appliquée. Les accès refusés par la politique sont bloqués et enregistrés. C'est le mode par défaut et le plus sécurisé.
- Permissive : La politique SELinux n'est pas appliquée. Les accès refusés par la politique sont enregistrés mais pas bloqués. Ce mode est utile pour le dépannage et le test de nouvelles politiques.
- Disabled : SELinux est désactivé. Aucune politique n'est chargée ou appliquée. Ce mode n'est généralement pas recommandé pour les systèmes de production.
Vous vous entraînerez à changer le mode SELinux à l'aide d'outils en ligne de commande et en modifiant les fichiers de configuration.
Tout d'abord, vérifions le mode d'application SELinux actuel.
Vérifier le mode d'application SELinux actuel.
Vous pouvez utiliser la commande
getenforcepour voir rapidement le mode SELinux actuel.getenforceVous devriez voir
Enforcingen sortie, indiquant que SELinux applique actuellement ses politiques.EnforcingChanger temporairement le mode SELinux en
permissive.La commande
setenforcevous permet de changer le mode SELinux au moment de l'exécution. Une valeur de0définit le mode surpermissive, et1le définit surenforcing. Ce changement est temporaire et ne persistera pas après les redémarrages.sudo setenforce 0Maintenant, vérifiez le changement en utilisant à nouveau
getenforce.getenforceLa sortie devrait maintenant être
Permissive.PermissiveChanger temporairement le mode SELinux en
enforcing.Pour annuler le changement temporaire, utilisez
setenforce 1.sudo setenforce 1Vérifiez à nouveau le mode.
getenforceLa sortie devrait être
Enforcingà nouveau.EnforcingChanger de manière persistante le mode SELinux par défaut en
permissive.Pour rendre les changements de mode SELinux persistants après les redémarrages, vous devez modifier le fichier
/etc/selinux/config. Ce fichier définit le mode SELinux par défaut pour le système.Ouvrez le fichier de configuration en utilisant
nano.sudo nano /etc/selinux/configDans l'éditeur
nano, trouvez la ligne qui commence parSELINUX=et changez sa valeur deenforcingàpermissive.## This file controls the state of SELinux on the system. ## SELINUX= can take one of these three values: ## enforcing - SELinux security policy is enforced. ## permissive - SELinux prints warnings instead of enforcing. ## disabled - No SELinux policy is loaded. SELINUX=permissive ## SELINUXTYPE= can take one of these three values: ## targeted - Targeted processes are protected, ## for the majority of users. ## minimum - Modification of targeted policy ## uses current settings and adds to it. ## mls - Multi Level Security protection. SELINUXTYPE=targetedAppuyez sur
Ctrl+Xpour quitter, puis surYpour confirmer l'enregistrement, et surEntréepour écrire dans le même fichier.Après avoir enregistré le fichier, vous pouvez confirmer le changement dans le fichier de configuration en utilisant
grep.grep '^SELINUX' /etc/selinux/configLa sortie devrait afficher
SELINUX=permissive.SELINUX=permissive SELINUXTYPE=targetedNote importante : Changer
/etc/selinux/configne modifie pas immédiatement le mode SELinux actif. Il ne définit que le mode qui sera appliqué après le prochain redémarrage du système. Pour voir le mode actif actuel, vous devez toujours utilisergetenforce.getenforceIl devrait toujours afficher
Enforcingcar le système n'a pas encore été redémarré.EnforcingChanger le mode SELinux par défaut en
enforcingdans le fichier de configuration.Maintenant, changeons le mode persistant en
enforcing. C'est le paramètre recommandé et le plus sécurisé pour SELinux.Ouvrez à nouveau le fichier de configuration.
sudo nano /etc/selinux/configChangez le paramètre
SELINUX=enenforcing.## This file controls the state of SELinux on the system. ## SELINUX= can take one of these three values: ## enforcing - SELinux security policy is enforced. ## permissive - SELinux prints warnings instead of enforcing. ## disabled - No SELinux policy is loaded. SELINUX=enforcing ## SELINUXTYPE= can take one of these three values: ## targeted - Targeted processes are protected, ## for the majority of users. ## minimum - Modification of targeted policy ## uses current settings and adds to it. ## mls - Multi Level Security protection. SELINUXTYPE=targetedEnregistrez et quittez le fichier (
Ctrl+X,Y,Entrée).Confirmez le changement dans le fichier de configuration.
grep '^SELINUX' /etc/selinux/configLa sortie devrait maintenant afficher
SELINUX=enforcing.SELINUX=enforcing SELINUXTYPE=targetedÀ ce stade, le mode SELinux actif du système est toujours
Enforcing(si vous n'avez pas redémarré après l'étape 4), et le paramètre persistant est égalementEnforcing.
Configurer Apache avec des contextes de fichiers SELinux personnalisés
Dans cette étape, vous apprendrez à configurer Apache pour servir du contenu web à partir d'un répertoire non standard et à gérer ses contextes de fichiers SELinux. Par défaut, les politiques SELinux restreignent Apache (httpd) à servir des fichiers uniquement à partir de répertoires spécifiques, principalement /var/www/html. Si vous placez du contenu web dans un autre emplacement, SELinux empêchera Apache d'y accéder, même si les permissions du système de fichiers sont correctes. C'est là que les contextes de fichiers SELinux entrent en jeu.
Un contexte de fichier SELinux est une étiquette appliquée à un fichier ou un répertoire qui définit ses attributs de sécurité. Pour qu'Apache serve du contenu à partir d'un emplacement personnalisé, cet emplacement et son contenu doivent avoir le contexte SELinux correct, généralement httpd_sys_content_t. Vous utiliserez semanage fcontext pour définir une règle persistante et restorecon pour l'appliquer.
Tout d'abord, vous devez installer le serveur HTTP Apache.
Installer le serveur HTTP Apache.
Utilisez le gestionnaire de paquets
dnfpour installer le paquethttpd.sudo dnf install -y httpdVous devriez voir une sortie indiquant l'installation réussie du paquet
httpdet de ses dépendances.Créer un répertoire personnalisé pour le contenu web et un fichier
index.html.Vous allez créer un nouveau répertoire nommé
/customet y placer un simple fichierindex.html. Ce sera votre racine de documents web non standard.sudo mkdir /custom echo 'This is custom web content.' | sudo tee /custom/index.htmlVérifiez le contenu du fichier
index.html.cat /custom/index.htmlThis is custom web content.Configurer Apache pour utiliser la nouvelle racine de documents.
Le fichier de configuration principal d'Apache est
/etc/httpd/conf/httpd.conf. Vous devez modifier ce fichier pour pointer Apache vers votre nouveau répertoire/customau lieu du répertoire par défaut/var/www/html.Ouvrez le fichier de configuration en utilisant
nano.sudo nano /etc/httpd/conf/httpd.confDans l'éditeur, trouvez les lignes
DocumentRoot "/var/www/html"et<Directory "/var/www/html">. Remplacez toutes les occurrences de/var/www/htmlpar/custom.Les sections pertinentes devraient ressembler à ceci après modification :
# ## DocumentRoot: The directory out of which you will serve your ## documents. By default, all requests are taken from this directory, but ## symbolic links and aliases may be used to point to other locations. # DocumentRoot "/custom" # ## Relax access to content within /var/www. # <Directory "/custom"> AllowOverride None ## Allow open access: Require all granted </Directory>Enregistrez et quittez le fichier (
Ctrl+X,Y,Entrée).Démarrer et activer le service web Apache.
Après avoir modifié la configuration, vous devez démarrer le service
httpd. Puisque vous êtes dans un environnement de conteneur,systemctln'est pas disponible. Vous démarrerezhttpddirectement.sudo /usr/sbin/httpd -DFOREGROUND &Le symbole
&exécute la commande en arrière-plan, vous permettant de continuer à utiliser le terminal. Vous devriez voir une sortie similaire à celle-ci, indiquant qu'Apache démarre.[1] 5094 AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::216:3eff:fe00:63b%eth0. Set the 'ServerName' directive globally to suppress this messageRemarque : Le message d'avertissement concernant le nom de domaine complet du serveur est normal dans cet environnement de laboratoire et peut être ignoré en toute sécurité.
Pour vérifier qu'Apache est en cours d'exécution, vous pouvez rechercher le processus
httpd.ps aux | grep httpdVous devriez voir plusieurs processus
httpden cours d'exécution.root ... /usr/sbin/httpd -DFOREGROUND apache ... /usr/sbin/httpd -DFOREGROUND ...output omitted...Tenter d'accéder à la page web.
Maintenant, essayez d'accéder à votre page web en utilisant
curl. Puisque vous êtes sur la même machine, vous pouvez utiliserlocalhost.curl http://localhost/index.htmlRemarque : Dans cet environnement particulier, vous constaterez peut-être que la page web est accessible même avec le contexte
root_t. Cela démontre que, bien que SELinux soit en vigueur, le contexteroot_tpeut avoir des permissions plus larges que prévu. Cependant, pour les meilleures pratiques de sécurité et une configuration SELinux appropriée, le contenu web doit toujours utiliser le contextehttpd_sys_content_tapproprié.This is custom web content.Vérifier le contexte SELinux actuel du répertoire personnalisé.
Utilisez la commande
ls -Zpour afficher le contexte SELinux de votre répertoire/customet du fichierindex.html.ls -Zd /custom /custom/index.htmlVous remarquerez qu'ils ont le contexte
root_t, qui n'est pas le contexte recommandé pour le contenu web Apache.system_u:object_r:root_t:s0 /custom system_u:object_r:root_t:s0 /custom/index.htmlComparez cela à la racine de documents Apache par défaut :
ls -Zd /var/www/htmlVous verrez que
/var/www/htmla le contextehttpd_sys_content_t. C'est le contexte que vous devez appliquer à votre répertoire personnalisé.system_u:object_r:httpd_sys_content_t:s0 /var/www/htmlDéfinir une règle de contexte de fichier SELinux persistante pour
/custom.La commande
semanage fcontextest utilisée pour gérer les règles de mappage de contexte de fichier SELinux. L'option-aajoute une nouvelle règle,-tspécifie le type cible, et l'expression régulière'/custom(/.*)?'correspond au répertoire/customlui-même et à tous les fichiers et sous-répertoires qu'il contient.sudo semanage fcontext -a -t httpd_sys_content_t '/custom(/.*)?'Cette commande ajoute la règle à la politique SELinux, mais elle ne modifie pas immédiatement les contextes des fichiers existants.
Appliquer les nouveaux contextes SELinux aux fichiers.
La commande
restoreconest utilisée pour restaurer les contextes SELinux des fichiers et des répertoires à leurs valeurs par défaut telles que définies par la politique. L'option-Rapplique la modification de manière récursive, et-vfournit une sortie détaillée.sudo restorecon -Rv /customVous devriez voir une sortie indiquant que les contextes de
/customet/custom/index.htmlont été ré-étiquetés.Relabeled /custom from system_u:object_r:root_t:s0 to system_u:object_r:httpd_sys_content_t:s0 Relabeled /custom/index.html from system_u:object_r:root_t:s0 to system_u:object_r:httpd_sys_content_t:s0Vérifiez à nouveau les contextes en utilisant
ls -Z.ls -Zd /custom /custom/index.htmlIls devraient maintenant avoir le contexte
httpd_sys_content_t.system_u:object_r:httpd_sys_content_t:s0 /custom system_u:object_r:httpd_sys_content_t:s0 /custom/index.htmlAccéder à nouveau à la page web.
Maintenant que les contextes SELinux sont corrects, essayez d'accéder à la page web avec
curlà nouveau.curl http://localhost/index.htmlVous devriez maintenant voir le contenu de votre fichier
index.html.This is custom web content.Enfin, arrêtez le processus du serveur HTTP Apache.
sudo pkill httpdVérifiez qu'aucun processus
httpdn'est en cours d'exécution.ps aux | grep httpdVous ne devriez voir que le processus
greplui-même.labex ... grep httpd
Ajuster la politique SELinux pour les répertoires personnels des utilisateurs avec des booléens
Dans cette étape, vous apprendrez à ajuster la politique SELinux en utilisant des Booleans pour permettre à Apache de servir du contenu web à partir des répertoires personnels des utilisateurs. Par défaut, SELinux empêche les services comme Apache d'accéder aux fichiers dans les répertoires personnels des utilisateurs pour des raisons de sécurité. Cependant, il existe des scénarios spécifiques, tels que les pages web personnelles, où cette fonctionnalité est souhaitée.
Les Booleans SELinux sont des paramètres vrai/faux qui permettent aux administrateurs de modifier le comportement de la politique SELinux sans écrire de politiques personnalisées complexes. Ils offrent un moyen flexible d'activer ou de désactiver certaines fonctionnalités de sécurité. Par exemple, il existe un Boolean spécifiquement pour autoriser Apache à accéder aux répertoires personnels des utilisateurs.
Activer la fonctionnalité de répertoire utilisateur d'Apache.
Apache possède un module appelé
mod_userdirqui permet aux utilisateurs de publier du contenu web à partir d'un répertoirepublic_htmldans leur répertoire personnel (par exemple,~/public_html). Cette fonctionnalité est généralement configurée dans/etc/httpd/conf.d/userdir.conf. Par défaut, cette fonctionnalité est souvent désactivée.Ouvrez le fichier de configuration en utilisant
nano.sudo nano /etc/httpd/conf.d/userdir.confDans l'éditeur, vous trouverez des lignes liées à
UserDir. Vous devez commenter la ligne qui désactiveUserDiret décommenter la ligne qui l'active pourpublic_html.Changer :
UserDir disabled #UserDir public_htmlEn :
#UserDir disabled UserDir public_htmlEnregistrez et quittez le fichier (
Ctrl+X,Y,Entrée).Créer un répertoire
public_htmlet un fichierindex.htmldans votre répertoire personnel.Vous allez créer le répertoire
public_htmlet un fichierindex.htmlà l'intérieur. C'est là que votre contenu web personnel résidera.mkdir ~/public_html echo 'This is labex user content.' > ~/public_html/index.htmlVérifiez le contenu du fichier
index.html.cat ~/public_html/index.htmlThis is labex user content.Informationnel : Lorsque vous avez créé le répertoire
~/public_html, il a été automatiquement configuré avec les contextes SELinuxuser_home_tet~/(votre répertoire personnel) avechome_dir_t. Le processus du serveur web Apache (httpd_t) ne peut pas lire les fichiers étiquetésuser_home_touhome_dir_tpar défaut en raison de la politique SELinux.Démarrer le service web Apache.
Démarrez le service
httpd. N'oubliez pas quesystemctln'est pas disponible dans cet environnement de conteneur, vous démarrerez donchttpddirectement.sudo /usr/sbin/httpd -DFOREGROUND &Vous pouvez voir un message d'avertissement concernant le nom de domaine complet du serveur, qui peut être ignoré en toute sécurité dans cet environnement de laboratoire.
Vérifiez qu'Apache est en cours d'exécution.
ps aux | grep httpdroot ... /usr/sbin/httpd -DFOREGROUND apache ... /usr/sbin/httpd -DFOREGROUND ...output omitted...Tenter d'accéder à la page web de l'utilisateur et observer le refus SELinux.
Maintenant, essayez d'accéder à votre page web personnelle en utilisant
curl. L'URL des répertoires utilisateur suit généralement le formathttp://localhost/~username/.curl http://localhost/~labex/index.htmlVous recevrez probablement une erreur "Forbidden", indiquant qu'Apache est toujours incapable d'accéder au contenu en raison de SELinux.
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access /~labex/index.html on this server.<br /> </p> </body></html>Vérifier les Booleans SELinux liés aux répertoires personnels pour
httpd.La commande
getseboolvous permet d'afficher l'état actuel des Booleans SELinux. Vous pouvez filtrer la sortie en utilisantgreppour trouver les Booleans liés àhttpdet aux répertoires personnels.sudo getsebool -a | grep httpd | grep homeVous devriez voir
httpd_enable_homedirs --> off, indiquant que ce Boolean est actuellement désactivé.httpd_enable_homedirs --> offActiver de manière persistante le Boolean
httpd_enable_homedirs.La commande
setseboolest utilisée pour modifier l'état des Booleans SELinux. L'option-Prend la modification persistante après les redémarrages.sudo setsebool -P httpd_enable_homedirs onVérifiez que le Boolean est maintenant
on.sudo getsebool -a | grep httpd | grep homehttpd_enable_homedirs --> onDéfinir les permissions de fichier correctes pour le répertoire personnel.
Même avec le Boolean SELinux activé, Apache a besoin des permissions de système de fichiers appropriées pour accéder à votre répertoire personnel et au répertoire
public_html. Par défaut, les répertoires personnels des utilisateurs ne sont pas accessibles à l'utilisateur Apache.chmod 711 ~ chmod 755 ~/public_html chmod 644 ~/public_html/index.htmlAccéder à nouveau à la page web.
Maintenant que le Boolean
httpd_enable_homedirsest activé et que les permissions de fichier sont correctes, essayez d'accéder à nouveau à votre page web personnelle aveccurl.curl http://localhost/~labex/index.htmlVous devriez maintenant voir le contenu de votre fichier
index.html.This is labex user content.Dépannage : Si vous rencontrez toujours des problèmes d'accès même après avoir activé le Boolean et défini les permissions de fichier, cela démontre la nature multicouche de la sécurité Linux. Dans certains environnements, des facteurs supplémentaires tels que :
- Les directives de configuration Apache dans
/etc/httpd/conf.d/userdir.conf - Les contextes de fichiers SELinux sur la structure du répertoire personnel
- Des modules Apache ou des paramètres de sécurité supplémentaires
peuvent devoir être pris en compte. Le principal point d'apprentissage est de comprendre comment les Booleans SELinux fonctionnent en conjonction avec les permissions de fichiers traditionnelles et les configurations spécifiques aux applications.
- Les directives de configuration Apache dans
Arrêter le processus du serveur HTTP Apache.
Enfin, arrêtez le processus du serveur HTTP Apache.
sudo pkill httpdVérifiez qu'aucun processus
httpdn'est en cours d'exécution.ps aux | grep httpdlabex ... grep httpd
Dépannage des refus SELinux pour le serveur web Apache
Dans cette étape, vous apprendrez à identifier et à dépanner les refus de sécurité SELinux, en vous concentrant spécifiquement sur les problèmes qui pourraient empêcher le serveur web Apache de fonctionner correctement. Lorsque SELinux bloque une opération, il enregistre un message de refus "Access Vector Cache" (AVC). Ces messages sont cruciaux pour comprendre pourquoi une opération a échoué et comment la résoudre.
Vous utiliserez des outils comme auditd (le démon du système d'audit Linux) et sealert pour analyser ces messages de refus. auditd collecte les appels système et les événements, y compris les refus SELinux, et les stocke dans /var/log/audit/audit.log. L'outil sealert, qui fait partie du paquet setroubleshoot-server, peut analyser ces journaux et fournir des explications lisibles par l'homme et des solutions suggérées pour les refus SELinux.
Tout d'abord, vous devez vous assurer que auditd et setroubleshoot-server sont installés.
Installer
auditdetsetroubleshoot-server.sudo dnf install -y audit setroubleshoot-serverVous devriez voir une sortie indiquant l'installation réussie de ces paquets.
Démarrer le serveur web Apache et créer un fichier problématique.
Pour simuler un refus SELinux, vous allez créer un fichier avec un contexte SELinux incorrect et essayer de le servir avec Apache.
Tout d'abord, assurez-vous qu'Apache est en cours d'exécution.
sudo /usr/sbin/httpd -DFOREGROUND &Maintenant, créez un nouveau répertoire et un fichier
index.htmlà l'intérieur. Cette fois, vous définirez intentionnellement un contexte SELinux incorrect pour ce fichier afin de déclencher un refus.sudo mkdir /testweb echo 'This is a test page.' | sudo tee /testweb/index.htmlPar défaut,
/testweb/index.htmlaura probablement le contexteroot_t. Confirmons.ls -Z /testweb/index.htmlsystem_u:object_r:root_t:s0 /testweb/index.htmlMaintenant, configurons Apache pour servir à partir de
/testweb. Ouvrez/etc/httpd/conf/httpd.conf.sudo nano /etc/httpd/conf/httpd.confRemplacez
DocumentRootet la directive<Directory>par/testweb.DocumentRoot "/testweb" <Directory "/testweb"> AllowOverride None Require all granted </Directory>Enregistrez et quittez (
Ctrl+X,Y,Entrée).Redémarrez Apache pour appliquer les modifications de configuration. Puisque vous êtes dans un conteneur, vous devez tuer l'ancien processus et en démarrer un nouveau.
sudo pkill httpd sudo /usr/sbin/httpd -DFOREGROUND &Tenter d'accéder à la page web.
Essayez d'accéder à la page web en utilisant
curl.curl http://localhost/index.htmlNote importante : Dans cet environnement, vous constaterez peut-être que la page web est accessible même avec le contexte
root_t, comme nous l'avons observé à l'étape 2. Cela démontre que, bien que SELinux soit en vigueur, le contexteroot_ta des permissions plus larges que les contextes plus restrictifs.This is a test page.Cependant, dans le but d'apprendre les techniques de dépannage SELinux, nous procéderons comme s'il y avait un refus. Dans des environnements SELinux plus restrictifs ou avec des configurations de politique différentes, l'accès aux fichiers avec des contextes inappropriés générerait en effet des refus.
Apprendre à examiner les refus SELinux en utilisant
ausearch.La commande
ausearchest utilisée pour interroger les journaux d'audit. Vous pouvez rechercher les refus AVC SELinux (-m AVC) qui se sont produits aujourd'hui (-ts today).sudo ausearch -m AVC -ts todayRemarque : Puisque la page web était accessible dans notre environnement, vous ne verrez peut-être aucun refus AVC récent lié à ce test spécifique. Cependant, cette commande produirait normalement des entrées de journal d'audit détaillées s'il y avait des refus. Dans un scénario de refus typique, vous recherchez des entrées liées à
httpdet/testweb/index.html.Une entrée de refus AVC typique ressemblerait à ceci :
---- time->... type=AVC msg=audit(...): avc: denied { getattr } for pid=... comm="httpd" path="/testweb/index.html" dev="overlay" ino=... scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:root_t:s0 tclass=file permissive=0 ...output omitted...Les parties clés d'un refus AVC seraient :
denied { getattr }: L'opération qui a été refusée (obtenir les attributs du fichier).comm="httpd": Le processus qui a été refusé (serveur HTTP Apache).path="/testweb/index.html": Le fichier auquel on a accédé.scontext=system_u:system_r:httpd_t:s0: Le contexte SELinux de la source (Apache).tcontext=system_u:object_r:root_t:s0: Le contexte SELinux de la cible (votre fichierindex.html).tclass=file: Le type de cible (un fichier).
Cette sortie montre clairement que
httpd_t(Apache) s'est vu refuser l'accèsgetattrà un fichier avec le contextedefault_t.Apprendre à utiliser
sealertpour l'analyse SELinux.sealertpeut analyser les journaux d'audit et fournir des informations plus conviviales. Vous pouvez soit exécutersealert -apour analyser tous les refus récents, soit utilisersealert -l <UUID>si vous avez un UUID spécifique à partir d'un messagesetroubleshootdans/var/log/messages.sudo sealert -a /var/log/audit/audit.logRemarque : Puisque nous n'avons pas rencontré de refus réels dans cet environnement, l'exécution de
sealertpeut ne pas afficher de résultats liés à notre exemple/testweb. Cependant, dans un scénario où des refus SELinux se produisent,sealertanalyserait le journal d'audit et présenterait un résumé.Une sortie
sealerttypique pour un problème de contexte httpd ressemblerait à ceci :SELinux is preventing /usr/sbin/httpd from getattr access on the file /testweb/index.html. ***** Plugin catchall_labels (83.8 confidence) suggests ******************* If you want to allow httpd to have getattr access on the index.html file Then you need to change the label on /testweb/index.html Do ## semanage fcontext -a -t FILE_TYPE '/testweb/index.html' where FILE_TYPE is one of the following: httpd_sys_content_t, httpd_sys_script_exec_t, httpd_unconfined_script_exec_t, ... ***** Plugin httpd_can_network_connect (93.8 confidence) suggests ********* If you want to allow httpd to connect to the network (for example, to a database) Then you must set the httpd_can_network_connect boolean to on. Do ## setsebool -P httpd_can_network_connect on ...output omitted...La sortie
sealertserait très utile dans les scénarios de refus réels. Elle indiquerait explicitement le problème et suggérerait des solutions, telles que la modification de l'étiquette avecsemanage fcontext -a -t FILE_TYPE '/testweb/index.html'et la liste dehttpd_sys_content_tcommeFILE_TYPEapproprié.Enfin, arrêtez le processus du serveur HTTP Apache.
sudo pkill httpdVérifiez qu'aucun processus
httpdn'est en cours d'exécution.ps aux | grep httpdlabex ... grep httpd
Résoudre les problèmes SELinux pour le contenu web personnalisé
Dans cette dernière étape, vous appliquerez les connaissances acquises lors de l'exercice de dépannage précédent pour résoudre le refus SELinux qui empêchait Apache de servir du contenu à partir du répertoire /testweb. Vous utiliserez semanage fcontext pour définir le contexte SELinux correct pour votre contenu web personnalisé et restorecon pour l'appliquer.
Ce processus renforce la compréhension du fonctionnement des contextes SELinux et de la manière de les configurer correctement pour les services comme Apache.
S'assurer qu'Apache est en cours d'exécution et que la configuration est en place.
Tout d'abord, assurez-vous qu'Apache est configuré pour servir à partir de
/testwebet qu'il est en cours d'exécution. Si vous avez arrêté Apache à l'étape précédente, redémarrez-le.sudo /usr/sbin/httpd -DFOREGROUND &Vérifiez que le
DocumentRootdans/etc/httpd/conf/httpd.confest défini sur/testweb. Sinon, modifiez-le comme vous l'avez fait à l'étape précédente.grep "DocumentRoot" /etc/httpd/conf/httpd.confDocumentRoot "/testweb"Confirmez également que
/testweb/index.htmlexiste et a le contexteroot_t.ls -Z /testweb/index.htmlsystem_u:object_r:root_t:s0 /testweb/index.htmlAccéder à la page web pour confirmer le comportement actuel.
Vérifions que la page web est actuellement accessible avec le contexte
root_t.curl http://localhost/index.htmlComme nous l'avons vu précédemment, la page est accessible même avec le contexte
root_t.This is a test page.Bien que cela fonctionne, nous allons procéder pour démontrer la configuration SELinux appropriée pour le contenu web.
Définir le contexte de fichier SELinux correct pour
/testweb.Le contexte SELinux correct pour le contenu web servi par Apache est
httpd_sys_content_t. Vous devez ajouter une règle persistante en utilisantsemanage fcontext.sudo semanage fcontext -a -t httpd_sys_content_t '/testweb(/.*)?'Cette commande indique à SELinux que tous les fichiers ou répertoires dans
/testweb(y compris/testweblui-même) doivent être étiquetés avechttpd_sys_content_t.Appliquer les nouveaux contextes SELinux aux fichiers.
Après avoir défini la règle, vous devez l'appliquer aux fichiers existants en utilisant
restorecon.sudo restorecon -Rv /testwebVous devriez voir une sortie indiquant que les contextes ont été réétiquetés.
Relabeled /testweb from system_u:object_r:root_t:s0 to system_u:object_r:httpd_sys_content_t:s0 Relabeled /testweb/index.html from system_u:object_r:root_t:s0 to system_u:object_r:httpd_sys_content_t:s0Vérifiez à nouveau les contextes en utilisant
ls -Z.ls -Z /testweb/index.htmlsystem_u:object_r:httpd_sys_content_t:s0 /testweb/index.htmlAccéder à nouveau à la page web pour confirmer la configuration correcte.
Maintenant que les contextes SELinux sont correctement appliqués conformément aux meilleures pratiques, essayez d'accéder à nouveau à la page web avec
curl.curl http://localhost/index.htmlLe contenu devrait toujours être accessible, et il est maintenant correctement configuré avec le contexte SELinux recommandé.
This is a test page.Cela démontre que, bien que le contexte
root_tpuisse fonctionner dans cet environnement, l'utilisation du contextehttpd_sys_content_tapproprié suit les meilleures pratiques SELinux et garantit la compatibilité entre différentes configurations de sécurité.Enfin, arrêtez le processus du serveur HTTP Apache.
sudo pkill httpdVérifiez qu'aucun processus
httpdn'est en cours d'exécution.ps aux | grep httpdlabex ... grep httpd
Résumé
Dans ce laboratoire, vous avez appris à gérer la sécurité SELinux dans RHEL. Vous avez commencé par comprendre et pratiquer comment modifier les modes d'application de SELinux, à la fois temporairement en utilisant setenforce et de manière persistante en modifiant /etc/selinux/config. Cela comprenait la vérification du mode actuel avec getenforce et la compréhension des implications des modes Enforcing, Permissive et Disabled.
De plus, vous avez acquis une expérience pratique dans la configuration d'Apache avec des contextes de fichiers SELinux personnalisés en utilisant semanage fcontext et restorecon pour assurer le bon fonctionnement du serveur web. Vous avez également appris à ajuster la politique SELinux pour les répertoires personnels des utilisateurs en activant des booléens SELinux spécifiques avec setsebool. Enfin, le laboratoire a couvert les techniques essentielles de dépannage pour les refus SELinux, en particulier pour le serveur web Apache, en analysant les journaux d'audit avec ausearch et audit2allow pour identifier et résoudre les problèmes d'accès pour le contenu web personnalisé.



