Mon objectif est de créer un serveur FTP qui utilisera le nom de connexion "ftpadmin" avec des droits sur le dossier [/var/www]. Ainsi, il sera possible d'utiliser un client FTP comme "FIleZilla" pour téléverser des pages Web dans le bon répertoire.
Vous devez installer les paquets "vsftpd" et "db5.1-util".
#
aptitude install vsftpd db5.1-util
Le fichier "vsftpd.conf" se trouve dans le répertoire [/etc].
Editez le fichier [/etc/vsftpd.conf] et modifiez-le en tenant compte du listing ci-dessous.
#
vim /etc/vsftpd.conf
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=NO
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=NO
chown_username=nobody
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
async_abor_enable=NO
ascii_upload_enable=NO
ascii_download_enable=NO
ftp_banner=Bienvenue sur Debian.
chroot_local_user=YES
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
userlist_enable=YES
user_config_dir=/etc/vsftpd/user_conf
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
tcp_wrappers=YES
max_clients=10
max_per_ip=1
La configuration du fichier "vsftpd.conf" est terminée.
Créez le répertoire "[/etc/vsftpd]" et le fichier "login.txt".
#
mkdir /etc/vsftpd
#
touch /etc/vsftpd/login.txt
Ajouter l'utilisateur "ftpadmin" et le mot de passe "password" dans le fichier "login.txt".
#
vim /etc/vsftpd/login.txt
ftpadmin
password <= Faîtes un retour chariot après le mot de passe !
Changez les droits sur le fichier "/etc/vsftpd/login.txt".
#
chmod 600 /etc/vsftpd/login.txt
Créez la base de données "PAM" des utilisateurs autorisés.
#
db5.1_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
Changez les droits sur le fichier "/etc/vsftpd/login.db".
#
chmod 600 /etc/vsftpd/login.db
L'objectif est "d'emprisonner" l'utilisateur "ftpadmin" dans le répertoire "/var/www".
#
useradd -g www-data -d /var/www -s /bin/false ftpadmin
#
passwd ftpadmin
#
usermod -a -G www-data ftpadmin
Créez le répertoire [/etc/vsftpd/user_conf].
#
mkdir /etc/vsftpd/user_conf
Créez le fichier "/etc/vsftpd/user_conf/ftpadmin" pour l'utilisateur "ftpadmin".
#
touch /etc/vsftpd/user_conf/ftpadmin
#
vim /etc/vsftpd/user_conf/ftpadmin
download_enable=YES
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
chmod_enable=YES
virtual_use_local_privs=YES
force_dot_files=NO
hide_ids=YES
local_root=/var/www
guest_username=ftpadmin
Modifiez le propriétaire, le groupe et les droits sur le répertoire [/var/www].
#
chown -R ftpadmin:www-data /var/www
#
chmod -R 775 /var/www
PAM (Pluggable Authentification Modules) permet de changer la politique d'authentification sans avoir à recompiler le programme. Il suffit de modifier un fichier de configuration. Pour le serveur VSFTPD modifiez le fichier "/etc/pam.d/vsftpd" de la manière suivante :
#
vim /etc/pam.d/vsftpd
# Standard ehaviour for ftpd(8).
# auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers ...
# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
# Standard pam includes
# @include common-account
# @include common-session
# @include common-auth
# @include required pam_shells.so
auth required /lib/x86_64-linux-gnu/security/pam__userdb.so db=/etc/vsftpd/login
account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login
Redémarrez le serveur VSFTPD par la commande :
#
/etc/init.d/vsftpd restart
Le serveur VSFTPD est prêt !
Le test peut se faire directement sur le serveur avec la commande "ftp".
#
ftp debian
Connected to debian
220 Bienvenue sur Debian.
Name (debian:root): <= Tapez ftpadmin
331 Please specify the password.
Password: <= Tapez le mot de passe de ftpadmin
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
ftp>
Si vous obtenez ce message d'erreur, vous pouvez le régler de la manière suivante :
#
echo "deb http://ftp.cyconet.org/debian wheezy-updates main non-free contrib" >> \
/etc/apt/sources.list.d/wheezy-updates.cyconet.list
#
apt-get update
#
apt-get install -t wheezy-updates debian-cyconet-archive-keyring vsftpd
#
echo "allow_writeable_chroot=YES" >> /etc/vsftpd.conf
#
/etc/init.d/vsftpd restart
Réessayez la connexion avec la commande "ftp".
Le serveur ftp fonctionne ! Vous pouvez bien sûr utiliser un logiciel comme "FIleZilla".