A web server (also known as a HTTP server) is a service that handles content (most commonly web pages, but other types of documents as well) over to a client in a network.
A FTP server is one of the oldest and most commonly used resources (even to this day) to make files available to clients on a network in cases where no authentication is necessary since FTP uses username and password without encryption.
Le serveur web disponible dans RHEL 7 est la version 2.4 du serveur HTTP Apache. En ce qui concerne le serveur FTP, nous utiliserons le Very Secure Ftp Daemon (alias vsftpd) pour établir des connexions sécurisées par TLS.

Dans cet article, nous expliquerons comment installer, configurer et sécuriser un serveur web et un serveur FTP dans RHEL 7.
Installation d’Apache et du serveur FTP
Dans ce guide, nous utiliserons un serveur RHEL 7 avec une adresse IP statique de 192.168.0.18/24. Pour installer Apache et VSFTPD, exécutez la commande suivante :
# yum update && yum install httpd vsftpd
Lorsque l’installation est terminée, les deux services seront désactivés initialement, nous devons donc les démarrer manuellement pour le moment et les activer pour qu’ils démarrent automatiquement à partir du prochain démarrage :
# systemctl start httpd # systemctl enable httpd # systemctl start vsftpd # systemctl enable vsftpd
De plus, nous devons ouvrir les ports 80 et 21, où les démons web et ftp écoutent respectivement, afin de permettre l’accès à ces services depuis l’extérieur :
# firewall-cmd --zone=public --add-port=80/tcp --permanent # firewall-cmd --zone=public --add-service=ftp --permanent # firewall-cmd --reload
Pour confirmer que le serveur web fonctionne correctement, ouvrez votre navigateur et saisissez l’IP du serveur. Vous devriez voir la page de test :

Quant au serveur ftp, nous devrons le configurer davantage, ce que nous ferons dans un instant, avant de confirmer qu’il fonctionne comme prévu.
Configuration et sécurisation du serveur web Apache
Le fichier de configuration principal pour Apache se trouve dans /etc/httpd/conf/httpd.conf
, mais il peut dépendre d’autres fichiers présents dans /etc/httpd/conf.d
.
Bien que la configuration par défaut devrait être suffisante pour la plupart des cas, il est bon de se familiariser avec toutes les options disponibles telles que décrites dans la documentation officielle.
Comme toujours, faites une copie de sauvegarde du fichier de configuration principal avant de le modifier :
# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)
Ensuite, ouvrez-le avec votre éditeur de texte préféré et recherchez les variables suivantes :
- ServerRoot : le répertoire où la configuration du serveur, les fichiers d’erreur et de journalisation sont conservés.
- Listen : indique à Apache d’écouter une adresse IP spécifique et/ou des ports spécifiques.
- Include : permet l’inclusion d’autres fichiers de configuration qui doivent exister. Sinon, le serveur échouera, contrairement à la directive IncludeOptional, qui est ignorée silencieusement si les fichiers de configuration spécifiés n’existent pas.
- User et Group : le nom de l’utilisateur/groupe sous lequel le service httpd s’exécute.
- DocumentRoot : le répertoire à partir duquel Apache servira vos documents. Par défaut, toutes les requêtes sont prises à partir de ce répertoire, mais des liens symboliques et des alias peuvent être utilisés pour pointer vers d’autres emplacements.
- ServerName : cette directive définit le nom d’hôte (ou l’adresse IP) et le port que le serveur utilise pour s’identifier.
La première mesure de sécurité consistera à créer un utilisateur et un groupe dédiés (c’est-à-dire tecmint/tecmint) pour exécuter le serveur Web et à changer le port par défaut pour un port plus élevé (9000 dans ce cas) :
ServerRoot "/etc/httpd" Listen 192.168.0.18:9000 User tecmint Group tecmint DocumentRoot "/var/www/html" ServerName 192.168.0.18:9000
Vous pouvez tester le fichier de configuration avec
# apachectl configtest
et si tout est OK, alors redémarrez le serveur Web
# systemctl restart httpd
et n’oubliez pas d’activer le nouveau port (et de désactiver l’ancien) dans le pare-feu :
# firewall-cmd --zone=public --remove-port=80/tcp --permanent # firewall-cmd --zone=public --add-port=9000/tcp --permanent # firewall-cmd --reload
Notez que, en raison des politiques de SELinux, vous ne pouvez utiliser que les ports renvoyés par
# semanage port -l | grep -w '^http_port_t'
pour le serveur Web.
Si vous souhaitez utiliser un autre port (c’est-à-dire le port TCP 8100), vous devrez l’ajouter au contexte de port SELinux pour le service httpd :
# semanage port -a -t http_port_t -p tcp 8100

Pour sécuriser davantage votre installation Apache, suivez ces étapes :
1. L’utilisateur sous lequel Apache s’exécute ne devrait pas avoir accès à un shell :
# usermod -s /sbin/nologin tecmint
2. Désactivez l’affichage de répertoire pour empêcher le navigateur d’afficher le contenu d’un répertoire s’il n’y a pas de index.html présent dans ce répertoire.
Modifiez le fichier /etc/httpd/conf/httpd.conf
(et les fichiers de configuration des hôtes virtuels, le cas échéant) et assurez-vous que la directive Options, à la fois en haut et aux niveaux des blocs Directory, est définie sur None :
Options None
3. Masquez les informations sur le serveur Web et le système d’exploitation dans les réponses HTTP. Modifiez /etc/httpd/conf/httpd.conf
comme suit :
ServerTokens Prod ServerSignature Off
Maintenant, vous êtes prêt à commencer à diffuser du contenu depuis votre répertoire /var/www/html.
Configuration et sécurisation du serveur FTP
Comme dans le cas d’Apache, le fichier de configuration principal pour Vsftpd (/etc/vsftpd/vsftpd.conf)
est bien commenté et bien que la configuration par défaut devrait suffire pour la plupart des applications, vous devriez vous familiariser avec la documentation et la page de manuel (man vsftpd.conf)
afin de pouvoir exploiter le serveur FTP de manière plus efficace (je ne peux pas insister assez là-dessus!).
Dans notre cas, voici les directives utilisées:
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES chroot_local_user=YES allow_writeable_chroot=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES
En utilisant chroot_local_user=YES
, les utilisateurs locaux seront (par défaut) placés dans une prison chrootée dans leur répertoire personnel juste après la connexion. Cela signifie que les utilisateurs locaux ne pourront pas accéder à des fichiers en dehors de leurs répertoires personnels correspondants.
Enfin, pour permettre à FTP de lire les fichiers dans le répertoire personnel de l’utilisateur, définissez le paramètre SELinux suivant:
# setsebool -P ftp_home_dir on
Vous pouvez maintenant vous connecter au serveur FTP à l’aide d’un client tel que Filezilla:

Notez que le journal des transferts /var/log/xferlog
enregistre les téléchargements et les téléversements, ce qui concorde avec la liste des répertoires ci-dessus:

Voir aussi: Limiter la bande passante réseau FTP utilisée par les applications dans un système Linux avec Trickle
Résumé
Dans ce tutoriel, nous avons expliqué comment configurer un serveur web et un serveur FTP. En raison de l’ampleur du sujet, il n’est pas possible de couvrir tous les aspects de ces sujets (par exemple, les hébergements web virtuels). Je vous recommande donc de consulter également d’autres excellents articles sur ce site concernant Apache.
Source:
https://www.tecmint.com/rhcsa-series-install-and-secure-apache-web-server-and-ftp-in-rhel/