CentOS下源碼安裝vsftpd-3.0.0,並設置指定用戶訪問指定目錄(附帶完整配置文件)

1.卸載系統已經存在的ftp服務器

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

2.解壓源碼包

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

3.安裝

完成以上步驟,到解壓目錄安全

3.1 查看系統版本,肯定合適版本的ftp壓縮包

使用
cat /etc/issue
  或
cat /etc/redhat-release
(Linux查看版本當前操做系統發行版信息)

CentOS Linux release 7.1.1503 (Core)服務器

。。。所以肯定vsftpd-3.0.0.tar.gz,解壓壓縮包,命令爲:
tar -zxvf vsftpd-3.0.0.tar.gz 

3.2 查看系統是32位仍是64位的

getconf LONG_BIT
顯示結果爲:64
。。。系統爲64位的,須要替換vsf_findlibs.sh文件夾中的lib路徑,命令以下:
# sed -i 's/lib\//lib64\//g' vsf_findlibs.sh
不然會報下面錯誤
「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 -lcap
collect2: ld 返回 1
make: *** [vsftpd] 錯誤 1」

3.3 編譯與安裝

到解壓的目錄(/home/cloudlogin/vsftpd-3.0.0/)去make,沒有錯誤,再去make install
若是安裝過程沒報錯誤,就表示安裝成功。  安裝成功,須要將解壓目錄下的 vsftpd.conf 文件複製到 /etc/vsftpd 目錄下
cp vsftpd.conf /etc/vsftpd
執行
cp Redhat/vsftpd.pam /etc/pam.d/
pam 文件複製到 /etc/pam.d 目錄下,
這個 pam 文件要重命名:
mv /etc/pam.d/vsftpd.pam /etc/pam.d/vsftpd
 而後在/etc/vsftpd/目錄下建立chroot_list_file文件,往裏面添加一行ftp123(即下面建立的用戶)

3.4 添加用戶並指定目錄

 添加用戶ftp123,並指定用戶家目錄/data/ftp_dirsession

 useradd -d /data/ftp_dir/ ftp123 
再修改用戶ftp123密碼
passwd ftp123
 兩次輸入密碼:ftp!@#456

3.5 修改目錄權限

chmod 775 /data/ftp_dir/
ll

3.6 修改配置文件/etc/vsftpd/vsftpd.conf

去掉註釋並修改(禁止匿名訪問),anonymous_enable=NO
去掉註釋(容許本地用戶訪問),local_enable=YES
去掉日誌註釋,xferlog_std_format=YES
去掉註釋並修改(鏈接超時時間),data_connection_timeout=120
去掉歡迎註釋(登錄歡迎提示),ftpd_banner=Welcome to KJGG FTP service.
-------------這兩句實現指定用戶執行chroot-----------------------
去掉用戶文件註釋,chroot_list_file=/etc/vsftpd/chroot_list_file |
去掉註釋,chroot_list_enable=YES                                |
-------------這兩句實現指定用戶執行chroot-----------------------
在最後一行添加以下內容,
    listen_port=21
    pasv_max_port=2100
    pasv_min_port=2100

3.7 修改防火牆,並重啓

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
 

4.驗證

方式一:使用工具FileZilla(適用於ftp服務器有公網地址)
4.1.1 打開FileZilla,用填入鏈接信息
主機:用公網地址117.27.128.183
用戶名:ftp123
密碼:ftp!@#456
端口:21
(注:若是沒有filezilla工具,請到https://filezilla-project.org/download.php?type=client下載)
4.1.2 測試是否只能在操做上面指定的目錄(/data/ftp_dir/)
     而且是否能進行上傳和下載
 
方式二:使用客戶端軟件ftp(適用於ftp服務器無公網地址)
4.2.1 安裝
yum install ftp

4.2.2 登錄

ftp ip地址

  出現以上提示表示登錄成功了

4.2.3 上傳文件
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)

下面看一個完整操做

 

5.安裝常見問題

5.1  530 Login incorrect

解決思路:修改vsftpd.conf配置文件,添加pam_service_name=vsftpd配置,注意這裏的配置文件值爲:vsftpd,對應的是/etc/pam.d/vsftpd文件,因此複製到pam.d目錄的vsftpd.pam須要進行更名;重啓ftp驗證。

若是還不能解決,能夠考慮編輯vi /etc/pam.d/vsftpd,將文件中的因此lib替換爲lib64,再重啓ftp便可。

5.2    500 illegal port command

解決思路:出現這個問題時,能夠考慮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地址,因此進行配置的時候,要指定地址,這樣再鏈接的時候纔會直接鏈接外網地址。

5.3     500 OOPS: cannot change directory:/home/xxxx

解決思路:遇到這個問題能夠考慮是不是服務器的selinux防火牆開啓了,能夠經過一下命令進行防火牆關閉:setsebool -P ftpd_disable_trans 1,須要重啓ftpservice vsftpd restart

還能夠經過命令:sestatus -b | grep ftp查看ftp的狀態,最主要查看ftp_home_dir的值是on 仍是off,若是是off,經過命令setsebool -P  ftp_home_dir  on設置爲on

5.4   530 Permission denied

 解決思路:遇到這個問題能夠考慮是否配置userlist_enable選項,查看/etc/vsftpd.user_list或者/etc/vsftpd/vsftpd.user_list是否限制了當前用戶,將該用戶從文件中刪除或者設置userlist_deny=NO

5.5   500 OOPS: vsftpd: refusing to run with writable root inside chroot()

解決思路:這是由於從2.3.5以後,vsftpd加強了安全檢查,若是用戶被限定在了其主目錄下,則該用戶的主目錄不能再具備寫權限了!若是檢查發現還有寫權限,就會報該錯誤。

 要修復這個錯誤,能夠在vsftpd的配置文件/etc/vsftpd/vsftpd.conf添加一行「 allow_writeable_chroot=YES

5.6   500 Illegal PORT command.

狀態:   正在鏈接 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

 

  便可

5.7   421 Timeout.

  修改/etc/vsftpd/vsftpd.comf的data_connection_timeout的值更大便可

 

 

6.配置文件

/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
View Code

/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
View Code

 

7.其餘

配置開機自啓動
在/etc/rc.local添加
/usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf &
便可
相關文章
相關標籤/搜索