vsftpd 失败 pam 身份验证

vsftpd 失败 pam 身份验证

将经过验证的 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 启动时不会出现错误。

相关内容