{{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.//