Si vous utilisez l’excellent serveur FTP Vsftpd (serveur FTP léger et efficace écrit pour la sécurité …) et que vous uploadez les sources de votre CMS (WordPress ou Joomla par exemple), vous risquez rapidement d’avoir des problèmes d’écriture. En effet, le serveur Web (Apache) est exécuté avec l’utilisateur www-data. Et donc, comme vous avez uploadé vos fichiers avec un utilisateur FTP, votre CMS ne parvient pas à écrire dans certain dossiers ou bien même à écraser certain fichiers (en cas de mise à jour du CMS via le backoffice par exemple) avec le fameux “permission denied” …
Afin de palier à ce problème, il convient de “chrooter” l’utilisateur FTP afin qu’il puisse uploader avec les droits de l’utilisateur www-data. Ainsi, aussi bien en FTP que via le CMS, le propriétaire restera toujours www-data.
Chrooter l’utilisateur FTP en www-data
On part du principe que vous avez déjà installé le serveur FTP Vsftp sur votre serveur. Modifiez la configuration du fichier de configuration /etc/vsftpd.conf :
listen=YES
anonymous_enable=NO
local_enable=YES
virtual_use_local_privs=YES
write_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
guest_enable=YES
ftp_username=www-data
chmod_enable=YES
chown_uploads=YES
chown_username=www-data
guest_username=www-data
force_dot_files=YES
pasv_enable=YES
pasv_promiscuous=YES
pasv_min_port=1024
pasv_max_port=65535
max_clients=10
max_per_ip=10
port_promiscuous=YES
port_enable=YES
listen_port=21988
ftp_data_port=20
user_sub_token=$USER
hide_ids=YES
user_config_dir=/etc/vsftpd
chroot_local_user=YES
allow_writeable_chroot=YES
log_ftp_protocol=YES
vsftpd_log_file=/var/log/vsftpd.log
Ainsi on a déterminé que nous souhaitons que le propriétaire des fichiers uploadés soit www-data.
On a également spécifié le chemin de configuration des utilisateurs FTP user_config_dir=/etc/vsftpd
Notez au passage, que pour des raisons de sécurité, il convient de modifier le port d’écoute par défaut du serveur FTP (21) par un autre (ici 21988).Cela évite, en effet, que le serveur se fasse bêtement scanner et/ou attaquer en force brute sur le port 21.
Autre point important dans cette configuration, nous utilisons le mode ‘passif‘. Le mode passif est recommandé dans le cas où un pare-feu (firewall) filtre votre réseau. L’avantage de ce mode est que votre serveur FTP n’initialise aucune connexion FTP.
pasv_enable=YES
Créer le dossier et le fichier de config de l’utilisateur FTP
Il convient de créer le dossier /etc/vsftpd comme précédemment spécifié
$ mkdir /etc/vsftpd
Via la commande adduser, il faut créer en amont, l’utilisateur UNIX ‘wpsite‘ (et donc l’utilisateur FTP) :
$ adduser wpsite
Puis il faut créer le fichier portant le même nom que votre utilisateur FTP. Dans l’exemple, l’utilisateur s’appelle ‘wpsite‘
$ nano /etc/vsftpd/wpsite
Enfin, il reste a spécifier dans le fichier de l’utilisateur le chemin ou se trouve votre CMS (exemple : /var/www/html) :
local_root=/var/www/html
Pour terminer, il faut redémarrer le serveur Vsftpd afin que la nouvelle configuration soit prise en compte :
$ service vsftpd restart