VSFTPD

De Teteve wiki
Aller à : navigation, rechercher

Prérequis

On va installer un serveur FTP, grâce à vsftpd (Very Secure FTP Daemon).
Les utilisateurs de ce FTP sont les webmasters des différents sites hébergés sur le serveur.
Les utilisateurs n'auront pas de compte système sur la machine. Il faudra donc créer une base d'utilisateurs dits "virtuels".
Chaque utilisateur sera également "chrooté" dans son répertoire. Chaque utilisateur pourra lire et écrire dans son répertoire.

Installation

Installation du paquet :

# apt-get install vsftpd

Si le répertoire /etc/vsftpd n'existe pas, le créer :

# mkdir /etc/vsftpd

Renommer les fichiers de configuration d'origine pour sauvegarde :

# cp /etc/vsftpd.conf /etc/vsftpd.conf.default.bak
# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.default.bak

Installation du paquet pour gérer la base de données login/mot de passe : libdb4-util

# apt-get install libdb8.3
# apt-get install db5.3-util db-util

Remplir le fichiers des utilisateurs :

# vim /etc/vsftpd/login.txt

Important : respecter la syntaxe !
(retour à la ligne entre les deux et sans commentaires)

utilisateur1
mot de passe1
utilisateur2
mot de passe2

Créer la base de données proprement dite :

# db_load -T -t hash -f login.txt /etc/vsftpd/login.db
# chmod 600 /etc/vsftpd/login.db
# vim /etc/pam.d/vsftpd.pam
	auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
	account required /lib/security/pam_userdb.so db=/etc/vsftpd/login
# cp /etc/pam.d/vsftpd.pam /etc/pam.d/vsftpd

Le serveur FTP, géré par vsftpd, n'utilise pas les comptes système pour s'authentifier (d'où l'utilité de la base de données des utilisateurs => utilisateurs virtuels)
Il faut donc créer l'utilisateur système utilisé par le démon :

# mkdir -p /home/ftp/virtual
# groupadd ftp
# useradd -g ftp -d /home/ftp/virtual/ virtual

Vérifier dans les fichiers /etc/passwd et /etc/group

# chown root.ftp ~virtual/
# chmod 2750 ~virtual/

Configuration VSFTPD

# vim /etc/vsftpd.conf
# Ceci configure vsFTPd en mode "standalone"
listen=YES

# On désactive les connexions anonymes et on active les non-anonymes(c'est le cas des utilisateurs virtuels):
anonymous_enable=NO
local_enable=YES

# On interdit par défaut toute possibilité d'écrire ou lire.
# Ces droits seront gérés par utilisateurs, dans les fichiers de conf de chaque user
anon_mkdir_write_enable=NO
anon_other_write_enable=NO 
anon_upload_enable=NO
write_enable=NO

# guest_enable pour activer l'utilisateur virtuel
guest_enable=YES
guest_username=virtual 

# On veut que les utilisateurs virtuels restent dans ~virtual/ 
chroot_local_user=YES

# On définit le nombre maximum de sessions à 4 (les nouveaux clients recevront un message du genre: "erreur : serveur occupé")
max_clients=10

# On définit le nombre maximum de sessions par IP à 4
# max_per_ip=4

# Configuration emplacement fichiers utilisateurs, jail chroot, et service pam 
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd 
user_config_dir=/etc/vsftpd/vsftpd_user_conf 

#################### Supplément Teteve #############################

ftpd_banner=Bienvenue sur le serveur FTP de teteve.fr

# On active les logs pour les uploads/downloads
xferlog_enable=YES
xferlog_file=/var/log/vsftpd-dl.log

# Connexion et ports pour le mode passif 
connect_from_port_20=YES
pasv_address=87.98.141.85
pasv_min_port=20000
pasv_max_port=20100

# temps d'inactivité 
idle_session_timeout=600
data_connection_timeout=120

################# Droits sur les fichiers uploadés #################
chown_uploads=YES
chown_username=virtual
chown_upload_mode=0750

#### anon_umask=007
# The value that the umask for file creation is set to for anonymous users.
NOTE! If you want to specify octal values, remember the "0" prefix otherwise the value will be treated as a base 10 integer! 
# Default: 077

#### chown_upload_mode=0760 
# The file mode to force for chown()ed anonymous uploads. (Added in v2.0.6). 
# Default: 0600

#### file_open_mode=0117
# The permissions with which uploaded files are created. Umasks are applied on top of this value.
You may wish to change to 0777 if you want uploaded files to be executable. 
# Default: 0666 

#### local_umask=022
# The value that the umask for file creation is set to for local users.
NOTE! If you want to specify octal values, remember the "0" prefix otherwise the value will be treated as a base 10 integer! 
# Default: 077

Droits utilisateurs

# mkdir /etc/vsftpd/vsftpd_user_conf/

Donner les droits en lecture (utilisateur1) et lecture/écriture (utilisateur2) :

# echo "anon_world_readable_only=NO" > /etc/vsftpd/vsftpd_user_conf/utilisateur1

# echo "anon_world_readable_only=NO" > /etc/vsftpd/vsftpd_user_conf/utilisateur2
# echo "write_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/utilisateur2
# echo "anon_upload_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/utilisateur2

si besoin, rajouter deux lignes sur les ports ftp et modifier le firewall en conséquence

Pour séparer le répertoire d'upload

Créer le répertoire utiliser pour les uploads :

# mkdir ~virtual/upload/
# chmod 770 ~virtual/upload/

Commandes pour séparer les répertoires d'upload de chaque utilisateur

# cd ~virtual/
# mkdir -p {utilisateur1/,utilisateur2/}/upload
# chmod 2750 {utilisateur1/,utilisateur2/}
# chmod 770 {utilisateur1/,utilisateur2/}/upload/
# echo "local_root=utilisateur1" >> /etc/vsftpd/vsftpd_user_conf/utilisateur1
# echo "local_root=utilisateur2" >> /etc/vsftpd/vsftpd_user_conf/utilisateur2

On relance le serveur FTP pour prendre en compte tous ces paramètres :

# /etc/init.d/vsftpd stop
# /etc/init.d/vsftpd start

SSL

Préparation pour le SSL

Installer le paquet openssl

# apt-get install openssl

Créer le fichier certificat

# openssl req -x509 -nodes -days 730 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem

Plusieurs questions seront posées afin de créer le certificat. La plus critique est celle-ci :

Common Name (eg, YOUR name) []: <renseigner le nom ou l'ip que les clients utiliseront>

Une fois ce fichier certificat généré, il faut le copier dans le dossier /etc/ssl/certs.

# cp vsftpd.pem /etc/ssl/certs

Il faut ensuite le sécuriser :

sudo chown root:root /etc/ssl/certs/vsftpd.pem
sudo chmod 600 /etc/ssl/certs/vsftpd.pem

Note : vsftp s'exécute avec les droits de l'utilisateur nobody mais il se lance en tant que root et donc lit le certificat en tant que root.

################## SSL : connexions cryptées ######################
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
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem