dimanche 13 juillet 2014

Serveur de partage de fichiers ftp sécurisé : Serveur vsftpd - linux Ubuntu


Ayant la flemme de retrouver une ancienne machine me permettant de partager quelques fichiers, je me suis dit que j'allais monter ce serveur en 3 heures max... ca a duré au moins une dizaine d'heures au moins :)
Il etait donc nécéssaire de refaire un tuto à jour puisque avec les tutos du net j'ai un peu ramé et ma Livebox ne m'a pas aidé sur ce coup là.


Le but est de monter un petit serveur maison de partage sécurisé pour des personnes externes à mon réseau  via des utilisateurs virtuels.

Allez, c'est parti ouvrons une console puis :

sudo apt-get install vsftpd

Il est conseillé de créer un utilisateur ftp :

sudo useradd --system ftp 
 
Voici la conf se trouvant dans /etc/vsftpd.conf :
 
///////////////////////////////////////////////////////////////////////

listen=YES
#anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
 
guest_enable=YES
guest_username=titi
user_config_dir=/etc/vsftpd/vsftpd_user_conf
 
dirmessage_enable=YES
use_localtime=YES
 
#fichiers de logs 
xferlog_enable=YES
 
nopriv_user=ftpsecure
 
#message de bienvenue 
ftpd_banner=Welcome to polux ftp
 
 
#authentification PAM fichier situé dans /etc/pam.d/vsftpd.txt 
pam_service_name=vsftpd  
 
 
#Partie SSL,sécurisation des données et mots de passe 
ssl_enable=YES
allow_anon_ssl=NO 
force_local_data_ssl=YES
force_local_logins_ssl=YES
#tcp_wrappers=NO
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
#ssl_ciphers=HIGH
#require_ssl_reuse=NO
#Lieu où se trouvent les certificats
rsa_cert_file=/etc/ssl/private/vsftpdpolux.cert.pem
rsa_private_key_file=/etc/ssl/private/vsftpdpolux.key.pem
 
 
#port utilisé 
listen_port=222


 
#pour les connections externes veiller à ouvrir et rediriger cette plage
#mode passif le serveur choisi les ports ci-dessous, c'est le serveur qui gère et non le client
pasv_enable=YES
#pasv_promiscuous=NO
#port_promiscuous=NO
#ports à ouvrir sur pare-feu et box au même titre que le port 222 
#pasv_min_port=29000
#pasv_max_port=32000

port_enable=YES

 
#IP publique ou domaine ou connexions locales, ici retenu IP publique : 
pasv_address=votre IP PUBLIQUE ex XX.XX.XX.XX (tapper mon IPdans Google...)
#pasv_address=popo***.no-ip.biz votre nom de domaine
#pasv_addr_resolve=YES#pasv_address=Pour du partage en local , ici ip locale
 
#afin de voir qui est connecté sur le serveur, commandes à la fin du tuto 
 
setproctitle_enable=YES 
/////////////////////////////////////////////////////////////////// 


Avant tout faisons une sauvegarde des fichiers d'origine :

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.defaultorigine.txt
sudo cp /etc/pam.d/vsftpd /etc/pam.d/vsftpdorigine.txt


Ces quelques blocs dépendent donc d'autres paramètres nous allons creer en premier lieu un premier espace ou dossier de partage pour notre 1er utilisateur "TITI", n'importe quel utilisateur virtuel prendra sa place un peu comme Mr Anderson :)

1 - création de l'utilisateur TITI :

useradd -d /home/titi titi

Création d'un repertoire :

mkdir /home/titi/

On donne les droits de propriétaire à TITI sur ce répertoire :

sudo chown titi /home/titi



2- Création de notre certificat :


sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/private/vsftpd.cert.pem -keyout /etc/ssl/private/vsftpd.key.pem

renseigner les champs, rien de sorcier..

3- Création de la base de donnée des utilisateurs virtuels:

installation du programme le permettant:

sudo apt-get install libdb5.1
(une heure de perdue pour trouver une bonne version et j'espère ne rien oublier...)


3- Utilisateurs virtuels

a- Créons le dossier qui hébergera la configuration de ces utilisateurs virtuels :

sudo mkdir -p /etc/vsftpd/vsftpd_user_conf

b- création du fichier avec noms  d'utilisateurs virtuels et mots de passe dans /etc/vsftpd/
ouvrir Kate (bloc notes ) et saisir :

grosminet
aimelestiti8
mamie
faitdesbonsgateaux3

sauter une ligne et l'enregistrer sous /etc/vsftpd/logins.txt

le premier utilisateur virtuel est "grosminet" sont mot de passe est "aimelestiti8",le 2e mamie etc...

nous allons ensuite créer la base de données à partir de ce fichier comme suit :


sudo db5.1_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

le fichier login.txt et  login.db créés doivent être sécurisés :

sudo chmod 600 /etc/vsftpd/login.*


d- nous allons ensuite configurer le fichier PAM dans /etc/pam.d/vsftpd pour les authentifications

auth required /lib/i386-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/i386-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login


Attention ces chemins doivent correspondre avec les chemins rééls de votre système d'exploitation
(encore une heure de perdue :) )

e- il ne reste plus qu'à créer les configurations des utilisateurs virtuels dans etc/vsftpd/vsftpd_user_conf

créer un fichier grosminet.txt

voici une conf  correspondant à notre vsftpd.conf 
 ////////////////////////////////////////////////////////////////
write_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_upload_enable=YES
anon_world_readable_only=NO
local_root=/home/titi
chroot_local_user=YES
dirlist_enable=YES
download_enable=YES
guest_username=titi
virtual_use_local_privs=YES
local_umask=022
anon_umask=022


/////////////////////////////////////////////////////////////////

l'absence des 2 dernières lignes m'a aussi fait perdre un temps considérable...

Attention , il n'est pas possible de tester la connexion externe via une livebox, (2 heures de perdues)
le client ftp filezilla ou winscp bloquent sur AUTH TLS...

Pour ouvrir une plage de ports sur une livebox récente renseigner le 1er port sur "port interne" puis la plage sur le "port externe" 


c'est tellement bien fait que j'ai dû perdre encore des heures ...


4 - Quelques comandes :

Commandes pour visualiser utilisateurs connectés via la console :
 
ps -aef | grep vsftpd (instant T)
 
watch -n 1 'ps ax | grep vsftpd | grep -v grep'  (en temps réel)
 
à chaque modif de vsftpd.com redémarrer le service 
 
sudo service vsftpd reload 
 
 
si ça coince,  http://doc.ubuntu-fr.org/vsftpd et faire comme moi aller sur goooogle pour le reste...
 

Aucun commentaire: