我在我的家庭服务器上设置了 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