Recherche de site Web

Comment installer, configurer et sécuriser le serveur FTP dans CentOS 7 - [Guide complet]


FTP (File Transfer Protocol) est un outil standard traditionnel et largement utilisé pour transférer des fichiers entre un serveur et des clients sur un réseau, en particulier lorsqu'aucune authentification n'est nécessaire (permet aux utilisateurs anonymes pour se connecter à un serveur). Nous devons comprendre que FTP n'est pas sécurisé par défaut, car il transmet les informations d'identification et les données des utilisateurs sans cryptage.

Dans ce guide, nous décrirons les étapes pour installer, configurer et sécuriser un serveur FTP (VSFTPD signifie « Very Secure FTP Daemon ») dans CentOS./RHEL 7 et Fedora.

Notez que toutes les commandes de ce guide seront exécutées en tant que root. Si vous n'utilisez pas le serveur avec le compte root, utilisez la commande sudo pour obtenir les privilèges root.

Étape 1 : Installation du serveur FTP

1. L'installation du serveur vsftpd est simple, exécutez simplement la commande suivante dans le terminal.

yum install vsftpd

2. Une fois l'installation terminée, le service sera d'abord désactivé, nous devons donc le démarrer manuellement pour le moment et lui permettre de démarrer automatiquement au prochain démarrage du système :

systemctl start vsftpd
systemctl enable vsftpd

3. Ensuite, afin de permettre l'accès aux services FTP depuis des systèmes externes, nous devons ouvrir le port 21, où les démons FTP écoutent comme suit :

firewall-cmd --zone=public --permanent --add-port=21/tcp
firewall-cmd --zone=public --permanent --add-service=ftp
firewall-cmd --reload

Étape 2 : configuration du serveur FTP

4. Nous allons maintenant effectuer quelques configurations pour configurer et sécuriser notre serveur FTP, commençons par faire une sauvegarde du fichier de configuration d'origine /etc/vsftpd/vsftpd.conf  :

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig

Ensuite, ouvrez le fichier de configuration ci-dessus et définissez les options suivantes avec ces valeurs correspondantes :

anonymous_enable=NO             # disable  anonymous login
local_enable=YES		# permit local logins
write_enable=YES		# enable FTP commands which change the filesystem
local_umask=022		        # value of umask for file creation for local users
dirmessage_enable=YES	        # enable showing of messages when users first enter a new directory
xferlog_enable=YES		# a log file will be maintained detailing uploads and downloads
connect_from_port_20=YES        # use port 20 (ftp-data) on the server machine for PORT style connections
xferlog_std_format=YES          # keep standard log file format
listen=NO   			# prevent vsftpd from running in standalone mode
listen_ipv6=YES		        # vsftpd will listen on an IPv6 socket instead of an IPv4 one
pam_service_name=vsftpd         # name of the PAM service vsftpd will use
userlist_enable=YES  	        # enable vsftpd to load a list of usernames
tcp_wrappers=YES  		# turn on tcp wrappers

5. Configurez maintenant FTP pour autoriser/refuser l'accès FTP aux utilisateurs en fonction du fichier de liste d'utilisateurs /etc/vsftpd.userlist.

Par défaut, les utilisateurs répertoriés dans userlist_file=/etc/vsftpd.userlist se voient refuser l'accès à la connexion avec l'option userlist_deny définie sur OUI, si userlist_enable=OUI.

Cependant, userlist_deny=NO modifie le paramètre, ce qui signifie que seuls les utilisateurs explicitement répertoriés dans userlist_file=/etc/vsftpd.userlist seront autorisés à se connecter.

userlist_enable=YES                   # vsftpd will load a list of usernames, from the filename given by userlist_file
userlist_file=/etc/vsftpd.userlist    # stores usernames.
userlist_deny=NO   

Ce n'est pas tout, lorsque les utilisateurs se connectent au serveur FTP, ils sont placés dans une prison chrootée, c'est le répertoire racine local qui servira de répertoire personnel pour la session FTP uniquement.

Ensuite, nous examinerons deux scénarios possibles sur la façon de chrooter les utilisateurs FTP vers le répertoire des répertoires personnels (racine locale) pour les utilisateurs FTP, comme expliqué ci-dessous.

6. Ajoutez maintenant les deux options suivantes pour restreindre les utilisateurs FTP à leurs répertoires personnels.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=YES signifie que les utilisateurs locaux seront placés dans une prison chroot, leur répertoire personnel après la connexion selon les paramètres par défaut.

