[VSFTPD] Configuration utilisateur virtuel

Bonjour à tous,

Je tente de configurer un serveur FTP sur mon VPS (OVH) en Debian 7 (64 bits).

Étant un gros débutant je galère fortement lors de la mise en place.
J’ai procédé à l’installation de vsftpd, avec la configuration par défaut (anonyme) le ftp fonctionne correctement.

Maintenant, je souhaite autoriser un utilisateur virtuel à accéder au répertoire /var/www en lecture/écriture à l’aide d’une table stocker dans une base mysql.

J’édite donc mon fichier vsftpd.conf comme ceci:

# Port d'écoute
listen_port=21

# Banniere de bienvenue
ftpd_banner=Bienvenue sur mon ftp perso

# Fichier de config PAM
pam_service_name=vsftpd

# Mode "standalone"
listen=YES

# Je ne veux pas de connexion anonyme
anonymous_enable=NO

# On autorise les connexions des utilisateurs locaux. C'est indispensable
# pour que les utilisateurs virtuels (mappes sur un utilisateur local)
# puissent se connecter (les "vrais" utilisateurs locaux sont ensuite desactives
# avec le fichier user_list
local_enable=YES

# Fichier de users
userlist_file=/etc/vsftpd/user_list
# Chargement de la liste userlist_file
userlist_enable=YES
# On refuse les utilisateurs de la liste
userlist_deny=YES

# trop restrictif, un utilisateur virtuel pourra ainsi telecharger un fichier meme s'il n'est pas world readable
anon_world_readable_only=NO

# Refus des commandes influant sur le systeme de fichier (STOR, DELE, RNFR, RNTO, MKD, RMD, APPE and SITE)
write_enable=NO

# Refus des droits d'ecriture pour les anonymes (et donc utilisateurs virtuels) par défaut
# les autorisations seront données au cas par cas :
# pas d'upload
anon_upload_enable=NO
# pas de creation de repertoire
anon_mkdir_write_enable=NO
# pas de creation, suppression, renommage de repertoire ...
anon_other_write_enable=NO

# On fait en sorte que les utilisateurs "guest" (non-anonymes) soient mappés sur le compte local "ftp"
guest_enable=YES
guest_username=ftp

# chroot des utilisateurs
chroot_local_user=YES

# Nombre maximum de connexion simultanees
max_clients=50

# Nombre maximum de connexions venant de la meme IP
max_per_ip=4

# Dossier de configuration specifique des utilisateurs
user_config_dir=/etc/vsftpd/vsftpd_user_conf

# On active le log
xferlog_enable=YES

Ensuite je réduis les droits sur le fichier de conf:

chmod 600 /etc/vsftpd/vsftpd.conf

J’installe libpam-mysql, puis je créer une BDD vsftpd dans mysql. Je créé un utilisateur vsftpd avec tous les droits sur la base vsftpd:

Utilisateur 	Client 	   Type 	                       Privilèges 	«Grant»
  vsftpd 	localhost spécifique à cette base de données ALL PRIVILEGES      NON[/code]

Je crée deux tables en SQL:
[code]CREATE TABLE  `vsftpd`.`users` (
`id_user` int(11) NOT NULL auto_increment,
`login` varchar(50) NOT NULL,
`password` varchar(100) NOT NULL,
`active` int(11) NOT NULL,
PRIMARY KEY  (`id_user`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

CREATE TABLE  `vsftpd`.`log` (
`id_log` int(11) NOT NULL auto_increment,
`login` varchar(50) NOT NULL,
`message` varchar(200) NOT NULL,
`pid` varchar(10) NOT NULL,
`host` varchar(30) NOT NULL,
`time` datetime default NULL,
PRIMARY KEY  (`id_log`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;[/code]
puis je crée un utilisateur clark17:
[code]INSERT INTO vsftpd.users (login,password,active) VALUES('clark17',md5('toto'),1)[/code]

Ensuite, j'édite le fichier /etc/pam.d/vsftpd comme ceci:
[code]#%PAM-1.0
auth sufficient pam_unix.so
account sufficient pam_unix.so
auth required /lib/security/pam_mysql.so verbose=0 user=vsftpd passwd=toto host=127.0.0.1 db=vsftpd table=users usercolumn=login passwdcolumn=password crypt=3 where=users.active=1 sqllog=yes logtable=log logmsgcolumn=message logusercolumn=login logpidcolumn=pid loghostcolumn=host logtimecolumn=time
account required /lib/security/pam_mysql.so verbose=0 user=vsftpd passwd=toto host=127.0.0.1 db=vsftpd table=users usercolumn=login passwdcolumn=password crypt=3 where=users.active=1 sqllog=yes logtable=log logmsgcolumn=message logusercolumn=login logpidcolumn=pid loghostcolumn=host logtimecolumn=time[/code]

Enfin je crée le fichier /etc/vsftpd/user_list pour exclure les utilisateurs locaux:
[code]root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
proxy
www-data
backup
list
irc
gnats
nobody
libuuid
sshd
inrepublica
postfix
mysql
ftp

Maintenant je tente de me connecter en local avec la commande ftp local host:

root@inrepublica:/etc# ftp localhost ftp: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost.localdomain. 220 Bienvenue sur le serveur ftp inrepublica.fr Name (localhost:inrepublica): clark17 331 Please specify the password. Password: 530 Login incorrect. Login failed.

Et la c’est le drame :119
vsftpd.log:

Sun Oct 6 15:50:37 2013 [pid 21188] CONNECT: Client "127.0.0.1" Sun Oct 6 15:51:00 2013 [pid 21187] [clark17] FAIL LOGIN: Client "127.0.0.1"
auth.log:

Oct  6 15:50:58 inrepublica vsftpd: pam_unix(vsftpd:auth): check pass; user unknown
Oct  6 15:50:58 inrepublica vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=clark17 rhost=127.0.0.1
Oct  6 15:50:58 inrepublica vsftpd: pam_mysql - non-crypt()ish MD5 hash is not supported in this build.
Oct  6 15:50:58 inrepublica vsftpd: pam_mysql - non-crypt()ish MD5 hash is not supported in this build.

Là je suis perdu, je ne comprends pas l’erreur…

Merci de votre aide.

Mise à jour du premier post avec les logs.

Personne pour un petit coup de main?

D’après ce que je comprend, tu associes les utilisateurs au compte local ‘ftp’ mais ce compte est indiqué comme interdit dans le user_list.
D’ailleurs il vaudrait peut-être mieux mettre userlist_deny=NO et mettre juste les utilisateurs autorisés dans le user_list.

J’ai supprimé l’utilisateur ftp du user_list, mais j’ai toujours la même erreur…
Ce que je ne pige pas ce sont les lignes dans le auth.log:

Oct 14 10:55:10 inrepublica vsftpd: pam_unix(vsftpd:auth): check pass; user unknown Oct 14 10:55:10 inrepublica vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=clark17 rhost=127.0.0.1
Si l’identification passe par pam_mysql pourquoi j’ai un utilisateur vsftpd qui tente de se connecter en pam_unix???

Merci de ton aide.

Peut-être à cause des lignes de /etc/pam.d/vsftpd :

auth sufficient pam_unix.so account sufficient pam_unix.so

Sinon en vrac comme ça

  • c’est le même mot de passe (toto) pour ‘clark17’ et pour ‘vsftp’ ?
  • l’utilisateur ftp existe bien sur ta machine ?

si le md5 pose problème, tu peux essayer avec encrytp(“toto”) à la place (et ‘crypt=1’ dans /etc/pam.d/vsftpd)