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 :
- ne pas autoriser les utilisateurs locaux au système
- autoriser des utilisateurs virtuels
- 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
- Les utilisateurs pourront déposer des fichiers (écrire)
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 :
- É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 :
# sed -i -e "s/^listen=YES/#listen=YES/" /etc/vsftpd.conf # sed -i -e "s/^#listen_ipv6=YES/listen_ipv6=YES/" /etc/vsftpd.conf
- Empêcher les connexion anonymes :
# sed -i -e "s/^anonymous_enable=YES/anonymous_enable=NO/" /etc/vsftpd.conf
- Autoriser l’écriture pour les utilisateurs (virtuels) :
# sed -i -e "s/^#write_enable=YES/write_enable=YES/" /etc/vsftpd.conf
- désactiver le forçage du port 20 pour les connexions de données (permet a vsftpd de tourner avec un peu moins de privilèges) :
# sed -i -e "s/^connect_from_port_20=YES/#connect_from_port_20=YES
- ajouter a la fin du fichier /etc/vsftpd.conf :
# limitation du nombres de connexions totales/par IP max_clients=15 max_per_ip=4 # On indique que tout les utilisateurs sont limités à leurs propres repertoires chroot_local_user=YES chroot_list_enable=NO # pour voir la liste des utilisateur connectés avec : ps -aef | grep vsftpd # attention n'importe quel utilisateur systeme local pourra donc obtenir la liste des utilisateurs FTP connectés setproctitle_enable=YES # modifier le message de bienvenue ftpd_banner=Bienvenue sur mon serveur a moi # les fichiers ecrits auront les droits 775 local_umask=002 # définir le répertoire contenant les fichiers de configuration utilisateurs : user_config_dir=/etc/vsftpd/user_conf # configuration utilisateurs virtuels # si guest_enable est active, tous les logins non anonymes sont classes en tant que 'guest' guest_enable=YES 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 virtual_use_local_privs=YES hide_ids=YES # 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 pasv_min_port=48152 pasv_max_port=49192
Configuration des utilisateurs virtuels
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
# 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
- Pour ajouter un nouvel utilisateur avec demande de mot de passe :
# htpasswd -d /etc/vsftpd/passwd utilisateur2
- Pour ajouter un nouvel utilisateur en spécifiant le mot de passe sur la ligne de commande:
# htpasswd -d -b /etc/vsftpd/passwd utilisateur2 motdepasse2
- Pour supprimer l'utilisateur utilisateur1:
# htpasswd -D /etc/vsftpd/passwd utilisateur1
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
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
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
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
user_sub_token=$USER local_root=/var/www/$USER
Pour aller plus loin
Chiffrement des communications avec SSL
TODO