{{tag>tutoriel}}
====== VSFTPd sur chateau ======
===== Pré-requis =====
===== Première étape =====
- **Installez les paquets** :...@...:~$ sudo apt update
...@...:~$ sudo apt install vsftpd db-util ftp
- **Vérifiez avec le programme ftp** :...@...:~$ ftp localhost
Connected to localhost.
220 (vsFTPd 3.0.3)
Name (localhost:xxxx):
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.
- **2e vérification depuis un PC du réseau** : en vous connectant avec un logiciel comme **FileZilla** avec un **user/password** de la machine,
* vous pouvez :
* vous déplacer dans toute la machine serveur, y compris la racine
* télécharger un fichier depuis le serveur
* mais pas :
* y écrire ou téléverser un fichier
* ni créer un répertoire
* ni effacer un fichier ou un répertoire
* __L'installation de vsftpd__ a créé l'utilisateur **ftp**, dont le home est **/srv/ftp** et le groupe **ftp**:...@...:~$ cat /etc/passwd | grep ftp
ftp:x:117:124:ftp daemon,,,:/srv/ftp:/usr/sbin/nologin
* Si ce n'est pas le cas, créez-les :...@...:~$ sudo groupadd ftp
* Si l'utilisateur ftp existe, vous pouvez lui donner comme home le répertoire de base du serveur ftp :...@...:~$ sudo usermod -d /ftp ftp
* __Et l'installation d'un serveur HTTP__ crée l'utilisateur **www-data**, dont le home est **/var/www**:...@...:~$ cat /etc/passwd | grep www-data
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
===== Autres étapes =====
===== Répertoires et sauvegarde =====
~~ol:hierarchical~~
- **Créez le répertoire /etc/vsftpd/user_conf et le fichier /etc/vsftpd/user_list** :...@...:~$ sudo mkdir -p /etc/vsftpd/user_conf
...@...:~$ sudo touch /etc/vsftpd/user_list
- **Sauvegardez les fichiers de configuration originaux** :...@...:~$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.dist
...@...:~$ sudo cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.distPour revenir au départ en cas de problème, il suffira de faire l'inverse :...@...:~$ sudo cp /etc/vsftpd.conf.dist /etc/vsftpd.conf
...@...:~$ sudo cp /etc/pam.d/vsftpd.dist /etc/pam.d/vsftpd
===== Racine du serveur =====
Créez un emplacement pour la racine du serveur :
~~ol:hierarchical~~
- **Créez le répertoire /srv/ftp** :...@...:~$ sudo mkdir -p /srv/ftp
- **Éditez** avec les droits d'administration le fichier **/etc/fstab** pour ajouter la ligne :/srv /srv none bind 0 0
- **Montez /srv** :...@...:~$ sudo mount /srv
===== Configuration =====
**Éditez avec les droits d'administration le fichier /etc/vsftpd.conf** pour ajouter à la fin les réglages par défaut :
...
########## Paramètres personnalisés ##########
ftpd_banner=Bienvenue sur le serveur FTP de ...
# Activation des utilisateurs virtuels
guest_enable=YES
# nom de l'utilisateur (www-data) sous lequel ils vont fonctionner
# tous les utilisateurs virtuels -> utilisateur www-data avec son home
ftp_username=www-data
guest_username=www-data
nopriv_user=www-data
# Fichier de config PAM
pam_service_name=vsftpd
# Pas d'accès anonyme, que des utilisateurs locaux
# (dont les utilisateurs virtuels, mappés sur un utilisateur local)
# les vrais utilisateurs locaux sont désactivés avec le fichier user_list
anonymous_enable=NO
local_enable=YES
# On refuse les utilisateurs du fichier /etc/vsftpd.user_list
# un utilisateur par ligne
#userlist_enable=YES
#userlist_deny=NO
#userlist_file=/etc/vsftpd/user_list
# Les utilisateurs locaux restent chez eux
chroot_local_user=YES
allow_writeable_chroot=YES
# Interdiction de toute action d'écriture :
# On spécifiera les droits utilisateur par utilisateur.
write_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_upload_enable=NO
anon_world_readable_only=NO
# droits par défaut des fichiers uploadés
anon_umask=002
# Autoriser les utilisateurs locaux
# à changer les permissions des fichiers
chmod_enable=YES
virtual_use_local_privs=YES
# On n’autorise pas les utilisateurs à se faire passer pour d’autres
chown_uploads=NO
chown_username=nobody
# Cacher les informations sur le propriétaire des fichiers (utilisateur et groupe)
hide_ids=YES
# Activation de la configuration utilisateur par utilisateur
user_config_dir=/etc/vsftpd/user_conf
===== Utilisateurs virtuels =====
~~ol:hierarchical~~
- **Créez les utilisateurs virtuels** (ici, trois) :
- **Éditez avec les droits d'administration le fichier /etc/vsftpd/login.txt** pour y écrire les noms et mots de passe des utilisateurs virtuels (2 lignes pour chaque utilisateur) :
admin
MotDePasseAdmin
user
MotDePasseUser
admiweb
MotDePasseAdmiweb
N'oubliez pas une ligne vide à la fin.
- **Créez la base de données** :...@...:~$ sudo db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
- **Protégez ces fichiers contre une intrusion** :...@...:~$ sudo chmod 600 /etc/vsftpd/login.*
- **Éditez avec les droits d'administration le fichier /etc/pam.d/vsftpd** et remplacez son contenu par :
auth required pam_userdb.so db=/etc/vsftpd/login
account required pam_userdb.so db=/etc/vsftpd/login
- **Redémarrez** le serveur :...@...:~$ sudo systemctl restart vsftpd.service
- **Vérification** :
* USER ne peut plus se connecter :...@...:~$ ftp localhost
Connected to localhost.
220 Bienvenue sur le serveur FTP de xxx
Name (localhost:user):
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> bye
221 Goodbye.
* mais admiweb le peut :ftp localhost
Connected to localhost.
220 Bienvenue sur le serveur FTP de xxx
Name (localhost:user): admiweb
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.
===== Personnalisation par utilisateur =====
Voici trois exemples. Personnalisez pour chaque utilisateur en créant les fichiers :
- **admin** (presque tous les droits) :
# Racine
local_root=/srv
# Lecture autorisée
download_enable=YES
anon_world_readable_only=NO
# Écriture autorisée
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
# Renommage et suppression autorisés
anon_other_write_enable=YES
# changement des droits autorisé
chmod_enable=YES
virtual_use_local_privs=YES
# Définit à qui appartiendront les fichiers téléversés
guest_username=pi
# Affichage des fichiers cachés
# (important pour les fichiers htaccess)
force_dot_files=YES
# masque local (002 -> droits 775)
local_umask=002
anon_umask=002
- **user** (quasiment aucun droit) :
local_root=/srv/ftp/user
- **admiweb** (adapté pour un serveur web) :
# Racine
local_root=/srv/www/html
# Lecture autorisée
download_enable=YES
anon_world_readable_only=NO
# Écriture (upload) autorisée
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
# Renommage et suppression autorisés
anon_other_write_enable=YES
# changement des droits autorisé
chmod_enable=YES
virtual_use_local_privs=YES
# Définit à qui appartiendront les fichiers téléversés
guest_username=www-data
chown_uploads=YES
chown_username=www-data
# Affichage des fichiers cachés
# (important pour les fichiers htaccess)
force_dot_files=YES
# masque local (002 -> droits 775)
file_open_mode=0777
local_umask=002
anon_umask=002
===== Conclusion =====
===== Problèmes connus =====
===== Voir aussi =====
* **(en)** [[http://]]
* **(fr)** [[http://]]
----
//Basé sur << [[http://|ARTICLE]] >> par AUTEUR.//