编辑
2024-06-08
LinuxNotes
00

在配置 vsftpd 的过程中,我遇到了一个问题:将虚拟用户的名字改为和本地同名(存在)的用户时,无法登录 FTP,即虚拟用户可以登录 FTP,但本地用户不能登录,(虚拟用户和本地用户不能共存)。

实验后,发现将 /etc/pam.d/vsftpd 中的以下两行注释掉,然后把里面的其他内容都打开注释,本地用户就能登录了:

bash
auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd account required pam_userdb.so db=/etc/vsftpd/vuser_passwd

这证明了是 PAM 模块认证的问题导致虚拟用户和本地用户不能共存。于是我去了解了一下 PAM 配置的内容,发现 required 需要所有内容都满足才行。当前两条配置是先验证虚拟用户登录通过,再继续向下验证是否是本地用户。由于验证本地用户的 control_flag 也为 required,所以会返回错误,导致验证不成功。

因此,我们不能同时将虚拟用户和本地用户的 control_flag 设置为 required。按照 PAM 的规则,我们可以将虚拟用户的验证配置放在最前面,并将 control_flag 设为 sufficient。这样,如果遇到虚拟用户,就可以通过验证;如果是本地用户,则会忽略掉 sufficient 的两条配置规则,只要满足 required 就可以通过验证。

最终,修改了 /etc/pam.d/vsftpd 的内容如下:

bash
#%PAM-1.0 auth sufficient pam_userdb.so db=/etc/vsftpd/vuser_passwd account sufficient pam_userdb.so db=/etc/vsftpd/vuser_passwd session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed auth required pam_shells.so auth include password-auth account include password-auth session required pam_loginuid.so session include password-auth

上面两行是后来加上的,用于虚拟用户 PAM 认证。下面是原来 vsftpd 的认证配置规则。可以看到,本地用户用的是 password-auth。这表明,要让虚拟用户和本地用户共存,两部分都不能注释。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:GYC

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!