当 pam_service_name=vsftpd 时,为什么 vsftpd 不工作?

当 pam_service_name=vsftpd 时,为什么 vsftpd 不工作?

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

与解决方案一样。默认设置

pam_service_name=vsftpd

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

在我将其改为

pam_service_name=ftp

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

答案1

我遇到了同样的身份验证错误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并确保用户的 shell 存在于/etc/shells文件中。 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

我的问题是它在这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-step-by-step/

答案2

在 /etc/pam.d/vsftpd 中您可以指定

auth required pam_nologin.so

因此通过 /usr/sbin/nologin 禁用登录的用户只能通过 ftp 方式登录系统。

注意:我读到在 /etc/shells 中添加 nologin 可能会对服务器故障

答案3

对我来说,问题是我/etc/pam.d/vsftpd在 Windows 机器上创建了 PAM 配置(),导致出现\r\n行尾。

一旦我将行尾转换为 Linux 风格(仅\n),PAM 配置就开始工作了。

我一开始也以为 PAM 服务名称是错误的,并尝试用pam_service_name=ftp而不是pam_service_name=vsftpd,但这根​​本没有帮助,而且我同意 Josef P. 的评估,认为这不是解决问题的办法。

答案4

为虚拟用户完整安装 vsftpd。

安装软件包:

 apt install vsftpd libpam-pwdfile

创建用户:

useradd -N -s /bin/false -d /home/vsftpd vsftpd

配置文件:

# /apt/pam.d/vsftpd
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

# /etc/vsftpd.conf
listen=YES
#listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
xferlog_enable=YES
nopriv_user=vsftpd
chroot_local_user=YES
pam_service_name=vsftpd
utf8_filesystem=YES
hide_ids=YES
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
guest_username=vsftpd

# /etc/vsftpd/ftpd.passwd
# user names without passwords
# user name 'upload' has a password.
# if real password is 'MyPassword' then hash created with command:
# openssl passwd MyPassword
programming:
videos:
documents:
furnitures:
sound:
engineer:
games:
programs:
shits:
upload:X7nyBRuyuJVyg

# /etc/vsftpd_user_conf/documents
local_root=/media/nas/documents

# /etc/vsftpd_user_conf/engineer
local_root=/media/nas/engineer
hide_file={/personal_grades}

# /etc/vsftpd_user_conf/upload
local_root=/media/nas/downloads/FTP upload
download_enable=NO
write_enable=YES
allow_writeable_chroot=YES

相关内容