Serveur FTP VSFTPD avec TLS - Linuxtips – Mes trucs et astuces

Transcription

Serveur FTP VSFTPD avec TLS - Linuxtips – Mes trucs et astuces
Serveur FTP VSFTPD avec TLS
LINUXTIPS - Mes trucs et
astuces sous LINUX
-- Réseau - Services Réseaux --
Services Réseaux
Serveur FTP VSFTPD
avec TLS
Laurent Rayssiguier
samedi 25 mars 2006
Résumé :
Article détaillant l'intallation de vsftpd sur Fedora avec l'implémentation de ftps ( ftp sécurisé ).
LINUXTIPS - Mes trucs et astuces sous LINUX
Page 1/10
Serveur FTP VSFTPD avec TLS
But de l'installation
Le transfert de fichiers est un service réseau très courant. Le célèbre FTP comprend quand même
un gros problème de sécurité car les logins et mot de passe sont diffusés en clair sur le réseau.
Un écoute avec ethereal par exemple peut vous donner pas mal d'informations comme le montre
l'image suivante.
Capture Ethereal FTP La capture d'une session ftp. Login et password en clair.
Pour contourner ce problème il faut crypter la connexion comme le fait http avec https, c'est à dire en
ajoutant une couche SSL à la connexion. Cette implémentation de SSL se nomme TLS et est
disponible pour FTP mais aussi pour POSTFIX, le serveur de mail.
Cet article va donc détailler la mise en place de TLS sur FTP pour créer un service FTPS.
Installation de VSFTPD ( VERY SECURE FTP DAEMON )
Si vous avez choisi lors de l'installation Serveur FTP, vous n'avez rien à faire, sinon, utilisez la
commande yum pour installer le service.
yum -y install vsftpd
On l'active lors du démarrage du serveur : chkconfig
On le démarre avec la commande service
LINUXTIPS - Mes trucs et astuces sous LINUX
vsftpd on
vsftpd start.
Page 2/10
Serveur FTP VSFTPD avec TLS
Configuration de base de vsftpd
On va déjà paramétrer vsftpd pour fonctionner comme serveur ftp "classique".
Mes choix pour ce serveur sont les suivants :
Pas de ftp anonyme, car ce serveur est d'usage purement privé.
Je souhaite verrouiller certains comptes dans leur dossier personnel.
Ces choix sont personnels, rien ne vous empèche de créer un ftp public. Dans ce cas, sachez que le
dossier public est /var/ftp.
Dans mon cas je dois éditer certaines valeurs que je vais commenter ci-dessous. Ces valeurs se
trouvent dans le fichier de configuration de vsftpd, nommé /etc/vsftpd/vsftpd.conf.
Attention, je ne commente ici que les valeurs que je modifié. Les autres valeurs du fichier restent par
défaut.
# Je ne veux pas de login anonyme
anonymous_enable=NO
# Je veux que mes utilisateurs locaux puissent se connecter
local_enable=YES
# Ils doivent pouvoir écrire
write_enable=YES
# Je modifie la banniere du service ftp
ftpd_banner=Bienvenue sur mon joli serveur FTP.
# Je veux spécifier une liste d'utilisateurs locaux
# devant être chrootés dans leur dossier personnel.
# Cela veut dire qu'il arrivent dans leur propre dossier
# et qu'ils ne peuvent en sortir.
# Cela s'obtient normalement en créant une liste des users
# chrootés avec les instructions chroot_list_enable=YES
# et chroot_list_file=/etc/vsftpd/chroot_list
#
# Je préfère que tous mes utilisateurs soient chrootés par défaut
# et spécifier explicitement qui ne doit pas l'être.
# Pour cela j'utilise chroot_local_user=YES,
# La liste que je vais créer devient alors la liste de ceux qui
# ne sont pas chrootés.
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# Masque de création des fichiers par défaut.
# Je serai peut être amené à le modifier, mais pour
LINUXTIPS - Mes trucs et astuces sous LINUX
Page 3/10
Serveur FTP VSFTPD avec TLS
# l'instant il reste par défaut.
# 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
Les 2 fichiers suivants ne sont pas indiqués dans la configuration par défaut mais sont importants car
utilisés implicitement.
Ces fichiers sont user_list et ftpusers. Ils sont identiques car ftpusers est le fichier historique des
utilisateurs ne pouvant pas se logguer en ftp, comme root par exemple et user_list de vsfpd a le
même objectif.
Ils comportent en général les comptes système du serveur.
Le fichier user_list utilisé par vsftpd est intéressant, car comme l'indique son contenu, on peut
l'utiliser de manière "inverse" à sa fonction primaire.
C'est à dire que si dans vsftpd.conf on indique userlist_deny=NO au lieu de userlist_deny=YES qui
est la valeur implicite par défaut, on peut remplir ce fichier des utilisateurs pouvant se connecter au
service ftp. Ce qui exclut par défaut tous les autres comptes d'utilisateurs.
Cela peut être pratique si l'usage du ftp est restreint à des webmasters par exemple.
Fichier /etc/vsftpd/user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
Fichier /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
LINUXTIPS - Mes trucs et astuces sous LINUX
Page 4/10
Serveur FTP VSFTPD avec TLS
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
Fichier /etc/vsftpd/chroot_list
L'usage de ce fichier est détaillé dans mon fichier de configuration vsftpd.conf.
# Utilisateurs pouvant se déplacer dans l'arborescence du serveur.
lrayssiguier
webmaster
Une fois les modifications faites, on recharge la configuration du service ftp et on peut tester après
avoir créé deux comptes utilisateurs nommés laurent et lrayssiguier.
service vsftpd reload
useradd -s /sbin/nologin -c "Mon Utilisateur" laurent
passwd laurent
useradd -s /sbin/nologin -c "Utilisateur privilégié" lrayssiguier
passwd lrayssiguier
Vous remarquerez le shell défini à /sbin/nologin interdisant à ces utilistaurs de se connecter à la
console du serveur ou en ssh.
Une fois les comptes et les mots de passe renseignés on lance nos tests :
Connexion annonyme :
[root@portable ~]# ftp localhost
Connected to localhost.localdomain.
220 Bienvenue sur mon joli serveur FTP.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): ftp
530 This FTP server does not allow anonymous logins.
Login failed.
ftp> quit
221 Goodbye.
La connexion est bien refusée comme souhaité.
LINUXTIPS - Mes trucs et astuces sous LINUX
Page 5/10
Serveur FTP VSFTPD avec TLS
Connexion de l'utilisateur laurent :
[root@portable ~]# ftp localhost
Connected to localhost.localdomain.
220 Bienvenue sur mon joli serveur FTP.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): laurent
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> quit
221 Goodbye.
L'utilisateur se connecte correctement et se trouve bloqué dans son dossier personnel.
Ceci est indiqué par le fait que l'utilisateur est à la racine / et ne peut donc pas se déplacer en dehors
de son dossier.
Connexion de l'utilisateur lrayssiguier :
[root@portable ~]# ftp localhost
Connected to localhost.localdomain.
220 Bienvenue sur mon joli serveur FTP.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): lrayssiguier
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/lrayssiguier"
ftp> cd /
250 Directory successfully changed.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (127,0,0,1,212,123)
150 Here comes the directory listing.
drwxr-xr-x
2 0
0
4096 Mar 22 19:41 bin
drwxr-xr-x
4 0
0
1024 Mar 22 18:08 boot
drwxr-xr-x
11 0
0
3740 Mar 25 08:28 dev
LINUXTIPS - Mes trucs et astuces sous LINUX
Page 6/10
Serveur FTP VSFTPD avec TLS
drwxr-xr-x
89 0
0
12288 Mar 25 09:57 etc
drwxr-xr-x
4 0
0
4096 Mar 25 09:57 home
drwxr-xr-x
11 0
0
4096 Mar 25 09:36 lib
drwx------
2 0
0
drwxr-xr-x
3 0
0
4096 Mar 22 18:32 media
drwxr-xr-x
2 0
0
4096 Feb 11 03:06 misc
drwxr-xr-x
2 0
0
4096 Feb 11 17:16 mnt
drwxr-xr-x
2 0
0
0 Mar 25 08:28 net
drwxr-xr-x
2 0
0
4096 Feb 11 17:16 opt
dr-xr-xr-x
114 0
0
drwxr-x---
16 0
0
4096 Mar 25 09:03 root
drwxr-xr-x
2 0
0
12288 Mar 22 19:42 sbin
drwxr-xr-x
2 0
0
4096 Mar 22 17:53 selinux
drwxr-xr-x
2 0
0
4096 Feb 11 17:16 srv
drwxr-xr-x
11 0
0
0 Mar 25 09:27 sys
drwxrwxrwt
10 0
0
4096 Mar 25 09:58 tmp
drwxr-xr-x
14 0
0
4096 Mar 22 18:02 usr
drwxr-xr-x
22 0
0
4096 Mar 24 19:20 var
16384 Mar 22 18:52 lost+found
0 Mar 25 09:27 proc
226 Directory send OK.
ftp> quit
221 Goodbye.
On voit bien ici que l'utilisateur peut se déplacer sur le serveur comme il le ferait à la console de la
machine. Les droits sur le système sont bien entendu liés aux droits du compte utilisateur unix.
Sécurisation SSL du serveur FTP
Création du certificat
Le cryptage SSL se base sur ce qu'on appelle un certificat.
Ce certificat peut être signé par une autorité reconnue comme VERISIGN, mais dans mon cas, je
vais me créer un certificat auto-signé.
Cela va provoquer une alerte de sécurité lors de la connexion, mais ne gache en rien la sécurité
apportée au transfert ftp.
Pour ce faire, je crée mon certificat comme suit :
cd /etc/vsftpd/
mkdir cert
cd cert/
openssl req -x509 -nodes -days 730 -newkey rsa:1024 -keyout vsftpd.crt -out vsftpd.crt
Openssl va vous poser des questions servant à renseigner le certificat comme indiqué ci-dessous.
[root@portable cert]# openssl req -x509 -nodes -days 730 -newkey rsa:1024 -keyout vsftpd.crt
-out vsftpd.crt
LINUXTIPS - Mes trucs et astuces sous LINUX
Page 7/10
Serveur FTP VSFTPD avec TLS
Generating a 1024 bit RSA private key
............................................++++++
....................++++++
writing new private key to 'vsftpd.crt'
----You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
----Country Name (2 letter code) [GB]:FR
State or Province Name (full name) [Berkshire]:MidiPyrénées
Locality Name (eg, city) [Newbury]:CASTRES
Organization Name (eg, company) [My Company Ltd]:Linuxtips
Organizational Unit Name (eg, section) []:Castres-Wireless
Common Name (eg, your name or your server's hostname) []:linuxtips.castres-wireless.org
Email Address []:[email protected]
[root@portable cert]#
Nous voila avec un beau certificat valable 730 jours.
Utilisation du certificat
chown root: /etc/vsftpd/cert/vsftpd.crt
chmod 600 /etc/vsftpd/cert/vsftpd.crt
On vérifie les droits donnés au certificat :
[root@portable cert]# ll
total 4
-rw------- 1 root root 2367 mar 25 11:16 vsftpd.crt
On force l'apartenance du certificat à root malgrès le fait que vsftpd utilise un compte nommé vsftpd
durant son fonctionnement normal.
Cela est dû au fait qu'il démarre en tant que root, il lit le certificat et change ensuite l'utilisateur du
processus.
Configuration de vsftpd
On ajoute à la fin du fichier /etc/vsftpd/vsftpd.conf le bloc suivant :
# On active SSL
ssl_enable=YES
# On refuse l'accès anonyme en ssl aussi
allow_anon_ssl=NO
# Les données peuvent passer non cryptées
force_local_data_ssl=NO
LINUXTIPS - Mes trucs et astuces sous LINUX
Page 8/10
Serveur FTP VSFTPD avec TLS
# Le login est par contre forcément en ssl
force_local_logins_ssl=YES
# On définit quelles versions de ssl/tls utiliser
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
# On indique où se trouve le certificat
rsa_cert_file=/etc/vsftpd/cert/vsftpd.crt
<code>
On active les changements avec la commande <code>service vsftpd reload.
Faisons un test en ligne de commande :
[root@portable cert]# ftp localhost
Connected to localhost.localdomain.
220 Bienvenue sur mon joli serveur FTP.
504 Unknown AUTH type.
504 Unknown AUTH type.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): laurent
530 Non-anonymous sessions must use encryption.
Login failed.
ftp> quit
221 Goodbye.
La commande ftp à la console ne sait pas faire de ftps et le serveur nous refuse l'accès avant de
taper le mot de passe.
Faisons un test avec GFTP :
Configuration GTFP La configuration du client gftp
Attention ! Etant donné que nous avons un certificat auto-signé, pensez à décocher "Verify SSL
Peer" dans le menu FTP, Options, Moteur SSL.
LINUXTIPS - Mes trucs et astuces sous LINUX
Page 9/10
Serveur FTP VSFTPD avec TLS
Connexion FTPS Connexion FTPS réussie.
Voila qui est bien, on est connecté en ftps...
Les clients qui supportent ssl
Sous Windows
FileZilla
SmartFtP option : "FTP over SSL Explicit
EngInSite DataFreeway : client ssh, ftp, dav, ftps
Sous Linux
ftp-ssl - The FTP client with SSL or TLS encryption support
gftp
Cette liste n'est pas exhaustive bien entendu.
LINUXTIPS - Mes trucs et astuces sous LINUX
Page 10/10