为什么当 pam_service_name=vsftpd 时 vsftpd 不起作用?

Anb*_*nbu 8 server ftp vsftpd 14.04

我在我的家庭服务器上做了一个 vsftpd 设置。我遇到了一些身份验证错误,所以我搜索了这个论坛并找到了解决方案。 这个解决方案对我有用

就像在解决方案中一样。默认设置

pam_service_name=vsftpd
Run Code Online (Sandbox Code Playgroud)

不起作用,FTP 服务器不允许我登录。

在我把它改成

pam_service_name=ftp
Run Code Online (Sandbox Code Playgroud)

它工作正常,我可以作为本地用户登录到 FTP 服务器。这背后的原因是什么?为什么默认不起作用?我正在学习 linux 所以你很好的解释可以帮助我很多

小智 7

我遇到了相同的身份验证错误pam_service_name=vsftpd

遵循在线建议,我无法弄清楚为什么设置pam_service_name=ftp解决了问题,所以我测试了将其设置为pam_service_name=foobar并且它也解决了问题!

免责声明:我也是 linux 新手,但我相信普遍接受的设置建议pam_service_name=ftp是错误的

pam_service_name=vsftpd选择现有的配置文件/etc/pam.d/vsftpd,但是pam_service_name=ftp会查找/etc/pam.d/ftp不存在的配置文件(至少在我的系统上 - Ubuntu 14.04.2 LTS)。我怀疑这实际上绕过了 PAM 身份验证,而没有抱怨它找不到文件。

如果不使用有效的 PAM 配置,它的安全性可能会降低。

最终解决方案

我最终保留pam_service_name=vsftpd并确保/etc/shells文件中存在用户的 shell 。 http://www.cyberciti.biz/tips/howto-linux-shell-restricting-access.html

看着 /etc/pam.d/vsftd

# Standard behaviour for ftpd(8).
auth    required    pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.

# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth    required    pam_shells.so
Run Code Online (Sandbox Code Playgroud)

我的问题是它在这auth required pam_shells.so一步失败了。我让我所有的 FTP 用户都使用文件中/usr/sbin/nologin不存在的shell /etc/shells(非 ubuntu 这可能只是/sbin/nologin)。如果您不确定,请尝试注释掉auth required pam_shells.so以查看这是否是pam_service_name=vsftpd.

注意:进一步阅读建议创建虚拟用户更干净,但这需要不同的 vsftpd 和 PAM 配置 - http://www.sigerr.org/linux/setup-vsftpd-custom-multiple-directories-users-accounts-ubuntu-一步一步/

  • 同意关于普遍接受的建议的解释和免责声明是错误的。对于最终的解决方案,我使用了 `usermod -s /bin/sh <username>`(使用 `/bin/sh` 跟随 `/etc/shells` 中的那个)并且我已经能够登录 ftp。 (2认同)