Et aussi par défaut, vsftpd n'autorise pas l'écriture du répertoire chroot jail pour des raisons de sécurité, cependant, nous pouvons utiliser l'option allow_writeable_chroot=YES pour remplacer ce paramètre.

Enregistrez le fichier et fermez-le.

Sécuriser le serveur FTP avec SELinux

7. Maintenant, définissons le booléen SELinux ci-dessous pour permettre à FTP de lire les fichiers dans le répertoire personnel d'un utilisateur. Notez que cela a été initialement effectué à l'aide de la commande :

setsebool -P ftp_home_dir on

Cependant, la directive ftp_home_dir a été désactivée par défaut comme expliqué dans ce rapport de bug : https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Nous allons maintenant utiliser la commande semanage pour définir la règle SELinux afin de permettre à FTP de lire/écrire le répertoire personnel de l'utilisateur.

semanage boolean -m ftpd_full_access --on

À ce stade, nous devons redémarrer vsftpd pour appliquer toutes les modifications que nous avons apportées jusqu'à présent :

systemctl restart vsftpd

Étape 4 : test du serveur FTP

8. Nous allons maintenant tester le serveur FTP en créant un utilisateur FTP avec la commande useradd.

useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi
passwd ravi

Ensuite, nous devons ajouter l'utilisateur ravi au fichier /etc/vsftpd.userlist en utilisant la commande echo comme suit :

echo "ravi" | tee -a /etc/vsftpd.userlist
cat /etc/vsftpd.userlist

9. Il est maintenant temps de tester si nos paramètres ci-dessus fonctionnent correctement. Commençons par tester les connexions anonymes, nous pouvons voir sur la capture d'écran ci-dessous que les connexions anonymes ne sont pas autorisées :

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>

10. Testons également si un utilisateur non répertorié dans le fichier /etc/vsftpd.userlist aura l'autorisation de se connecter, ce qui n'est pas le cas comme dans la capture d'écran. ci-dessous:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>

11. Maintenant, effectuez une dernière vérification si un utilisateur répertorié dans le fichier /etc/vsftpd.userlist est effectivement placé dans son répertoire personnel après la connexion :

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

N'activez cette option que si vous savez exactement ce que vous faites. Il est important de noter que ces implications en matière de sécurité ne sont pas spécifiques à vsftpd, elles s'appliquent également à tous les démons FTP qui proposent de placer les utilisateurs locaux dans des prisons chroot.

Par conséquent, nous examinerons une manière plus sécurisée de définir un autre répertoire racine local non accessible en écriture dans la section suivante.

Étape 5 : Configurer différents répertoires de base des utilisateurs FTP

12. Ouvrez à nouveau le fichier de configuration vsftpd et commencez par commenter l'option non sécurisée ci-dessous :

#allow_writeable_chroot=YES

Créez ensuite le répertoire racine local alternatif pour l'utilisateur (ravi, le vôtre est probablement différent) et supprimez les autorisations d'écriture de tous les utilisateurs sur ce répertoire :

mkdir /home/ravi/ftp
chown nobody:nobody /home/ravi/ftp
chmod a-w /home/ravi/ftp

13. Ensuite, créez un répertoire sous la racine locale où l'utilisateur stockera ses fichiers :

mkdir /home/ravi/ftp/files
chown ravi:ravi  /home/ravi/ftp/files
chmod 0700 /home/ravi/ftp/files/

Ajoutez/modifiez ensuite les options suivantes dans le fichier de configuration vsftpd avec ces valeurs :

user_sub_token=$USER         # inserts the username in the local root directory 
local_root=/home/$USER/ftp   # defines any users local root directory

Enregistrez le fichier et fermez-le. Encore une fois, redémarrons le service avec les nouveaux paramètres :

systemctl restart vsftpd

14. Maintenant, faites à nouveau un test final et vérifiez que le répertoire racine local de l'utilisateur est le répertoire FTP que nous avons créé dans son répertoire personnel.

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

C'est ça! Dans cet article, nous avons décrit comment installer, configurer et sécuriser un serveur FTP dans CentOS 7, utilisez la section commentaires ci-dessous pour nous répondre concernant ce guide/partager toute information utile sur ce sujet.

Lecture suggérée : Installer le serveur ProFTPD sur RHEL/CentOS 7

Dans le prochain article, nous vous montrerons également comment sécuriser un serveur FTP à l'aide de connexions SSL/TLS dans CentOS 7, en attendant, restez connecté à TecMint.