Linux(RH&CentOS)上启动vsftpd遇到的一些问题

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。

       PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT 命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的 XXXX端口发送连接请求,建立一条数据链路来传送数据。

       PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV 命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口 发送连接请求,建立一条数据链路来传送数据。 从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完 全不同。

1、查看出当前机器的版本
[root@dsl-scouter-liulin-5 ~]# cat /etc/issue

2、查看当前操作系统内核信息
[root@dsl-scouter-liulin-5 ~]# uname -a

3、在http://rpmfind.net/linux/rpm2html/search.php?query=vsftpd&submit=Search+...&system=&arch=  上找到对应版本的rpm文件
注意是类似vsftpd-1.1.3-8.i386.rpm的文件,而不是源文件(src)

4、用rpm命令安装
[root@dsl-scouter-liulin-5 ~]# rpm -Uvh vsftpd-1.1.3-8.i386.rpm

5、配置/etc/vsftpd/vsftpd.conf 文件
参见:http://hi.baidu.com/lovehack2006/blog/item/b4fb9cbf8261910c18d81fee.html
http://www.chinaunix.net/jh/15/408418.html

===================重启命令为:/sbin/service vsftpd restart

6、启动ftp服务
[root@dsl-scouter-liulin-5 ~]# /sbin/service vsftpd start

7、可以用下面的命令查看默认的21端口是否打开
[root@dsl-scouter-liulin-5 ~]# netstat -na --ip


===================停止ftp命令:/sbin/service vsftpd stop
===================重启命令为:/sbin/service vsftpd restart

===================(RedHat/CentOS Linux release 6.0 (Final))查看ftp服务是否已经启动命令:service vsftpd status

问题一:=============ftp: connect: No route to host问题解决===============
CentOS直接启动ftp服务后,ftp时:
[bbass@bbass bbass]$ ftp 10.5.83.56
ftp: connect: No route to host

但是感觉不管用,问了公司的工程师,
在/etc/sysconfig/iptables文件中添加即可
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT


问题二:=========com.enterprisedt.net.ftp.FTPException: Permission denied问题=============
这个是基于edtftpj-1.5.2.jar包在用java代码的时候出现的情况,
要注意代码中ftp上传的方式是主动模式还是被动模式,如果是被动模式,请将被动模式打开。
ftp> passive
Passive mode on.


暂时的解决办法是:在另外一台机器ftp远程登录当前ftp服务机后,
ftp> passive
Passive mode off.

问题三:===========这种是成功登陆后但是无法访问远程目录的情况下======================
ftp> ls
227 Entering Passive Mode (1,2,3,4,43,196)
ftp: connect: No route to host
ftp> passive
Passive mode off.

=======解决方法:
Try "modprobe ip_conntrack_ftp", if that helps. If yes, then you should
add that module to /etc/sysconfig/iptables-config.

In /etc/sysconfig/iptables-config try setting
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
and restart iptables.

问题四:==========500 OOPS: cannot change directory:/home/ftp问题解决============
参考:http://hi.baidu.com/ma95221/blog/item/c779741137cc121bb8127b4f.html
centos vsftp 500 OOPS: cannot change directory:/home/ftp2010-01-11 16:59他的系统是CentOS,是RH派系的。我把vsftpd安装配置好了,以为大功告成,但客户端访问提示如下错误:
500 OOPS: cannot change directory:/home/ftp
原因是他的CentOS系统安装了SELinux,因为默认下是没有开启FTP的支持,所以访问时都被阻止了。
//查看SELinux设置
# getsebool -a|grep ftp
ftpd_disable_trans --> off
或者
ftp_home_dir-->off

解决方法:
//使用setsebool命令开启
# setsebool ftpd_disable_trans 1
或者
# setsebool ftp_home_dir 1
//再次查看当前状态是否是on的状态
# getsebool -a|grep ftp
ftpd_disable_trans --> on
或者
ftp_home_dir-->on


//setsebool使用-P参数,无需每次开机都输入这个命令
# setsebool -P ftpd_disable_trans 1
或者
# setsebool -P ftp_home_dir 1
# service vsftpd restart


有关selinux的配置

如关闭,仅仅警告,强制等等 需要编辑/etc/sysconfig/selinux 默认是强制
 

防火墙(iptables)启动停止命令:

=====iptables停止命令:service iptables stop

=====iptables启动命令:service iptables start

=====iptables重启命令:service iptables restart