Centos7安裝搭建FTP服務器


簡介:

vsftpd 是“very secure FTP daemon”的縮寫,安全性是它的一個最大的特點。

vsftpd 是一個 UNIX 類操作系統上運行的服務器的名字,它可以運行在諸如 Linux、BSD、Solaris、 HP-UNIX等系統上面,是一個完全免費的、開放源代碼的ftp服務器軟件,支持很多其他的 FTP 服務器所不支持的特征。

比如:非常高的安全性需求、帶寬限制、良好的可伸縮性、可創建虛擬用戶、支持IPv6、速率高等。

vsftpd是一款在Linux發行版中最受推崇的FTP服務器程序。特點是小巧輕快,安全易用。

特點:

①vsftpd 是以一般身份啟動服務,所以對於 Linux 系統的使用權限較低,對於Linux 系統的危害就相對的減低了。此外, vsftpd 亦利用 chroot() 這個函式進行改換根目錄的動作,使得系統工具不會被vsftpd 這支服務所誤用;
 
②任何需要具有較高執行權限的 vsftpd 指令均以一支特殊的上層程序( parent process ) 所控制 ,該上層程序享有的較高執行權限功能已經被限制的相當的低,並以不影響Linux 本身的系統為准;
 
③所有來自 clients 端,想要使用這支上層程序所提供的較高執行權限之vsftpd 指令的需求,均被視為『不可信任的要求』來處理,必需要經過相當程度的身份確認后,方可利用該上層程序的功能。例如chown(), Login 的要求等等動作;
 
④此外,上面提到的上層程序中,依然使用 chroot() 的功能來限制使用者的執行權限。

1.安裝vsftpd

環境:CentOS Linux release 7.6.1810 (Core)

vsftpd版本:vsftpd.x86_64 0:3.0.2-25.el7 

1.1、執行yum命令安裝

[root@Sungeek ~]# yum -y install vsftpd

1.2、修改配置文件

按照下面修改配置文件

[root@Sungeek ~]# cd /etc/vsftpd
[root@Sungeek ~]# vim vsftpd.conf
#是否允許匿名,默認no
anonymous_enable=NO

#這個設定值必須要為YES 時,在/etc/passwd內的賬號才能以實體用戶的方式登入我們的vsftpd主機
local_enable=YES

#具有寫權限
write_enable=YES

#本地用戶創建文件或目錄的掩碼
local_umask=022

#當dirmessage_enable=YES時,可以設定這個項目來讓vsftpd尋找該檔案來顯示訊息!您也可以設定其它檔名!
dirmessage_enable=YES

#當設定為YES時,使用者上傳與下載日志都會被紀錄起來。記錄日志與下一個xferlog_file設定選項有關
xferlog_enable=YESxferlog_std_format=YES

#上傳與下載日志存放路徑
xferlog_file=/var/log/xferlog 

#開啟20端口
connect_from_port_20=YES

#關於系統安全的設定值:
#ascii_download_enable=YES(NO)
#如果設定為YES ,那么 client 就可以使用 ASCII 格式下載檔案。
#一般來說,由於啟動了這個設定項目可能會導致DoS 的攻擊,因此預設是NO。
#ascii_upload_enable=YES(NO)
#與上一個設定類似的,只是這個設定針對上傳而言!預設是NO。
ascii_upload_enable=NO
ascii_download_enable=NO
#通過搭配能實現以下幾種效果: 
#①當chroot_list_enable=YES,chroot_local_user=YES時,在/etc/vsftpd.chroot_list文件中列出的用戶,可以切換到其他目錄;未在文件中列出的用戶,不能切換到其他目錄。 
#②當chroot_list_enable=YES,chroot_local_user=NO時,在/etc/vsftpd.chroot_list文件中列出的用戶,不能切換到其他目錄;未在文件中列出的用戶,可以切換到其他目錄。 
#③當chroot_list_enable=NO,chroot_local_user=YES時,所有的用戶均不能切換到其他目錄。 
#④當chroot_list_enable=NO,chroot_local_user=NO時,所有的用戶均可以切換到其他目錄。

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

#這個是pam模塊的名稱,我們放置在/etc/pam.d/vsftpd
pam_service_name=vsftpd

#當然我們都習慣支持TCP Wrappers的啦!
tcp_wrappers=YES

#不添加下面這個會報錯:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES

#ftp的端口號
listen_port=60021
#啟動被動式聯機(passivemode)
pasv_enable=YES
#上面兩個是與passive mode 使用的 port number 有關,如果您想要使用65400到65410 這 11 個 port 來進行被動式資料的連接,可以這樣設定
pasv_min_port=65400
pasv_max_port=65410

#FTP訪問目錄
local_root=/data/ftp/

1.3、添加防火牆開啟相關端口

這里要是測試可以先關閉防火牆

[root@tsemongo01 vsftpd]# systemctl stop firewalld

如果是正式環境,最好開啟防火牆,添加相應端口

#添加主端口
[root@tsemongo01 vsftpd]# firewall-cmd --permanent --zone=public --add-port=60021/tcp
success
#添加被動端口
[root@tsemongo01 vsftpd]# firewall-cmd --permanent --zone=public --add-port=65400-65410/tcp
success
[root@tsemongo01 vsftpd]# firewall-cmd --reload 
success

2、創建FTP用戶

添加FTP用戶命令:useradd XXX

設置FTP用戶密碼:passwd XXX

[root@Sungeek vsftpd]# useradd -d /data/ftp/ -s /sbin/nologin ftpuser
[root@Sungeek vsftpd]# passwd ftpuser

查看FTP用戶是否設置不能通過SSH登錄,只能使用FTP

[root@Sungeek vsftpd]# vim /etc/passwd

找到創建的用戶把/bin/bash修改為/sbin/nologin

 

 

 設置用戶訪問權限:

[root@Sungeek vsftpd]# chown -R ftpuser /data/ftp

3、設置vsftpd服務開機啟動

[root@Sungeek ~]# systemctl enable vsftpd.service

4、啟動暫停查看服務狀態命令

[root@Sungeek ~]# systemctl start vsftpd.service 
[root@Sungeek ~]# systemctl status vsftpd.service 

 

 

 

5、常見問題

5.1、問題1:

這種情況是說明配置文件里面設置的chroot_list_file=/etc/vsftpd/chroot_list沒找到這個文件

直接去/etc/vsftpd目錄cp一個user_list或者把配置文件里面改名就行

 

 

5.2、問題2:

 

 這種情況是selinux沒有關閉,關閉selinux即可

[root@localhost ~]# vim /etc/selinux/config

SELINUX=disabled

 

 

 

主動FTP:

1. 在主動模式下,客戶端會開啟N和N+1兩個端口,N為客戶端的命令端口,N+1為客戶端的數據端口。

第一步,客戶端使用端口N連接FTP服務器的命令端口21,建立控制連接並告訴服務器我這邊開啟了數據端口N+1。

第二步,在控制連接建立成功后,服務器會使用數據端口20,主動連接客戶端的N+1端口以建立數據連接。這就是FTP主動模式的連接過程。

我們可以看到,在這條紅色的數據連接建立的過程中,服務器是主動的連接客戶端的,所以稱這種模式為主動模式。


     命令連接:客戶端 >1023端口 -> 服務器 21端口
     數據連接:客戶端 >1023端口 <- 服務器 20端口 

被動FTP:

 

 

2.被動模式下

第一步,客戶端的命令端口N主動連接服務器命令端口21,並發送PASV命令,告訴服務器用“被動模式”,控制連接建立成功后,服務器開啟一個數據端口P,通過PORT命令將P端口告訴客戶端。

第二步,客戶端的數據端口N+1去連接服務器的數據端口P,建立數據連接

我們可以看到,在這條紅色的數據連接建立的過程中,服務器是被動的等待客戶端來連接的,所以稱這種模式為被動模式。


     命令連接:客戶端 >1023端口 -> 服務器 21端口
     數據連接:客戶端 >1023端口 -> 服務器 >1023端口 


免責聲明!

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



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