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