vsftpd-PAM-MySQL和pam_mkhomedir创建目录


11

我已经成功地使用了vsftpd和虚拟用户,这些用户通过PAM连接到我的mysql数据库。现在,我想通过成功的vsftpd连接自动创建用户目录。

这是/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

现在添加pam_mkhomedir仅显示它无法在任何日志中没有其他消息的情况下创建目录。因此,显然不适用。我还有什么需要的吗?

我的/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

我在vsftpd.conf中看到一个帖子说我需要这个,所以我也尝试了这个:

session_support=YES

但是现在,日志似乎不再对它进行身份验证:

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.

即使我已经创建了目录,也是如此。现在没有人可以进入。

有任何想法吗?


嗨,您曾经能够解决此问题吗?
乔治

@乔治一点都不。
汤姆(Tom)

我以完全不同的方式解决了这个问题,我离开了vsftpd,转而使用pureftp。几个小时即可完成设置和运行,而不会出现所有这些问题。完美运作。
乔治,

/ home / vsftpd由vsftpd拥有?
卡·吉贝利

Answers:


0

为了成功通过PAM模块进行用户查找,您需要在中为MySQL启用NSS模块nsswitch.conf(5)nss_mysql是你的朋友。


您可以为此提供任何参考吗?nss-mysql在我的上下文中,我似乎找不到任何需要的东西?
汤姆

如何pam_mkhomedir确定要创建的用户主目录的路径?它如何知道用于解析用户的数据库?NSS向其提供该信息。对于您的情况,假设您的用户数据库存储在MySQL数据库中,则需要nss_mysql
Ashish SHUKLA,2013年

我只是想找出有关此库的任何内容。您提供的链接是一个非常老的项目,没有文档。如果我确实安装了此程序,则不会指示在nssswitch.conf中放入什么内容。只是它可能包含3个参数。您可以提供任何指导吗?听起来pam_mysql与nss-mysql是同一回事吗?我确实有pam_mysql在使用mysql db与vsftpd虚拟用户进行身份验证的地方工作。
汤姆,

PAMNSS不同。PAM针对身份验证,而NSS的目标是解析名称(主机名,用户名等)。大多数发行版都提供了一个软件包nss_mysql,例如Debian,而派生版本将其提供为libnss-mysql。而且,是的,它并没有更新半个十年,但是效果很好。一旦安装了模块,对其进行配置,并将其添加到您的中nsswitch.conf(5),一切将开始为您工作。
Ashish SHUKLA 2013年

我从发行版中添加了libnss-mysql。尝试开箱即用,没有任何效果。关于我需要在nsswitch.conf中进行更改的任何想法?
汤姆(Tom)

0

您可以尝试使用pam_script-这是一个pam模块,该模块允许在打开用户会话(以及其他操作)之后执行任意的shell脚本。

您可以在pam_script这里找到:https : //github.com/jeroennijhof/pam_script。它也应该可以通过程序包管理器安装,至少我已经能够通过apt-get安装它。

请注意,至少在拒绝身份验证时,vsftpd似乎对pam_script有一些问题,请参阅我未解决的问题:pam_script身份验证失败后,vsftpd冻结。但是,对于您而言,这应该不是问题。


0

简短的答案是您要混合使用系统和服务凭据,并且不应(不能?)在vsftpd中对虚拟用户使用pam_mkhomedir。

pam_mkhomedir用于创建用户本地目录,并假定用户在系统中定义。vsftpd中的虚拟用户(根据设计)不是系统用户,因此在vsftpd服务之外没有特权(系统不了解这些用户)。使用PAM进行身份验证仅会传递用户凭据的验证(用户名+密码==>确定)。使用虚拟用户时,这可能会造成混淆,因为vsftpd也可以配置为使用带有PAM的系统用户。

在为虚拟用户创建主目录时,必须使vsftpd服务帐户/组成为文件夹的所有者,并将“虚拟主目录”放置在vsftpd服务路径中,并为vsftpd服务提供适当的权限。我不确定您要解决的问题是什么,但是在更改用户会话时,我假设您正在尝试在用户之间创建某种隔离。由于必须在用户数据库中创建虚拟用户才能登录,因此为什么不同时生成主目录?我使用用于用户添加/更改/删除的脚本来完成此操作,以使虚拟用户数据库和vsftpd用户虚拟主文件夹保持一致。YMMV。

请记住,对于虚拟用户,您只能在vsftpd中工作,而不能在系统中工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.