问题现象
项目从centOS版本迁移到欧拉版本后,创建huaiyumo的虚拟账户,通过该账户进行登录vsftp服务时报错530,具体错误信息如下:
[root@huai ~]# ftp
ftp> open 192.168.11.121
Connected to 192.168.11.121 (192.168.11.121).
220 Welcome to use FTP service.
Name (192.168.11.121:root): huaiyumo
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp>
如此同时,在/var/log/secure日志中发现如下关键打印信息:
connected: pam_userdb(vsftpd:auth): user_lookup: could not init database ‘/etc/vsftpd/login': No such file or directory
通过以上日志打印信息可以发现,是由于缺少login数据库文件(该数据库文件记录着用户及其密码信息)导致无法认证成功,进而导致用户登录失败并报错530。
问题分析
由于PAM认证时会通过/etc/pam.d/vsftpd配置中指定的数据库路径进行读取虚拟用户数据库信息,因此,首先检查/etc/pam.d/vsftpd配置信息,发现并无异常(第2、3行已正确添加,第6行已被注释掉),如下:
[root@huai vsftpd]# cat -n /etc/pam.d/vsftpd
1 #%PAM-1.0
2 auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
3 account required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
4 session optional pam_keyinit.so force revoke
5 auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
6 #auth required pam_shells.so
7 auth include password-auth
8 account include password-auth
9 session required pam_loginuid.so
10 session include password-auth
其次,检查/etc/vsftpd目录发现login.txt、login.db文件均已存在,通过如下db_load命令重新生成记录huaiyumo虚拟账户的login.db数据库文件后,发现secure日志中仍然报错could not init database ‘/etc/vsftpd/login’: No such file or directory。
[root@huai ~]# echo "huaiyumo" >> /etc/vsftpd/login.txt
[root@huai ~]# echo "8H37bk" >> /etc/vsftpd/login.txt
[root@huai ~]# db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
排除了/etc/pam.d/vsftpd配置的影响,也排除了login.db生成方式或格式不对的影响,那么有没有可能是login.db这个二进制文件在欧拉版本中无法识别呢?通过进一步调研和分析,果不其然,欧拉版本中无法读取login.db数据库文件,可以读取login.pag数据库文件(可以通过gdbmtool命令
来实现)。
问题解决
将项目中通过db_load命令
生成login.db文件改为通过gdbmtool命令
生成login.pag文件,如下所示。同时,保持/etc/pam.d/vsftpd配置文件保持不变,实现PAM认证时从login.pag数据库文件中读取虚拟用户信息并进行认证登录。
[root@huai user]# gdbmtool /etc/vsftpd/login.pag
Welcome to the gdbm tool. Type ? for help.
gdbmtool> store huaiyumo
DATA? 8H37bk
gdbmtool> q
[root@huai user]#
通过上述过程完成后,如下,再次用huaiyumo账户登录FTP服务器发现可以正常登录上,并且底层/var/log/secure日志中打印“connected: pam_userdb(vsftpd:auth): user ‘huaiyumo’ granted access”的成功登录信息。
[root@huai ~]# ftp
ftp> open 192.168.11.121
Connected to 192.168.11.121 (192.168.11.121).
220 Welcome to use FTP service.
Name (192.168.11.121:root): huaiyumo
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>