J'ai utilisé avec succès vsftpd avec des utilisateurs virtuels se connectant avec PAM à ma base de données mysql. Maintenant, j'aimerais automatiser la création de répertoires d'utilisateurs avec une connexion vsftpd réussie.
Voici la configuration /etc/pam.d/vsftpd:
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_mysql.so verbose=1 user=root passwd=mypass host=localhost db=mydb table=mytable usercolumn=username passwdcolumn=password crypt=3
account required pam_mysql.so verbose=1 user=root passwd=mypass host=localhost db=mydb table=mytable usercolumn=username passwdcolumn=password crypt=3
session required pam_mkhomedir.so skel=/home/skel/ umask=0022 debug
L'ajout de pam_mkhomedir montre maintenant qu'il ne peut pas créer le répertoire sans aucun autre message dans aucun journal. Donc, évidemment, cela ne s'applique pas. Y a-t-il autre chose dont j'ai besoin?
Mon /etc/vsftpd/vsftpd.conf:
# No ANONYMOUS users allowed
anonymous_enable=NO
# Allow 'local' users with WRITE permissions (0755)
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=NO
xferlog_enable=YES
connect_from_port_20=YES
# define a unique user on your system which the
# ftp server can use as a totally isolated and unprivileged user.
nopriv_user=vsftpd
chroot_local_user=YES
listen=YES
# here we use the authentication module for vsftpd to check users name and passw
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=YES
# here the vsftpd will allow the 'vsftpd' user to login into '/home/vsftpd/$USER directory
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
download_enable=NO
force_local_data_ssl=NO
force_local_logins_ssl=NO
# PASV - passive ports for FTP
pasv_enable=YES
pasv_min_port=14000
pasv_max_port=14100
J'ai vu un message disant que j'en ai besoin dans mon vsftpd.conf, j'ai donc essayé aussi:
session_support=YES
Mais maintenant, il ne semble plus s'authentifier comme le montrent les journaux:
Mar 24 00:46:16 ip-10-212-239-40 vsftpd[1962]: pam_keyinit(vsftpd:session): Unable to look up user "user1"
Mar 24 00:46:16 ip-10-212-239-40 vsftpd[1962]: pam_mkhomedir(vsftpd:session): User unknown.
C'est même si j'ai déjà créé le répertoire. Maintenant, personne ne peut entrer.
Des idées?
Réponses:
Pour que les recherches d'utilisateurs par module PAM réussissent, vous devez activer le module NSS pour MySQL dans
nsswitch.conf(5)
.nss_mysql
est votre ami.la source
nss-mysql
dans mon contexte?pam_mkhomedir
va comprendre le chemin vers le répertoire personnel de l'utilisateur qu'il est censé créer? Comment sait-il quelle base de données utiliser pour résoudre l'utilisateur? NSS lui fournit ces informations. Dans votre cas, vous aurez besoin de nss_mysql , en supposant que votre base de données utilisateur est stockée dans une base de données MySQL.nss_mysql
, par exemple Debian et ses dérivés le fournissent en tant quelibnss-mysql
. Et, oui, il n'est pas mis à jour depuis une demi-décennie, mais cela fonctionne bien. Une fois le module installé, configuré et ajouté à votrensswitch.conf(5)
, les choses commenceront à fonctionner pour vous.Vous pouvez essayer d'utiliser
pam_script
- c'est un module pam qui permet d'exécuter des scripts shell arbitraires après l'ouverture d'une session utilisateur (entre autres).Vous pouvez trouver
pam_script
ici: https://github.com/jeroennijhof/pam_script . Il devrait également être installable via les gestionnaires de paquets, au moins j'ai pu l'installer via apt-get.Soyez prudent, car vsftpd semble avoir des problèmes avec pam_script au moins lorsqu'il refuse l'authentification, voir ma question non résolue: vsftpd se bloque après l'échec de l'authentification pam_script . Cependant, dans votre cas, cela ne devrait pas poser de problème.
la source
La réponse courte est que vous mélangez les informations d'identification du système et du service et que vous ne devriez pas (ne pouvez pas?) Utiliser pam_mkhomedir avec des utilisateurs virtuels dans vsftpd.
pam_mkhomedir sert à la création de répertoires locaux d'utilisateurs et suppose que l'utilisateur est défini dans le système. Les utilisateurs virtuels dans vsftpd ne sont pas des utilisateurs du système (par conception) et en tant que tels n'ont aucun privilège en dehors du service vsftpd (le système n'a aucune connaissance de ces utilisateurs). L'utilisation de PAM pour l'authentification ne fait que transmettre la validation des informations d'identification de l'utilisateur (nom d'utilisateur + mot de passe ==> OK). Cela peut être déroutant lors de l'utilisation d'utilisateurs virtuels, car vsftpd peut également être configuré pour utiliser des utilisateurs système avec PAM.
Lorsque vous créez le répertoire de base pour un utilisateur virtuel , vous devez faire du compte / groupe de service vsftpd le propriétaire du dossier et placer le "répertoire de base virtuel" dans le chemin du service vsftpd, avec les autorisations appropriées pour le service vsftpd. Je ne sais pas quel problème vous essayez de résoudre, mais comme vous chrootez la session utilisateur, je suppose que vous essayez de créer un certain isolement entre les utilisateurs. Puisque vous devez créer l'utilisateur virtuel dans votre base de données d'utilisateurs pour qu'ils se connectent, pourquoi ne pas générer le répertoire personnel en même temps? J'ai fait cela en utilisant un script pour l'utilisateur ajouter / modifier / supprimer pour garder la base de données des utilisateurs virtuels et les dossiers d'accueil virtuels des utilisateurs vsftpd cohérents. YMMV.
N'oubliez pas qu'avec les utilisateurs virtuels, vous ne travaillez qu'avec vsftpd et non avec le système.
la source