vsftpd - PAM - MySQL et pam_mkhomedir pour créer des répertoires

11

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?

À M
la source
Salut, avez-vous déjà pu résoudre ce problème?
George
@George Pas du tout.
Tom
J'ai résolu le problème d'une manière très différente, je me suis éloigné de vsftpd et j'ai opté pour pureftp. Installation et exécution en quelques heures sans tous ces problèmes. Fonctionne parfaitement.
George
/ home / vsftpd appartient-il à vsftpd?
Luca Gibelli

Réponses:

0

Pour que les recherches d'utilisateurs par module PAM réussissent, vous devez activer le module NSS pour MySQL dans nsswitch.conf(5). nss_mysqlest votre ami.

Ashish SHUKLA
la source
Avez-vous des références à fournir à ce sujet? Je n'arrive pas à trouver quoi que ce soit sur le besoin nss-mysqldans mon contexte?
Tom
Comment pam_mkhomedirva 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.
Ashish SHUKLA
J'essaie juste de découvrir quoi que ce soit sur cette bibliothèque. Le lien que vous avez fourni est un très ancien projet sans documentation. Si j'installe cela, cela ne donne aucune indication sur ce qu'il faut mettre dans votre nssswitch.conf. Seulement, il peut contenir 3 paramètres. Pouvez-vous fournir n'importe quel type d'orientation? Il semble que pam_mysql soit la même chose que nss-mysql? J'ai pam_mysql qui fonctionne là où il utilise la base de données mysql pour s'authentifier auprès des utilisateurs virtuels vsftpd.
Tom
PAM n'est pas identique à NSS . PAM est orienté vers l'authentification, alors que l'objectif de NSS est de résoudre les noms (noms d'hôte, noms d'utilisateur, etc.). La plupart des distributions fournissent un paquet pour nss_mysql, par exemple Debian et ses dérivés le fournissent en tant que libnss-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é à votre nsswitch.conf(5), les choses commenceront à fonctionner pour vous.
Ashish SHUKLA
J'ai ajouté libnss-mysql à partir de ma distribution. Essayé hors de la boîte et rien ne fonctionne. Des idées sur ce que je dois changer dans nsswitch.conf?
Tom
0

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_scriptici: 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.

edziubudzik
la source
0

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.

Yaro
la source