vsftpd搭建ftp服务器不能使用虚拟账户登录

【标题描述】通过安装vsftpd-3.0.3配置FTP服务器,匿名和系统登录均能够正常访问,但使用虚拟用户时出现530 permission denied问题。
【环境信息】
硬件信息:
1) 硬件信息:Intel Core i5 10210u; 16GB RAM; 512GB NVMe SSD; Huawei Matebook 14。
2) 虚机场景提供虚机XML文件或者配置信息: None
软件信息:
1) OS版本及分支:openEuler 22.03 (LTS-SP1)
2) 内核信息: 5.10.0-136.15.0.91.oe2203sp1.x86_64
3) 发现问题的组件版本信息:
vsftpd-help-3.0.3-32.oe1.x86_64.rpm
vsftpd-3.0.3-32.oe1.x86_64.rpm
libdb-5.3.28-36.oe1.x86_64

【问题复现步骤】
具体操作步骤
1.安装官方源的vsftpd;
2.配置ftp的nologin登录账号,并创建虚拟账号的用户名和密码文件virtusers.txt;
3.通过系统自身的db对virtusers.txt加密,使用db_load -T -t hash -f /etc/vsftpd/virtusers.txt /etc/vsftpd/virtusers.db;
4.修改/etc/pam.d/vsftpd文件#PAM-1.0.1%后的内容,注释原有内容,在#PAM-1.0.1%行之后另加两行内容:
auth sufficient pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient pam_userdb.so db=/etc/vsftpd/virtusers
5.配置vsftpd.conf使支持虚拟用户登录,然后配置对应的虚拟账户目录及虚拟目录访问权限的配置文件,最后进行ftp连接测试。其中必现 530 permission denied,查看/var/log/secure,必现错误信息:
vsftpd[91604]: pam_userdb(vsftpd:auth): user_lookup: could not open database `/etc/vsftpd/virtusers.db’: No such file or directory
注:/etc/pam.d/vsftpd中db=后面无论是加上.db后缀还是不加,问题都是如此。
出现概率: 必现
【预期结果】
正常情况下,CentOS 6.3 - CentOS 8.5均能够支持虚拟用户登录,但目前在OpenEuler系统上出现不应该出现的问题,这是极期严重的错误,如果系统无法集成db4-utils或是db5-utils,需在对应的操作上明确告知用户相关信息!!!
【实际结果】
无法进行虚拟用户登录,客户端连接出现530 permission denied错误,安全日志出现pam auth找不到登录用户的db数据库。

因为pam_userdb使用的数据库由bdb换成了gdbm,需要更换格式。

根据有人的提示,试了试这个方法:
安装gdbm,使用以下命令创建数据库,增加用户

gdbmtool -n /etc/vsftpd/virtusers.pag open
gdbmtool /etc/vsftpd/virtusers.pag store ${FtpUserName} ${FtpUserPass}

/etc/pam.d/vsftpd的配置不用改,不加后缀名

依然不行,不知道正确的方法是什么。请指教

我也遇到了同样的问题,已经花了两个晚上研究,也没啥效果,请大神出来指点一下!!

这个问题是因为pam软件包切换使用gdbm作为数据库,需要使用gdbmtool工具来替换db_load工具,更多详情见:vsftpd搭建ftp服务器不能使用虚拟账户登录 · Issue #I5WRC0 · src-openEuler/vsftpd - Gitee.com
目前测试已经全部打通,具体截图如下

已经搞定了,晚点发一个具体的操作的贴子。

牛逼,给你点赞 :+1: