由於是源碼安裝,因此不能經過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 &