将经过验证的 vsftpd 配置转移到使用 Fedora 16 的新服务器上时,我遇到了问题。一切似乎都按预期进行,但用户身份验证失败。我在任何日志中找不到任何表明发生了什么的条目。
这是完整的配置文件:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
idle_session_timeout=0
data_connection_timeout=0
nopriv_user=ftpsecure
connect_from_port_20=YES
listen=YES
chroot_local_user=YES
chroot_list_enable=NO
ls_recurse_enable=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
FTP 向我询问用户名和密码,我提供了它们,但登录不正确。我已经验证过,该用户可以通过 ssh 登录。有什么事情搞砸了pam_service
。
匿名(如果更改为允许)似乎效果很好。
SELinux 已禁用。
Ftpsecure 似乎配置得很好...我完全不知所措!
以下是我检查但没有成功的日志文件:
/var/log/messages
/var/log/xferlog #empty
/var/log/vsftpd.log #empty
/var/log/secure
发现了一些东西/var/log/audit/audit.log
:
type=USER_AUTH msg=audit(1335632253.332:18486): user pid=19528 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:authentication acct="kate" exe="/usr/sbin/vsftpd" hostname=ip68-5-219-23.oc.oc.cox.net addr=68.5.219.23 terminal=ftp res=failed'
也许我应该看看/var/log/wtf-is-wrong.help
:-)
更多信息:
/etc/pam.d/vsftpd 看起来像这样:
#%PAM-1.0
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
答案1
呼。我解决了这个问题。它相当于一个配置,但位于 /etc/pam.d/vsftpd 内
因为 ssh 会话成功而 ftp 会话失败,所以我去了
/etc/pam.d/vsftpd,删除了其中的所有内容,而是放置了 ./sshd 的内容以精确匹配规则。一切顺利!
通过排除法,我发现有问题的行是:
auth required pam_shells.so
删除它可以让我继续。
事实证明,“pam_shells 是一个 PAM 模块,仅当用户 shell 列在 /etc/shells 中时才允许访问系统。”我看了看,果然没有任何混乱,什么也没有。我认为这是 vsftpd 配置中的一个错误,因为文档中没有任何地方可以让您编辑 /etc/shells。因此,默认安装和说明无法按规定工作。
我现在就去找一下可以提交bug的地方。
答案2
我正在使用 ubuntu 并且遇到了同样的问题
解决方案:
add-shell /sbin/nologin
sudo usermod -s /sbin/nologin ftpme
sudo vi /etc/pam.d/vsftpd
然后注释并添加如下行
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/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
@include common-auth
@include common-account
@include common-password
@include common-session
答案3
就我而言,我选择对 auth 行进行评论/etc/pam.d/vsftpd配置文件
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/f$
#auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
这就是你的原因。如果你添加/sbin/nologin作为 shell 系统,您可能会在系统中打开不需要的后门。相反,更改此文件肯定只会影响VSFTPD。
我不知道是否还有其他流程sshd寻找系统 shell,但我认为更改 pam.d 文件是比其他解决方案更好的解决方案。
答案4
如果 vsftpd 失败并出现以下错误
vsftpd.service:控制进程退出,代码=退出状态=2
那么另一种可能性是检查 文件pasv_addr_resolve=YES
中是否设置了/etc/vsftpd/vsftpd.conf
。这会导致 FTP 服务器的主机名通过 DNS 进行解析。如果 DNS 无法解析,就像你不能解析一样ping yourhostname.example.com
,那么你需要修复 DNS 解析问题或进行设置,pasv_addr_resolve=NO
它/etc/vsftpd/vsftpd.conf
至少应该让 vsftpd 启动时不会出现错误。