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


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

因為是源碼安裝,所以不能通過rpm -qa的方式查看是否已經安裝ftp服務器,可以通過find / | grep vsftp*方式查看系統中存在哪些與vsftpd相關的文件,找出來通過rm刪除。

以下刪除代碼為參考:

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

編碼解決:

vi opts.c

if (str_equal_text(&p_sess->ftp_arg_str,"UTF8 ON"))

更改成if (str_equal_text(&p_sess->ftp_arg_str,"DISABLE UTF8 ON"))

注意:安裝之前,先查看系統是否為64(用getconf LONG_BIT命令),需要更改vsf_findlibs.sh文件庫中lib 路徑,命令如下:

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_dir

 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

再重啟

/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 &
即可

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM