vsftpd修改访问端口后无法连接
在虚拟机里的CentOS6.0上用yum安装了vsftpd。
?
由于虚拟机上网方式是VituralBox的NAT(Network Address Translation),因此主机或外网无法直接访问到虚拟机的21端口,因此需要设置端口映射(设置方式参考:http://cwalet.iteye.com/blog/794891)
于是将虚拟机的21端口映射到主机的2121端口,同时在iptables中添加策略:
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT/etc/init.d/iptables restart?
重启虚拟机后在主机cmd执行netstat -ano查看虚拟机是否在监听2121端口。
TCP 0.0.0.0:2121 0.0.0.0:0 LISTENING 4088?
OK,现在尝试登录ftp,推荐使用flashfxp。但是却提示这样的错误:
200 Switching to Binary mode
227 Entering Passive Mode (10,0,2,15,91,131).
?
突然想起ftp连接还需要数据端口,默认是20,因此继续配置了虚拟机的20端口映射到主机的2120端口(数据端口与命令端口要求是连续的两个端口)然后开放防火墙访问。这时候再访问ftp服务仍然是上面的错误。
?
知识普及:(以下内容参考http://www.yuzhiguo.com/articleview.asp?id=136)
FTP具有两种模式,分别是port模式(也叫主动模式)和pasv模式(也叫被动模式),怎么来理解这两种模式呢?我来打个比喻吧,在主动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,并且还会说我已经打开了自己的某个端口,你就从这里把东西给我吧,服务器知道后就会通过另外一个数据端口把东西传给客户端,这就是主动模式,可以理解为服务端主动给客户端传输文件;在被动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,服务器端知道后,就打开一个端口,然后告诉客户端,我已经打开了某某端口,你自己进去拿吧,于是客户端就从那个端口进去拿文件了,这就是被动模式,可以理解为服务端被客户端拿走了东西?
解决方法:根据以上原理,可以有以下两种方案:
-1> 修改vsftpd为主动模式:找到vsftpd.conf(使用yum安装的位置一般在/etc/vsftpd/),增加一行:
pasv_enable=no
#设置取消被动模式
修改完成后重启vsftpd:/etc/init.d/vsftpd restart
此时应该就可以正常连接。
-2> 使用flashfxp软件登录ftp,打开站点管理器—>新建站点—>选项—>使用被动模式,将该项取消勾选。
填写IP地址后尝试访问。
?
附录:
vsftpd配置匿名用户可删除文件:
anon_world_readable_only=no
anon_other_write_enable=yes
?
开机自启动vsftpd的方法:
chkconfig --level 5 vsftpd on
chkconfig vsftpd on
?
客户端连接时:
500 OOPS: vsftpd: refusing to run with writable anonymous root
原因:vsftpd的home目录权限设置不能为777,即所有权限。修改为755.
我们发现ftp用户的家目录在/var/ftp,就是这个/var/ftp的权限不对所致,这个目录的权限是不能打开所有权限的;是您运行了chmod 777 /var/ftp所致;如果没有ftp用户这个家目录,当然您要自己建一个;?参考:http://www.chinaunix.net/jh/15/749448.html
http://go.paowang.net/blog/hufey/archives/004254.html
vsFTPd 服务器初学者指南?http://www.linuxsir.org/main/node/152