Table des matières
Dernière mise-à-jour : 2020/01/30 03:27
Topic 212 - Sécuriser un Serveur FTP (2/60)
Weight: 2
Description: Candidates should be able to configure an FTP server for anonymous downloads and uploads. This objective includes precautions to be taken if anonymous uploads are permitted and configuring user access.
Key Knowledge Areas:
- Configuration files, tools and utilities for Pure-FTPd and vsftpd
- Awareness of ProFTPd
- Understanding of passive vs. active FTP connections
Terms and Utilities:
- vsftpd.conf
- important Pure-FTPd command line options
Le Serveur FTP
Installation
Le paquet vsftpd Very Secure FTP daemon se trouve dans les dépôts CentOS.
[root@centos6 ~]# yum install vsftpd Loaded plugins: fastestmirror, refresh-packagekit Loading mirror speeds from cached hostfile * base: mirror.in2p3.fr * extras: mirror.in2p3.fr * rpmforge: fr2.rpmfind.net * updates: mirror.in2p3.fr Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package vsftpd.i686 0:2.2.2-6.el6_2.1 set to be updated --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================================================================== Package Arch Version Repository Size ======================================================================================================================================================================== Installing: vsftpd i686 2.2.2-6.el6_2.1 updates 155 k Transaction Summary ======================================================================================================================================================================== Install 1 Package(s) Upgrade 0 Package(s) Total download size: 155 k Installed size: 343 k Is this ok [y/N]: y Downloading Packages: vsftpd-2.2.2-6.el6_2.1.i686.rpm | 155 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : vsftpd-2.2.2-6.el6_2.1.i686 1/1 Installed: vsftpd.i686 0:2.2.2-6.el6_2.1 Complete!
Par contre le service vsftpd n'est pas démarré par défaut :
[root@centos6 ~]# chkconfig --list vsftpd vsftpd 0:arrêt 1:arrêt 2:arrêt 3:arrêt 4:arrêt 5:arrêt 6:arrêt
Configurez le service vsftpd pour que celui-ci soit activé correctement pour les niveaux d'exécution 3, 4 et 5 :
[root@centos6 ~]# chkconfig --level 345 vsftpd on [root@centos6 ~]# chkconfig --list vsftpd vsftpd 0:arrêt 1:arrêt 2:arrêt 3:marche 4:marche 5:marche 6:arrêt
Avant de poursuivre, modifiez le mode de SELinux de enforced à permissive pour la session en cours :
[root@centos6 ~]# setenforce permissive [root@centos6 ~]# getenforce Permissive
Ensuite éditez le fichier /etc/selinux/config ainsi :
- config.selinux
# 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 two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
Configuration de base
Le fichier de configuration de vsftpd est /etc/vsftpd/vsftpd.conf :
- vsftpd.conf
# Example config file /etc/vsftpd/vsftpd.conf # # The default compiled in settings are fairly paranoid. This sample file # loosens things up a bit, to make the ftp daemon more usable. # Please see vsftpd.conf.5 for all compiled in defaults. # # READ THIS: This example file is NOT an exhaustive list of vsftpd options. # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's # capabilities. # # Allow anonymous FTP? (Beware - allowed by default if you comment this out). anonymous_enable=YES # # Uncomment this to allow local users to log in. local_enable=YES # # Uncomment this to enable any form of FTP write command. write_enable=YES # # Default umask for local users is 077. You may wish to change this to 022, # if your users expect that (022 is used by most other ftpd's) local_umask=022 # # Uncomment this to allow the anonymous FTP user to upload files. This only # has an effect if the above global write enable is activated. Also, you will # obviously need to create a directory writable by the FTP user. #anon_upload_enable=YES # # Uncomment this if you want the anonymous FTP user to be able to create # new directories. #anon_mkdir_write_enable=YES # # Activate directory messages - messages given to remote users when they # go into a certain directory. dirmessage_enable=YES # # Activate logging of uploads/downloads. xferlog_enable=YES # # Make sure PORT transfer connections originate from port 20 (ftp-data). connect_from_port_20=YES # # If you want, you can arrange for uploaded anonymous files to be owned by # a different user. Note! Using "root" for uploaded files is not # recommended! #chown_uploads=YES #chown_username=whoever # # You may override where the log file goes if you like. The default is shown # below. #xferlog_file=/var/log/vsftpd.log # # If you want, you can have your log file in standard ftpd xferlog format. # Note that the default log file location is /var/log/xferlog in this case. xferlog_std_format=YES # # You may change the default value for timing out an idle session. #idle_session_timeout=600 # # You may change the default value for timing out a data connection. #data_connection_timeout=120 # # It is recommended that you define on your system a unique user which the # ftp server can use as a totally isolated and unprivileged user. #nopriv_user=ftpsecure # # Enable this and the server will recognise asynchronous ABOR requests. Not # recommended for security (the code is non-trivial). Not enabling it, # however, may confuse older FTP clients. #async_abor_enable=YES # # By default the server will pretend to allow ASCII mode but in fact ignore # the request. Turn on the below options to have the server actually do ASCII # mangling on files when in ASCII mode. # Beware that on some FTP servers, ASCII support allows a denial of service # attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd # predicted this attack and has always been safe, reporting the size of the # raw file. # ASCII mangling is a horrible feature of the protocol. #ascii_upload_enable=YES #ascii_download_enable=YES # # You may fully customise the login banner string: #ftpd_banner=Welcome to blah FTP service. # # You may specify a file of disallowed anonymous e-mail addresses. Apparently # useful for combatting certain DoS attacks. #deny_email_enable=YES # (default follows) #banned_email_file=/etc/vsftpd/banned_emails # # You may specify an explicit list of local users to chroot() to their home # directory. If chroot_local_user is YES, then this list becomes a list of # users to NOT chroot(). #chroot_local_user=YES #chroot_list_enable=YES # (default follows) #chroot_list_file=/etc/vsftpd/chroot_list # # You may activate the "-R" option to the builtin ls. This is disabled by # default to avoid remote users being able to cause excessive I/O on large # sites. However, some broken FTP clients such as "ncftp" and "mirror" assume # the presence of the "-R" option, so there is a strong case for enabling it. #ls_recurse_enable=YES # # When "listen" directive is enabled, vsftpd runs in standalone mode and # listens on IPv4 sockets. This directive cannot be used in conjunction # with the listen_ipv6 directive. listen=YES # # This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6 # sockets, you must run two copies of vsftpd with two configuration files. # Make sure, that one of the listen options is commented !! #listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES
Les directives actives de ce fichier sont :
- vsftpd.conf.bare
anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES
Ces directives sont détaillées ci-après :
Directive | Valeur par Défaut | Description |
---|---|---|
anonymous_enable | YES | Si oui, autorise les connexions anonymes |
local_enable | YES | Si oui, autorise des connexions par des utilisateurs ayant un compte valide sur le système |
write_enable | YES | Si oui, permet l'écriture |
local_umask | 022 | Spécifie la valeur de l'umask lors de la création de fichiers et de répertoires |
dirmessage_enable | NO | Si oui, permet d'afficher le contenu du fichier .message quand un utilisateur rentre dans le répertoire |
xferlog_enable | NO | Si oui, permet d'activer la journalisation dans le fichier /var/log/vsftpd.log |
connect_from_port_20 | NO | Permet les connexions de ftp-data |
listen | NO | Si oui, vfsftpd fonctionne en mode Standalone et non en tant que sous-service de xinetd |
pam_service_name | S/O | Indique le nom du service PAM utilisé par vsftpd |
userlist_enable | NO | Si oui, vsftpd charge une liste d'utilisateurs spécifiés dans le fichier identifié par la directive userlist_file. Si un utilisateur spécifié dans la liste essaie de se connecter, la connexion sera réfusée avant la demande d'un mot de passe |
tcp_wrappers | NO | Si oui, vsftpd utilise TCP WRAPPERS |
/etc/ftpusers
Votre serveur FTP est maintenant configuré pour les connexions en provenance des utilisateurs ayant un compte sur votre système.
Dans le cas où vous souhaiteriez interdire la connexion vers le serveur de certaines personnes mais pas de toutes les personnes ayant un compte système, éditez le fichier /etc/ftpusers.
Voici la liste des utilisateurs système qu'il convient d'ajouter à ce fichier:
- ftpusers
root bin daemon adm lp sync shutdown halt mail uucp operator gopher nobody dbus vcsa rpc nscd tcpdump haldaemon apache nslcd postfix avahi ntp rpcuser sshd gdm vboxadd named
Il est ensuite nécessaire d'inclure une directive supplémentaire dans le fichier /etc/vsftpd/vsftpd.conf :
... userlist_file=/etc/ftpusers ...
et de démarrer le serveur :
[root@centos6 ~]# service vsftpd start Démarrage de vsftpd pour vsftpd : [ OK ]
Testez maintenant le serveur :
[root@centos6 ~]# ftp localhost Connected to localhost (127.0.0.1). 220 (vsFTPd 2.2.2) Name (localhost:trainee): trainee 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/home/trainee" ftp>
Bien que trainee puisse se connecter, ce n'est pas le cas pour root :
[root@centos6 ~]# ftp localhost Connected to localhost (127.0.0.1). 220 (vsFTPd 2.2.2) Name (localhost:trainee): root 530 Permission denied. Login failed.
Pour chrooter l'utilisateur dans son répertoire personnel, il convient d'ajouter la directive suivante au fichier /etc/vsftpd/vsftpd.conf :
... chroot_local_user=YES ...
et de redémarrer le serveur :
[root@centos6 ~]# service vsftpd restart Arrêt de vsftpd : [ OK ] Démarrage de vsftpd pour vsftpd : [ OK ]
Lors de sa prochaine connexion, l'utilisateur voit son répertoire personnel comme la racine du système de fichiers :
[root@centos6 ~]# ftp localhost Connected to localhost (127.0.0.1). 220 (vsFTPd 2.2.2) Name (localhost:trainee): trainee 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/" ftp>
Serveur vsftpd Anonyme
Configuration
Le serveur anonyme étant déjà configuré par la présence de la directive anonymous_enable=YES, il convient de tester celui-ci :
[root@centos6 ~]# ftp localhost Connected to localhost (127.0.0.1). 220 (vsFTPd 2.2.2) Name (localhost:trainee): anonymous 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/" ftp> ls 227 Entering Passive Mode (127,0,0,1,143,6). 150 Here comes the directory listing. drwxr-xr-x 2 0 0 4096 Jan 03 01:21 pub 226 Directory send OK. ftp> quit 221 Goodbye.
Le répertoire pour les connexions anonymes est /var/ftp :
[root@centos6 ~]# ls -l /var | grep ftp drwxr-xr-x. 3 root root 4096 31 mai 15:12 ftp
Par défaut il contient un répertoire pub :
[root@centos6 ~]# ls -l /var/ftp total 4 drwxr-xr-x. 2 root root 4096 3 janv. 02:21 pub
Pour permettre aux utilisateurs anonymes de transférer des fichiers vers le serveur, il faut d'abord créer un répertoire upload dans /var/ftp/pub et de l'affecter à ftp:ftp :
[root@centos6 ~]# mkdir /var/ftp/pub/upload [root@centos6 ~]# chown ftp:ftp /var/ftp/pub/upload
Ensuite il faut ajouter la directive suivante au fichier /etc/vsftpd/vsftpd.conf :
... anon_upload_enable=YES ...
Votre fichier de configuration ressemblera donc à :
- vsftpd.conf.anon
anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES userlist_file=/etc/ftpusers anon_upload_enable=YES chroot_local_user=YES
Testez ensuite votre configuration :
[root@centos6 ~]# ftp localhost Connected to localhost (127.0.0.1). 220 (vsFTPd 2.2.2) Name (localhost:trainee): anonymous 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (127,0,0,1,70,196). 150 Here comes the directory listing. drwxr-xr-x 3 0 0 4096 May 31 14:03 pub 226 Directory send OK. ftp> cd pub 250 Directory successfully changed. ftp> cd upload 250 Directory successfully changed. ftp> put rndc.key local: rndc.key remote: rndc.key 227 Entering Passive Mode (127,0,0,1,238,121). 150 Ok to send data. 226 Transfer complete. 77 bytes sent in 0,0349 secs (2,21 Kbytes/sec) ftp> ls 227 Entering Passive Mode (127,0,0,1,230,251). 150 Here comes the directory listing. -rw------- 1 14 50 77 May 31 14:09 rndc.key 226 Directory send OK.
Serveur vsftpd et Utilisateurs Virtuels
Introduction
Le serveur vsftpd utilise le système PAM pour gérer les authentifications. Le module concerné est pam_userdb. Ce module consulte une base de données au format Berkeley pour obtenir les coordonnées de connexion des utilisateurs.
Configuration
Pour configurer des utilisateurs virtuels, il convient de créer un fichier de configuration à part, /root/vftpusers , dans lequel on inscrit le nom et le mot de passe des utilisateurs virtuels :
- vftpusers
alexandre 123456789
Ce fichier doit ensuite être converti au format Berkeley :
[root@centos6 ~]# db_load -T -t hash -f /root/vftpusers /etc/vsftpd/vftpusers.db
Modifiez ensuite les permissions sur le fichier /etc/vsftpd/vftpusers.db et supprimez le fichier /root/vftpusers :
[root@centos6 ~]# chmod 600 /etc/vsftpd/vftpusers.db [root@centos6 ~]# rm -f /root/vftpusers
Créez ensuite un fichier PAM /etc/pam.d/vftpusers :
- vftpusers
#%PAM-1.0 auth required pam_userdb.so db=/etc/vsftpd/vftpusers account required pam_userdb.so db=/etc/vsftpd/vftpusers session required pam_loginuid.so
Notez que pam_userdb.so ajoute automatiquement l’extension .db aux noms des fichiers de base de données.
Modifiez maintenant le fichier /etc/vsftpd/vsftpd.conf :
... pam_service_name=vftpusers guest_enable=YES guest_username=ftp virtual_use_local_privs=YES ...
Votre fichier de configuration ressemblera à :
- vsftpd.conf
anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES pam_service_name=vftpusers guest_enable=YES guest_username=ftp virtual_use_local_privs=YES userlist_enable=YES tcp_wrappers=YES userlist_file=/etc/ftpusers anon_upload_enable=YES chroot_local_user=YES
Redémarrez le service vsftpd :
[root@centos6 ~]# service vsftpd restart Arrêt de vsftpd : [ OK ] Démarrage de vsftpd pour vsftpd : [ OK ]
Testez ensuite la configuration :
[root@centos6 log]# ftp localhost Connected to localhost (127.0.0.1). 220 (vsFTPd 2.2.2) Name (localhost:trainee): alexandre 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/" ftp> ls 227 Entering Passive Mode (127,0,0,1,214,118). 150 Here comes the directory listing. drwxr-xr-x 3 0 0 4096 May 31 14:03 pub 226 Directory send OK.
Notez que les utilisateurs virtuels atterrissent dans le répertoire personnel du compte indiqué par la directive guest_username du fichier /etc/vsftpd/vsftpd.conf.
LAB #1
A Faire - Configurez votre serveur ftp anonyme et un utilisateur virtuel.
<html> <DIV ALIGN=“CENTER”> Copyright © 2004-2017 I2TCH LIMITED </div> </html>