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 dnf pour installer le paquet httpd.
sudo dnf install -y httpd
Vous devriez voir une sortie indiquant l'installation réussie du paquet httpd et 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é /custom et y placer un simple fichier index.html. Ce sera votre racine de documents web non standard.
sudo mkdir /custom
echo 'This is custom web content.' | sudo tee /custom/index.html
Vérifiez le contenu du fichier index.html.
cat /custom/index.html
This 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 /custom au lieu du répertoire par défaut /var/www/html.
Ouvrez le fichier de configuration en utilisant nano.
sudo nano /etc/httpd/conf/httpd.conf
Dans l'éditeur, trouvez les lignes DocumentRoot "/var/www/html" et <Directory "/var/www/html">. Remplacez toutes les occurrences de /var/www/html par /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, systemctl n'est pas disponible. Vous démarrerez httpd directement.
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 message
Remarque : 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 httpd
Vous devriez voir plusieurs processus httpd en 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 utiliser localhost.
curl http://localhost/index.html
Remarque : 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 contexte root_t peut 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 contexte httpd_sys_content_t approprié.
This is custom web content.
-
Vérifier le contexte SELinux actuel du répertoire personnalisé.
Utilisez la commande ls -Z pour afficher le contexte SELinux de votre répertoire /custom et du fichier index.html.
ls -Zd /custom /custom/index.html
Vous 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.html
Comparez cela à la racine de documents Apache par défaut :
ls -Zd /var/www/html
Vous verrez que /var/www/html a le contexte httpd_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/html
-
Définir une règle de contexte de fichier SELinux persistante pour /custom.
La commande semanage fcontext est utilisée pour gérer les règles de mappage de contexte de fichier SELinux. L'option -a ajoute une nouvelle règle, -t spécifie le type cible, et l'expression régulière '/custom(/.*)?' correspond au répertoire /custom lui-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 restorecon est 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 -R applique la modification de manière récursive, et -v fournit une sortie détaillée.
sudo restorecon -Rv /custom
Vous devriez voir une sortie indiquant que les contextes de /custom et /custom/index.html ont é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:s0
Vérifiez à nouveau les contextes en utilisant ls -Z.
ls -Zd /custom /custom/index.html
Ils 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.html
-
Accé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.html
Vous 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 httpd
Vérifiez qu'aucun processus httpd n'est en cours d'exécution.
ps aux | grep httpd
Vous ne devriez voir que le processus grep lui-même.
labex ... grep httpd