由于是源码安装,因此不能经过rpm -qa的方式查看是否已经安装ftp服务器,能够经过find / | grep vsftp*方式查看系统中存在哪些与vsftpd相关的文件,找出来经过rm删除。php
如下删除代码为参考:html
rm /usr/local/sbin/vsftpd rm /usr/local/man/man5/vsftpd.conf.5 rm /usr/local/man/man8/vsftpd.8 rm /etc/xinetd.d/vsftpd rm -rf /etc/vsftpd
tar -zxvf vsftpd-3.0.0.tar.gz
编码解决:linux
vi opts.c
将if (str_equal_text(&p_sess->ftp_arg_str,"UTF8 ON"))web
更改为if (str_equal_text(&p_sess->ftp_arg_str,"DISABLE UTF8 ON"))shell
注意:安装以前,先查看系统是否为64位(用getconf LONG_BIT命令),须要更改vsf_findlibs.sh文件库中lib 路径,命令以下:tomcat
sed -i 's/lib\//lib64\//g' vsf_findlibs.sh
完成以上步骤,到解压目录安全
cat /etc/issue
cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)服务器
tar -zxvf vsftpd-3.0.0.tar.gz
getconf LONG_BIT
“o hash.o tcpwrap.o ipaddrparse.o access.o features.o readwrite.o opts.o ssl.o sslslave.o ptracesandbox.o ftppolicy.o sysutil.o sysdeputil.o seccompsandbox.o -Wl,-s -fPIE -pie -Wl,-z,relro -Wl,-z,now `./vsf_findlibs.sh`/usr/bin/ld: cannot find -lcapcollect2: ld 返回 1make: *** [vsftpd] 错误 1”
cp vsftpd.conf /etc/vsftpd
cp Redhat/vsftpd.pam /etc/pam.d/
mv /etc/pam.d/vsftpd.pam /etc/pam.d/vsftpd
添加用户ftp123,并指定用户家目录/data/ftp_dirsession
useradd -d /data/ftp_dir/ ftp123
passwd ftp123
chmod 775 /data/ftp_dir/
ll
vi /etc/sysconfig/iptables/
-A OUTPUT -p tcp --sport 20 -j ACCEPT -A OUTPUT -p tcp --sport 21 -j ACCEPT -A OUTPUT -p tcp --sport 2100 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 2100 -j ACCEPT
再重启app
/usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf
yum install ftp
4.2.2 登录
ftp ip地址
出现以上提示表示登录成功了
ftp> put (local-file) index.html (remote-file) index.html local: index.html remote: index.html 227 Entering Passive Mode (172,16,4,166,8,52). 150 Ok to send data. 226 Transfer complete. 2381 bytes sent in 0.00856 secs (278.25 Kbytes/sec)
下面看一个完整操做
解决思路:修改vsftpd.conf配置文件,添加pam_service_name=vsftpd配置,注意这里的配置文件值为:vsftpd,对应的是/etc/pam.d/vsftpd文件,因此复制到pam.d目录的vsftpd.pam须要进行更名;重启ftp验证。
若是还不能解决,能够考虑编辑vi /etc/pam.d/vsftpd,将文件中的因此lib替换为lib64,再重启ftp便可。
解决思路:出现这个问题时,能够考虑vsftpd链接模式问题,vsftpd存在两种链接模式,一个是主动链接,一个是被动链接。首先将ftp客户端的链接方式改成“被动链接”模式再进行ftp的链接。
若是还不行,能够考虑是否是服务器端口问题,好比服务器限制了只能访问几个端口,这是须要在配置文件中进行以下配置:
pasv_enable=YES //表示启动被动模式
pasv_min_port=9090 //被动模式最小端口
pasv_max_port=9091 //被动模式最大端口
pasv_address=172.16.4.160 //被动模式链接IP
注意pasv_address这个配置,这个配置默认为none,不进行设置,则客户端在链接的时候会先链接当前服务器内网IP地址,以后才链接外网IP地址,因此进行配置的时候,要指定地址,这样再链接的时候才会直接链接外网地址。
解决思路:遇到这个问题能够考虑是不是服务器的selinux防火墙开启了,能够经过一下命令进行防火墙关闭:setsebool -P ftpd_disable_trans 1,须要重启ftp,service vsftpd restart
还能够经过命令:sestatus -b | grep ftp查看ftp的状态,最主要查看ftp_home_dir的值是on 仍是off,若是是off,经过命令setsebool -P ftp_home_dir on设置为on
解决思路:遇到这个问题能够考虑是否配置userlist_enable选项,查看/etc/vsftpd.user_list或者/etc/vsftpd/vsftpd.user_list是否限制了当前用户,将该用户从文件中删除或者设置userlist_deny=NO
解决思路:这是由于从2.3.5以后,vsftpd加强了安全检查,若是用户被限定在了其主目录下,则该用户的主目录不能再具备写权限了!若是检查发现还有写权限,就会报该错误。
要修复这个错误,能够在vsftpd的配置文件/etc/vsftpd/vsftpd.conf添加一行“ allow_writeable_chroot=YES”
状态: 正在链接 218.65.241.60:12021...状态: 链接创建,等待欢迎消息...状态: 不安全的服务器,不支持 FTP over TLS。状态: 已登陆状态: 读取目录列表...命令: PWD响应: 257 "/lutong/tomcat_admin_9090/webapps/boss_sync_user_data"命令: TYPE I响应: 200 Switching to Binary mode.命令: PORT 172,16,4,200,201,1响应: 500 Illegal PORT command.命令: PASV响应: 227 Entering Passive Mode (90,114,3,18,8,52).命令: LIST错误: 没法创建数据链接: ETIMEDOUT - 链接尝试超时错误: 50 秒后无活动,链接超时
用FileZilla工具链接时,发现,报如上错误,这是由于没有指定被动模式,在/etc/vsftpd/vsftpd.conf最后添加以下几行,
#是否容许被动模式 pasv_enable=YES #下面两行设置被动模式链接时的端口范围,建议配置大一点的,安全性高 pasv_max_port=60000 pasv_min_port=60010 pasv_address=ftp服务器ip #vsftp服务器指定IP地址
而后在/etc/sysconfig/iptables添加开放端端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 60000:60010 -j ACCEPT
便可
修改/etc/vsftpd/vsftpd.comf的data_connection_timeout的值更大便可
/etc/vsftpd/vsftpd.conf
#禁止匿名访问 anonymous_enable=NO #开放本地用户的写权限 write_enable=YES #设置本地用户的文件生成掩码为022,默认值为077 local_umask=022 #当切换到目录时,显示该目录下的.message隐含文件的内容 #这是因为默认状况下有message_file=.message的 设置 dirmessage_enable=YES #激活上传和下载日志 xferlog_enable=YES #启用FTP数据端口的链接请求 connect_from_port_20=YES #xferlog日志文件 xferlog_file=/var/log/xferlog #使用标准的ftpd xferlog日志格式 xferlog_std_format=YES #设置空闲的数据链接的的中断时间 data_connection_timeout=120 #设置链接服务器后的欢迎信息 ftpd_banner=Welcome to KJGG FTP service. #下面四句配置保证只有/etc/vsftpd/user_list 的用户能够登录 local_enable=YES #容许本地用户登陆 userlist_file=/etc/vsftpd/user_list userlist_deny=NO userlist_enable=YES #下面两句配置保证只有/etc/vsftpd/chroot_list的用户切换目录 chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list_file #设置PAM认证服务的配置文件名称,该文件存放 在/etc/pam.d/目录下 #pam_service_name=vsftpd #tcp_wrappers=YES #开启监听 listen=YES #命令通道端口,默认21 listen_port=21 #是否容许被动模式 pasv_enable=YES #下面两行设置被动模式链接时的端口范围,建议配置大一点的,安全性高 pasv_max_port=60000 pasv_min_port=60010 #vsftp服务器指定IP地址 pasv_address=ftp服务器ip #这是由于从2.3.5以后,vsftpd加强了安全检查,若是用户被限定在了其主目录下,则该用户的主目录不能再具备写权限了! #若是检查发现还有写权限,就会报该错误。要修复这个错误,须要添加下面一行 allow_writeable_chroot=YES
/etc/vsftpd/chroot_list_file
ftp123
/etc/vsftpd/chroot_list_file
ftp123
/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
/usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf &