vsftpd登录时的典型错误

2012年10月24日 发表评论 阅读评论

最近在对一台linux测试主机安装vsftpd后,进行登录时出现了三个错误:一个是错误:530 Login incorrect;一个错误是500 OOPS: cannot change directory;还有一个是ftp: connect: No route to host 。

错误一:530 Login incorrect

通过查看/var/logs/secure发现有如下面的错误:

pam_userdb(vsftpd:auth): user_lookup: could not open database `/etc/vsftpd/vsftpd_login.db': No such file or directory

到/etc/vsftpd查看下加密过的认证文件,发现为vsftpd.login.db ,错把 "_" 写成了点 ,重命名该文件,问题解决。不过该问题还有可能是因为/etc/vsftpd.conf中没有加入pam_service_name=vsftpd 或 /etc/pam.d/vsftpd文件认证配置不正确引起的,需要在该文件后加入下面的两行。

auth    required        /lib64/security/pam_userdb.so   db=/etc/vsftpd/vsftpd_login
account required        /lib64/security/pam_userdb.so   db=/etc/vsftpd/vsftpd_login

注:如果是32位系统,上面的lib64需要换成lib ,最后的认证文件vsftpd_login后面没有".db" ,系统会自动增加的 。如果加上 ".db" 将会出错 

错误二:500 OOPS: cannot change directory错误 。

因为我在vsftpd.conf中有chroot_local_user=YES的配置,其作用是为了锁定用户在自己的home目录中。
这样FTP登录用户的“/”,就是passwd中的home path,比如/opt/ftp/。避免FTP用户跑到/etc乱闯。这样设置过,FTP登录时,会自动执行CWD /opt/ftp,并且把这个目录设置为FTP进程的根目录,用户就无法离开了。

同时,由于该机系统开启有selinux防火墙,SELinux会阻止ftp daemon读取用户home目录。FTP会报错: “500 OOPS: cannot change directory”。无法进入目录,出错退出。

有两种解决方法:

1、关闭selinux防火墙:

[root@localhost vsftpd]# setenforce 0

以上为在不重启服务器的情况下,临时关闭selinux防火墙。此时可以通过sestatus查看状态 。

[root@localhost vsftpd]# sestatus -v
SELinux status:                 disabled

注:如果需要永久关闭,需要修改文件/etc/selinux/config文件 。

2、修改selinux里的ftp状态 

首先通过getsebool查看ftp相关项的状态

[root@test173 /]# getsebool -a|grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
allow_tftp_anon_write --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_disable_trans --> off
ftpd_is_daemon --> on
httpd_enable_ftp_server --> off
tftpd_disable_trans --> off

将ftp_home_dir或ftp_disable_trans任一项设置成on即可:

[root@Ansen ~]# setsebool -P ftpd_disable_trans 1
或者
[root@Ansen ~]# setsebool -P ftp_home_dir 1
[root@Ansen ~]# service vsftpd restart

错误三:ftp: connect: No route to host

出现这个错误时,错误本身已经为我们提示的很明白了:

Try "modprobe ip_conntrack_ftp", if that helps. If yes, then you should
add that module to /etc/sysconfig/iptables-config

即,iptables中未加载modprobe ip_conntrack_ftp模块,需要我们为iptable配置该模块没重启iptables,问题即可解决 。

echo ' IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp" ' >> /etc/sysconfig/iptables-config
service iptables restart

不过,也有人给出的方式是将ftp的pasv模式给关掉,即在/etc/vsftpd/vsftpd.conf中的pasv_enable设置为NO 。因为我需要开启pasv模式,所以该方法我并未测试是否能行得通。

错误四:421 Service not available

报该错误的原因,除了可以是因为是 没有启用配置 connect_from_port_20=YES外,还有一个很大的可能是因为/etc/hosts.deny里配置了ALL:ALL,而没有在hosts.allow里对ftp进行放行。放行的方法很简单:

vsftpd: All:allow或按IP段允许
vsftpd:192.168.0.
vsftpd:192.168.122.




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

  1. 2012年10月25日20:27 | #1

    我只是来留各链接就走的。。

  2. lan
    2012年10月28日15:02 | #2

    博客文章很好。感谢!