Table des matières

, , , , , , , ,

Installer un serveur FTP avec utilisateurs virtuels

On va installer un serveur FTP gérant les utilisateurs virtuels, pour ce faire on utilisera vsFTPd.

Le configuration se fera comme d'habitude sur un serveur debian stable (squeeze).

Le cahier des charges :

Installation initiale

L'installation se limite à :

# apt-get install vsftpd

Par défaut le serveur FTP démarre, et autorise les connexions anonymes, nous allons donc le couper le temps de le configurer :

# /etc/init.d/vsftpd stop

Configuration initiale

La configuration s'effectue dans le fichier /etc/vsftpd.conf :

Cette option est désactivée par defaut, mais activée dans le fichier de configuration par fourni par défaut.

Configuration des utilisateurs virtuels

Pour gérer les utilisateurs virtuels, deux méthodes s'offrent a vous :

  1. 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 ? ;-) )
  2. 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

# apt-get install apache2-utils libpam-pwdfile

Création de la base et du premier utilisateur

Nous allons stocker les mots de passe au format md5 (option -m) crypt (option -d) voir note plus bas.

Pour créer le fichier :

# htpasswd -d -c /etc/vsftpd/passwd utilisateur1

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

# htpasswd -d -b -c /etc/vsftpd/passwd utilisateur1 motdepasse1

Ne pas oublier de restreindre les droits d'accès à ce fichier :

# chown root:root /etc/vsftpd/passwd
# chmod 600 /etc/vsftpd/passwd

Opérations courantes sur les utilisateurs

Les commandes d'ajout fonctionnent aussi pour mettre à jour le mot de passe de l'utilisateur concerné

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 :

# 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
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ù”…
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

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

 # apt-get install db4.2-util
cela fonctionne aussi sûrement avec des versions plus récentes, comme par exemple db4.7-util, adaptez au besoin la suite

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 :

# touch /etc/vsftpd/users
# chown root:root /etc/vsftpd/users
# chmod 600 /etc/vsftpd/users

On peut ensuite ajouter chaque utilisateur dans ce fichier, en alternant les lignes login/mot de passe comme suit :

utilisateur1
motdepasse1
utilisateur2
motdepasse2

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” :

# db4.2_load -T -t hash -f /etc/vsftpd/users /etc/vsftpd/users.db

Penser a sécuriser aussi ce fichier :

# chown root:root /etc/vsftpd/users.db
# chmod 600 /etc/vsftpd/users.db

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 .

  • 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

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 :

# 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
Cela va bien utiliser la base /etc/vsftpd/users.db, le suffixe .db sera ajouté automatiquement

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 :

# mkdir /etc/vsftpd/user_conf

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 :

write_enable=no
local_root=/export/ftp/partage1
On peut spécifier dans ce fichier utilisateur les directives de configuration que l'on peut trouver dans le fichier /etc/vsftpd.conf
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 :
user_sub_token=$USER
local_root=/var/www/$USER

Pour aller plus loin

Chiffrement des communications avec SSL

TODO

Références