Authentication data on MySQL

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Authentification vsftpd — backend MySQL
Paquets vsftpd · libpam-mysql
PAM /etc/pam.d/vsftpd (module pam_mysql.so)
Config /etc/vsftpd.conf
Voir aussi Vsftpd (Debian) · Vsftpd

Configuration de vsftpd avec des utilisateurs virtuels authentifiés contre une base MySQL plutôt que des comptes système, via le module PAM pam_mysql. Les identifiants ci-dessous (ftpuser, mots de passe) sont des exemples génériques à remplacer par des valeurs propres à chaque déploiement.

Installation

apt-get install vsftpd libpam-mysql

Base et table des utilisateurs FTP

CREATE DATABASE ftpd;
USE ftpd;

CREATE TABLE users (
  username varchar(30) NOT NULL,
  password varchar(50) NOT NULL,
  PRIMARY KEY (username)
) TYPE=MyISAM;

-- ajout d'un utilisateur virtuel (mot de passe hashé par la fonction MySQL PASSWORD())
INSERT INTO users (username, password) VALUES ('ftpuser', PASSWORD('<mot_de_passe_utilisateur>'));

-- compte technique utilisé par pam_mysql pour lire la table (droit SELECT uniquement)
GRANT SELECT ON ftpd.users TO vsftpd@localhost IDENTIFIED BY '<mot_de_passe_technique>';

TYPE=MyISAM est l'ancienne syntaxe MySQL (remplacée par ENGINE=MyISAM sur les versions récentes) — (à vérifier selon version, InnoDB convient tout aussi bien pour cet usage).

Configuration /etc/vsftpd.conf

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=vsftpd
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem

# utilisateurs virtuels
virtual_use_local_privs=YES
guest_enable=YES
guest_username=vsftpd
user_sub_token=$USER
local_root=/srv/ftp/$USER
chroot_local_user=YES
hide_ids=YES

Authentification PAM

# /etc/pam.d/vsftpd
auth    required pam_mysql.so user=vsftpd passwd=<mot_de_passe_technique> host=localhost db=ftpd table=users usercolumn=username passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=<mot_de_passe_technique> host=localhost db=ftpd table=users usercolumn=username passwdcolumn=password crypt=2

Utilisateur système « guest » et répertoire

guest_enable=YES fait passer tous les utilisateurs virtuels par les droits Unix d'un seul compte système « guest » (ici vsftpd), qui doit exister mais n'a pas besoin de mot de passe utilisable en connexion directe :

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

mkdir /srv/ftp/ftpuser
chown vsftpd:nogroup /srv/ftp/ftpuser/

Démarrage

service vsftpd restart

Voir aussi