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 :
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
La configuration s'effectue dans le fichier /etc/vsftpd.conf :
# sed -i -e "s/^listen=YES/#listen=YES/" /etc/vsftpd.conf # sed -i -e "s/^#listen_ipv6=YES/listen_ipv6=YES/" /etc/vsftpd.conf
# sed -i -e "s/^anonymous_enable=YES/anonymous_enable=NO/" /etc/vsftpd.conf
# sed -i -e "s/^#write_enable=YES/write_enable=YES/" /etc/vsftpd.conf
# sed -i -e "s/^connect_from_port_20=YES/#connect_from_port_20=YES
# 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
Pour gérer les utilisateurs virtuels, deux méthodes s'offrent a vous :
J'ai choisi d'utiliser un fichier au format htpassword, choisissez la méthode que vous voulez.
Si vous souhaitez utiliser un fichier htpasswd pour gérer vos utilisatuers virtuels (solution conseillée) :
# apt-get install apache2-utils libpam-pwdfile
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
# htpasswd -d /etc/vsftpd/passwd utilisateur2
# htpasswd -d -b /etc/vsftpd/passwd utilisateur2 motdepasse2
# htpasswd -D /etc/vsftpd/passwd utilisateur1
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”
Si vous avez choisi d'utiliser une base Berkeley DB pour stocker les utilisateurs virtuels :
# apt-get install db4.2-util
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
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 .
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
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
TODO