vsftpd无法通过pam身份验证


13

在Fedora 16上将经过验证的vsftpd配置移动到新服务器上时,我遇到了一个问题。一切似乎都按预期进行,但用户身份验证失败。我在任何日志中都找不到指示发生了什么的条目。

这是完整的配置文件:

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
什么是PAM配置(/etc/pam.d/vsftpd我认为)?
吉尔斯(Gilles)'所以

尝试/var/log/syslogdmesg
Hello71

pam config:session可选pam_keyinit.so强制撤消需要的身份验证pam_listfile.so item =用户感知=拒绝文件= / etc / vsftpd / ftpusers onerr =需要成​​功的身份验证pam_shells.so身份验证包括密码验证帐户需要密码验证会话pam_loginuid .so会话包括password-auth
KateYoak 2012年

Answers:


24

ew。我解决了问题。它相当于一个配置,但在/etc/pam.d/vsftpd中

因为ssh会话成功而ftp会话失败,所以我去了

/etc/pam.d/vsftpd,删除其中的所有内容,而是放置./sshd的内容以精确匹配规则。一切正常!

通过消除方法,我发现违规行是:

    auth       required     pam_shells.so

删除它可以继续进行。

调出答案,“ pam_shells是一个PAM模块,仅当/ etc / shells中列出了用户shell时,才允许访问系统。” 我看了看那里,果然没有猛击,什么也没有。我认为这是vsftpd配置中的错误,因为在文档中没有任何地方可以编辑/ etc / shells。因此,默认安装和说明无法按说明进行操作。

我现在去找可以提交错误的地方。


/ etc / shells通常应该包含可接受的shell列表。许多不同的子系统都使用此方法,并且预期它是正确的。该文件不是由vsftpd创建或维护的,而是由发行版的核心设置创建或维护的。因此,这不是vsftpd错误,而是计算机设置中的错误。
tylerl

天哪,谢谢!我应该已经看到该用户无法以/ sbin / nologin身份登录作为用户shell ...
mveroone

非常感谢!您的评论/etc/shells帮助我找到了这种奇怪的行为改变的原因。FTP用户是使用创建的Shell: /sbin/nologin/sbin/nologin原来已从中删除/etc/shells。因此,我添加了这些行,/sbin/nologin并且/usr/sbin/nologin这些行也auth required pam_shells.so起作用了。
Bodo Hugo Barwich,

4

我正在使用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

0

正如您在自己的答案中提到的那样,用户外壳程序应列在中/etc/shells。您可以将/sbin/nologin用户shell 设置为禁止ssh并允许ftp,而无需更改pam配置:

usermod -s /sbin/nologin restricted_ftp_user

0

如果vsftpd失败并显示错误消息

vsftpd.service:控制进程已退出,代码=退出状态= 2

然后另一种可能性是检查 文件中pasv_addr_resolve=YES是否设置了/etc/vsftpd/vsftpd.conf。这将导致通过DNS解析FTP服务器的主机名。如果DNS无法解析(如您无法解析),ping yourhostname.example.com则您需要解决该DNS解析问题或pasv_addr_resolve=NO在中进行设置,/etc/vsftpd/vsftpd.conf并且至少应让vsftpd启动而不会出现错误。


0

我也遇到了相同的奇怪行为,其中FTP用户配置了

# finger <user>
Login: <user>                   Name: 
Directory: /home/user-dir           Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.

在一个系统上可以登录,而在另一个系统上则不能登录。

根据@KateYoak的答案,事实证明/etc/shells文件是不同的,并且不包含/sbin/nologin外壳。在其中进行了PAM身份验证/etc/pam.d/vsftpd

auth       required     pam_shells.so

失败

通过将/etc/shells缺少的行添加到文件中

/sbin/nologin
/usr/sbin/nologin

签入/etc/pam.d/vsftpd工作。

因此,工作/etc/shells文件应具有:

# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

0

就我而言,我选择对/etc/pam.d/vsftpd配置文件中的auth行进行注释。

#%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这样的其他进程正在寻找系统外壳,但是我认为更改pam.d文件比其他方法更好。


-2

进行更改之前备份配置文件;

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.back

然后编辑vsftpd.conf(使用vi或nano)

nano /etc/vsftpd.conf

然后进行以下更改

pam_service_name=ftp

保存更改并重新启动ftp服务器(如果您使用nano命中,请按CTRL + O并输入以保存,然后按CTRL + X退出)

sudo service vsftpd restart
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.