Ce tutoriel décrit comment donner un accès FTP aux sites web d'un serveur pour que ceux ci soient accessibles par le serveur sans problème de droits.
Pour cela, nous mettrons en œuvre un serveur Vsftpd avec des utilisateurs virtuels.
Nous supposons ici :
Installez le paquet vsftpd,db6.0-util ou en ligne de commande :
$ sudo apt install vsftpd db6.0-util
Cela installe :
Il faut donner les droits à l'utilisateur et au groupe www-data :
sudo chown -R www-data:www-data /var/www sudo mkdir -p /etc/vsftpd/users.conf/
A chaque ajout de site dans le répertoire /var/www/, il faudra positionner correctement les droits.
Nous utiliserons une base de données la plus simple possible : nous allons créer un simple fichier texte, qui contiendra les couples login/mot-de-passe. A l'aide de db6.0-util, nous transformerons ce fichier en base de données.
Ce fichier contient les noms d'utilisateurs et mots de passe associés. Pensez à changer les droits d'accès à ces fichiers.
Créez le fichier /etc/vsftpd/users.txt :
sudo touch /etc/vsftpd/users.txt
Ouvrez avec les droits d'administration le fichier /etc/vsftpd/users.txt pour y écrire les noms d'utilisateurs et leurs mots de passe comme ceci :
webmaster@monsite.tld password1 user@monsite.tld password2
Compilons ce fichier texte et changeons les droits de la base de données :
sudo db6.0_load -T -t hash -f /etc/vsftpd/users.txt /etc/vsftpd/users.db sudo chmod 600 /etc/vsftpd/users.*
Vsftpd utilise PAM pour l'authentification.
ouvrez avec les droits d'administration le fichier /etc/pam.d/vsftpd pour remplacer son contenu par :
auth required pam_userdb.so db=/etc/vsftpd/users account required pam_userdb.so db=/etc/vsftpd/users
Il ne reste plus que Vsftpd lui même à configurer.
Sauvegardez les fichiers de configuration :
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.original
Toute l'astuce réside dans la ligne guest-username. On utilise l'utilisateur www-data qui permet au serveur de pouvoir lire les fichiers écrits par vsftpd.
Ouvrez avec les droits d'administration le fichier /etc/vsftpd.conf pour le modifier comme ceci :
# Pas d'accès anonyme, que des utilisateurs locaux anonymous_enable=NO local_enable=YES # Active les utilisateurs virtuels # Vsftpd utilise en fait l'utilisateur www-data guest_enable=YES guest_username=www-data nopriv_user=www-data write_enable=YES # On restreint l'utilisateur à son dossier de connexion chroot_local_user=YES # Utilisation de PAM pour l'authentification pam_service_name=vsftpd # Configuration par utilisateur user_config_dir=/etc/vsftpd/users.conf
La dernière ligne permet d'inclure les fichiers de configuration par utilisateur qui se situent dans le répertoire /etc/vsftpd/users.conf.
Pour chaque utilisateur déclaré dans le fichier users.db, il faut maintenant créer dans le répertoire /etc/vsftpd/users.conf un fichier contenant ses informations.
Par exemple, pour l'utilisateur user@monsite.tld, créez avec les droits d'administration le fichier /etc/vsftpd/users.conf/user@monsite.tld pour y écrire ceci :
anon_world_readable_only=NO local_root=/var/www/site1 write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
Relancez le service SFTPD :
sudo service vsftpd restart
et tentez une connexion ftp :
$ ftp ftp> open 192.168.1.102 Connected to 192.168.1.102. 220 Welcome to blah FTP service. Name (192.168.1.102:server): user1 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
Copiez un fichier via ftp, et vérifier ses droits sur le serveur par :
ls -l /var/www/site1/
Le fichier doit appartenir à l'utilisateur www-data.