mercredi 15 septembre 2010

Monter un Serveur securisé vsftpd sous Ubuntu



attention ce tuto n'est plus à jour, retrouver le plus récent ici :

http://infopolux.blogspot.fr/2014/07/serveur-de-partage-de-fichiers-ftp.html

 



Inspiré du tutoriel de notre communauté ubuntu ici

1/ install de vsftpd

trop dur ... sudo apt-get install vsftpd

voici le petit fichier qui en découle avec une tite config qui fonctionne
dans \etc\vsftpd.conf

# Ceci configure vsFTPd en mode "standalone"
listen=YES
# Allow anonymous FTP? (Disabled by default)
anonymous_enable=NO
# 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
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
use_localtime=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
# You may fully customise the login banner string:
ftpd_banner=Welcome to fuckin'sftp jungle
# You may restrict local users to their home directories. See the FAQ for
# the possible risks in this before using chroot_local_user or
# chroot_list_enable below.
chroot_local_user=YES
# 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=NO
#chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
#to log users connected
setproctitle_enable=YES


# Options for SSL
# encrypted connections.
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.pem

#ici le port choisi, attention aux pare-feu
listen_port=228

#pour les connections externes veiller à ouvrir et rediriger cette plage
#mode passif
pasv_enable=YES
pasv_promiscuous=NO
pasv_min_port=46000
pasv_max_port=54000
#ici ip publique
pasv_address=xx.xxx.xx.xxx
#ou domaine.com avec pasv_addr_resolve=YES
port_promiscuous=NO
#indique ou se trouvent les dossiers utilisateurs externes par variable
local_root=/srv/ftp/$USER

user_sub_token=$USER
anonymous_enable=NO

local_enable=YES
chroot_local_user=YES
guest_enable=YES
#l'utilistateur virtuel
guest_username=virtual
virtual_use_local_privs=YES
#lieu ou se trouve la config des utilisateurs
user_config_dir=/etc/vsftpd/vsftpd_user_conf

pam_service_name=vsftpd
hide_ids=YES


à chaque modif de ce fichier relancer le deamon :

sudo /etc/init.d/vsftpd restart



2 / Creation du certificat

sudo apt-get install openssl

puis

mkdir ~/SSL-cert-vsftpd && cd ~/SSL-cert-vsftpd 
puis

openssl req -x509 -nodes -days 730 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem
répondre aux differentes questions posées de la console...
à cette question :

Common Name (eg, YOUR name) []: saisir l ip ou nom de domaine de votre serveur

puis ,

sudo cp ~/SSL-cert-vsftpd/vsftpd.pem /etc/ssl/certs/
sudo chown root:root /etc/ssl/certs/vsftpd.pem 
sudo chmod 600 /etc/ssl/certs/vsftpd.pem

3/ Configuration des utilisateurs virtuels ou non locaux

installer les paquets libdb4.7 db4.7-util db4.7-doc . I
puis,effacer le contenu du fichier /etc/pam.d/vsftpd et le remplacer par :
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/login

puis créer un fichier login.txt dans /etc/vsftpd/ avec les futurs utilisateurs virtuels

sous cette forme :

toto
motdepassetoto
tata
motdepassetata

-> l' utilisateur toto a pour mot de passe "motdepassetoto"...

sauter une ligne ou deux avant d'enregistrer le fichier.(recommandé)

convertir au format "db":

sudo db4.7_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
on securise
sudo chmod 600 /etc/vsftpd/login.*

virer le fichier txt

on doit ensuite definir les droits de nos utilisateurs virtuels

dans le fichier :  /etc/vsftpd/vsftpd_user_conf/toto (toto étant un utilisateur virtuel

extrait :

## l'utilisateur est enfermé dans un dossier déterminé
local_root=/srv/ftp/toto/
#ne pas oublier de rendre l'utilisateur virtual proprietaire chown virtual:virtual /srv/ftp/
## droit de lecture(download)
anon_world_readable_only=NO

## droit d'écriture(upload)
write_enable=YES
anon_upload_enable=YES

## créer des dossiers
anon_mkdir_write_enable=YES

## droit de renommer, supprimer...
anon_other_write_enable=YES

## pour gérer le chmod de l'utilisateur
## activer l'option
virtual_use_local_privs=YES
## définir l'option local_umask
local_umask=022
anon_umask=022 

puis tester avec un client filezilla un en local et un hors serveur pour detecter les problèmes de pare-feu

site configuré comme suit




4/ Quelques commandes

pour voir quiqui qu'est connecté : 

watch -n 1 'ps ax | grep vsftpd | grep -v grep'










Aucun commentaire: