Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
sysadmin:vsftpd_virtual [2012/10/17 14:48]
james créée
sysadmin:vsftpd_virtual [2013/11/20 18:07] (Version actuelle)
james ajout tags
Ligne 1: Ligne 1:
 +{{tag>​sysadmin serveur ftp vsftpd utilisateur virtuel chroot installation howto}}
 +
 ====== Installer un serveur FTP avec utilisateurs virtuels ====== ====== Installer un serveur FTP avec utilisateurs virtuels ======
  
Ligne 8: Ligne 10:
   * ne pas autoriser les utilisateurs locaux au système   * ne pas autoriser les utilisateurs locaux au système
   * autoriser des utilisateurs virtuels   * autoriser des utilisateurs virtuels
-  * limiter chaque utilisateur virtuel un répertoire utilisateur (chroot)+  * limiter chaque utilisateur virtuel un répertoire utilisateur (chroot), un meme répertoire pouvant être commun a plusieurs personnes
   * Etre accessible en IPv6 et IPv4   * Etre accessible en IPv6 et IPv4
 +  * Les utilisateurs pourront déposer des fichiers (écrire)
  
-====== Installation initiale ​======+===== Installation initiale =====
  
 L'​installation se limite à : <​code>#​ apt-get install vsftpd</​code>​ L'​installation se limite à : <​code>#​ apt-get install vsftpd</​code>​
Ligne 19: Ligne 22:
 </​code>​ </​code>​
  
-====== Configuration initiale ​======+===== Configuration initiale =====
 La configuration s'​effectue dans le fichier /​etc/​vsftpd.conf : La configuration s'​effectue dans le fichier /​etc/​vsftpd.conf :
   * Écouter en IPv6 : pour que vsftpd écoute en IPv6 il est faut en aussi commenter "​listen=YES",​ il va alors écouter en IPv4 et IPv6 :<​code>​   * Écouter en IPv6 : pour que vsftpd écoute en IPv6 il est faut en aussi commenter "​listen=YES",​ il va alors écouter en IPv4 et IPv6 :<​code>​
Ligne 31: Ligne 34:
 # sed -i -e "​s/​^connect_from_port_20=YES/#​connect_from_port_20=YES</​code>​ # sed -i -e "​s/​^connect_from_port_20=YES/#​connect_from_port_20=YES</​code>​
 <​note>​Cette option est désactivée par defaut, mais activée dans le fichier de configuration par fourni par défaut.</​note>​ <​note>​Cette option est désactivée par defaut, mais activée dans le fichier de configuration par fourni par défaut.</​note>​
-  * ajouter a la fin :<​code>​+  * ajouter a la fin du fichier /​etc/​vsftpd.conf ​:<​code>​
 # limitation du nombres de connexions totales/par IP # limitation du nombres de connexions totales/par IP
 max_clients=15 max_clients=15
Ligne 43: Ligne 46:
 # attention n'​importe quel utilisateur systeme local pourra donc obtenir la liste des utilisateurs FTP connectés # attention n'​importe quel utilisateur systeme local pourra donc obtenir la liste des utilisateurs FTP connectés
 setproctitle_enable=YES setproctitle_enable=YES
 +
 +# modifier le message de bienvenue
 +ftpd_banner=Bienvenue sur mon serveur a moi
  
 # les fichiers ecrits auront les droits 775 # les fichiers ecrits auront les droits 775
Ligne 51: Ligne 57:
  
 # configuration utilisateurs virtuels # configuration utilisateurs virtuels
 +# si guest_enable est active, tous les logins non anonymes sont classes en tant que '​guest'​
 guest_enable=YES guest_enable=YES
-guest_username=virtual+local_enable=YES 
 +# utilisateur réel auquel tous les utilisateurs '​guest'​ sont associés 
 +guest_username=ftp 
 # permettre aux utilisateurs virtuels d'​avoir les droits d'​utilisateurs locaux (vs anonymes) leur permettant donc d'​ecrire # permettre aux utilisateurs virtuels d'​avoir les droits d'​utilisateurs locaux (vs anonymes) leur permettant donc d'​ecrire
 virtual_use_local_privs=YES virtual_use_local_privs=YES
Ligne 58: Ligne 68:
  
 # configuration du mode passif (utile pour limiter l'​ouverture de la fenetre des firewalls, ici les ports 48152 à 49192) # configuration du mode passif (utile pour limiter l'​ouverture de la fenetre des firewalls, ici les ports 48152 à 49192)
-#​pasv_enable=YES valeur par defaut+#​pasv_enable=YES ​#valeur par defaut
 pasv_enable=YES pasv_enable=YES
 pasv_min_port=48152 pasv_min_port=48152
Ligne 64: Ligne 74:
 </​code>​ </​code>​
  
-====== Configuration ​initiale ​====== +===== Configuration des utilisateurs virtuels ===== 
-Ajout des utilisateurs virtuels - TODO+ 
 +Pour gérer les utilisateurs virtuels, deux méthodes s'​offrent a vous : 
 +  - utiliser une base Berkeley DB pour stocker les utilisateurs/​mots de passe : 
 +    * inconvénient : il faut stocker la liste des utilisateurs/​mots de passe en clair dans un fichier, et relancer la génération de la base a chaque ajout/​suppression d'​utilisateur 
 +    * avantages:  
 +      * peut etre les performances ? (pas sur et dans le cas qui nous intéresse avec un nombre d'​utilisateurs virtuels réduit on s'en fout ;-) ) 
 +      * Les mots de passe étants stockés en clair on peur redonner son mot de passe a un utilisateur (est-ce vraiment un avantage de stocker ça en clair ? ;-) ) 
 +  -  utiliser un fichier htpassword (format similaire au htpasswd apache) 
 +    * avantage : pas besoin de "​regénérer"​ une base de donnée après l'​ajout d'un nouvel utilisateur (il faudra cependant toujours déclarer tout nouvel utilisateur pour lui définir son chroot) 
 +    * inconvénients :  
 +      * peut être les perfs, mais la encore pas sur et puis .... 
 +      * on ne peut redonner le mot de passe a quelqu'​un,​ mais on peut toujours le remplacer par un nouveau 
 + 
 +J'ai choisi d'​utiliser un fichier au format htpassword, choisissez la méthode que vous voulez. 
 + 
 +==== Gestion des utilisateurs virtuels htpasswd ==== 
 + 
 +Si vous souhaitez utiliser un fichier htpasswd pour gérer vos utilisatuers virtuels (solution conseillée) : 
 + 
 +=== Installation des logiciels requis === 
 + 
 +<​code>#​ apt-get install apache2-utils libpam-pwdfile</​code>​ 
 + 
 +=== Création de la base et du premier utilisateur === 
 + 
 +Nous allons stocker les mots de passe au format <​del>​md5 (option -m)</​del>​ crypt (option -d) voir note plus bas. 
 + 
 +Pour créer le fichier :<​code>​ 
 +# htpasswd -d -c /​etc/​vsftpd/​passwd utilisateur1</​code>​ 
 +Cette commande vous demande alors le mot de passe a affecter. Vous auriez cependant pu le spécifier sur la ligne de commande en utilisant à la place la commande <​code>​ 
 +# htpasswd -d -b -c /​etc/​vsftpd/​passwd utilisateur1 motdepasse1</​code>​ 
 + 
 +Ne pas oublier de restreindre les droits d'​accès à ce fichier :<​code>​ 
 +# chown root:root /​etc/​vsftpd/​passwd 
 +# chmod 600 /​etc/​vsftpd/​passwd 
 +</​code>​ 
 + 
 +=== Opérations courantes sur les utilisateurs === 
 + 
 +  * Pour ajouter un nouvel utilisateur avec demande de mot de passe :<​code>​ 
 +# htpasswd -d /​etc/​vsftpd/​passwd utilisateur2</​code>​ 
 +  * Pour ajouter un nouvel utilisateur en spécifiant le mot de passe sur la ligne de commande:<​code>​ 
 +# htpasswd -d -b /​etc/​vsftpd/​passwd utilisateur2 motdepasse2</​code>​ 
 +  * Pour supprimer l'​utilisateur utilisateur1:<​code>​ 
 +# htpasswd -D /​etc/​vsftpd/​passwd utilisateur1</​code>​ 
 +<​note>​Les commandes d'​ajout fonctionnent aussi pour mettre à jour le mot de passe de l'​utilisateur concerné</​note>​ 
 + 
 +=== Configuration ​du login des utilisateurs virtuels FTP === 
 + 
 +Cette configuration s'​effectue dans le fichier /​etc/​pam.d/​vsftpd . Utilisez la commande suivante pour remplacer son contenu actuel :<​code>​ 
 +# cat << EOF > /​etc/​pam.d/​vsftpd 
 +# interdire le login des utilisateurs systeme definis dans le fichier /​etc/​ftpusers 
 +auth       ​required ​       pam_listfile.so item=user sense=deny file=/​etc/​ftpusers onerr=succeed 
 + 
 +# autoriser les utilisateurs virtuels 
 +auth    required ​   pam_pwdfile.so pwdfile /​etc/​vsftpd/​passwd 
 +# pam_pwdfile ne fourni pas account, donc on autorise juste si succes: 
 +account required ​   pam_permit.so 
 +EOF 
 +</​code>​ 
 + 
 +<note important>​L'​utilisation de mots de passe md5 ne fonctionne plus, il faut donc utiliser crypt qui était le format par défaut de htpasswd mais qui ne l'est plus, d’où l'​utilisation de l'​option -b pour forcer "au cas où"​...</​note>​ 
 +<​note>​de part le stockage des mots de passe en crypt, seuls les 8 premiers caractères des mots de passe seront réellement utilisés, attention a choisir des mots de passe suffisamment robustes sur les 8 premiers caractères</​note>​ 
 + 
 +Vous pouvez maintenant sauter la section suivante pour aller directement à "​Gestion des droits ​des utilisateurs virtuels
 +==== Gestion des utilisateurs virtuels Berkeley DB ==== 
 + 
 +Si vous avez choisi d'​utiliser une base Berkeley DB pour stocker les utilisateurs virtuels : 
 + 
 +=== Installation des logiciels requis === 
 +<​code>​ # apt-get install db4.2-util</​code>​ 
 +<​note>​ cela fonctionne aussi sûrement avec des versions plus récentes, comme par exemple db4.7-util, adaptez au besoin la suite</​note>​ 
 + 
 +=== Création de la base et des premiers utilisateurs === 
 +On commence par créer un fichier vide qui contiendra les utilisateurs et mot de passe avec des permissions restreintes :<​code>​ 
 +# touch /​etc/​vsftpd/​users 
 +# chown root:root /​etc/​vsftpd/​users 
 +# chmod 600 /​etc/​vsftpd/​users</​code>​ 
 + 
 +On peut ensuite ajouter chaque utilisateur dans ce fichier, en alternant les lignes login/mot de passe comme suit :<​code>​ 
 +utilisateur1 
 +motdepasse1 
 +utilisateur2 
 +motdepasse2 
 +</​code>​ 
 + 
 +=== Génération de la base Berkeley DB === 
 + 
 +Pour générer la base BDB il faut utiliser la commande suivante pour générer le fichier "/​etc/​vsftpd/​users.db"​ depuis le fichier plat "/​etc/​vsftpd/​users"​ : <​code>​ 
 +# db4.2_load -T -t hash -f /​etc/​vsftpd/​users /​etc/​vsftpd/​users.db</​code>​ 
 +Penser a sécuriser aussi ce fichier :<​code>​ 
 +# chown root:root /​etc/​vsftpd/​users.db 
 +# chmod 600 /​etc/​vsftpd/​users.db</​code>​ 
 + 
 +Idéalement on stockera cette commande de génération dans un petit script comme par exemple dans le fichier /​usr/​local/​sbin/​regenerer_vsftpd_DB.sh . 
 + 
 +<note important>​ 
 +  * il faudra donc générer a nouveau cette base a chaque ajout/​suppression d'​utilisateur 
 +  * lors de la suppression d'un utilisateur,​ ne pas oublier qu'il faut enlever 2 lignes du fichier texte : celle de l'​utilisateur mais aussi celle du mot de passe 
 +</​note>​ 
 + 
 +=== Configuration du login des utilisateurs virtuels FTP === 
 + 
 +Cette configuration s'​effectue dans le fichier /​etc/​pam.d/​vsftpd . Utilisez la commande suivante pour remplacer le contenu :<​code>​ 
 +# cat << EOF > /​etc/​pam.d/​vsftpd 
 +# interdire le login des utilisateurs systeme definis dans le fichier /​etc/​ftpusers 
 +auth       ​required ​       pam_listfile.so item=user sense=deny file=/​etc/​ftpusers onerr=succeed 
 +     
 +# autoriser les utilisateurs virtuels 
 +auth       ​required ​       pam_userdb.so db=/​etc/​vsftpd/​users 
 +account ​   required ​       pam_userdb.so db=/​etc/​vsftpd/​users 
 +session ​   required ​       pam_loginuid.so 
 + 
 +EOF 
 +</​code>​ 
 +<​note>​Cela va bien utiliser la base /​etc/​vsftpd/​users.db,​ le suffixe .db sera ajouté automatiquement</​note>​ 
 + 
 + 
 +===== Gestion des droits des utilisateurs virtuels ===== 
 + 
 +Dans la configuration initiale, nous avons défini un répertoire pour y stocker les droits des utilisateurs,​ il faut donc le créer : 
 +<​code>#​ mkdir /​etc/​vsftpd/​user_conf</​code>​ 
 + 
 +On peut ensuite définir des options propres à chaque utilisateur en déposant des fichiers dans ce répertoire,​ par exemple pour dire que l'​utilisateur utilisateur2 aura comme répertoire de base /​export/​ftp/​partage1 mais n'aura pas le droit d'​écrire,​ créer un fichier /​etc/​vsftpd/​user_conf/​utilisateur2 avec le contenu suivant :<​code>​ 
 +write_enable=no 
 +local_root=/​export/​ftp/​partage1</​code>​ 
 +<​note>​On peut spécifier dans ce fichier utilisateur les directives de configuration que l'on peut trouver dans le fichier /​etc/​vsftpd.conf</​note>​ 
 +<​note>​On pourrait affecter un répertoire "par défaut"​ pour chaque utilisateur (/​var/​www/​$LOGIN) en ajoutant dans le fichier de configuration globale /​etc/​vsftpd.conf les lignes suivantes :<​code>​ 
 +user_sub_token=$USER 
 +local_root=/​var/​www/​$USER</​code>​ 
 +</​note>​ 
 +===== Pour aller plus loin ===== 
 + 
 +==== Chiffrement des communications avec SSL ==== 
 +TODO
  
-====== Références ​======+===== Références =====
   * http://​www.debiantutorials.com/​installing-vsftpd-using-text-file-for-virtual-users/​   * http://​www.debiantutorials.com/​installing-vsftpd-using-text-file-for-virtual-users/​
   * http://​blog.pastoutafait.org/​billets/​Configuration-de-VsFTPd-sous-Ubuntu   * http://​blog.pastoutafait.org/​billets/​Configuration-de-VsFTPd-sous-Ubuntu
   * http://​www.admin-debian.com/​ftp/​vsftpd-un-serveur-ftp-hautement-securise/​   * http://​www.admin-debian.com/​ftp/​vsftpd-un-serveur-ftp-hautement-securise/​
  
sysadmin/vsftpd_virtual.1350478136.txt.gz · Dernière modification: 2012/10/17 14:48 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0