在centos7中搭建FTP伺服器

2020-10-03 12:02:04

FTP伺服器

在centos7中搭建FTP伺服器

FTP:檔案傳輸協定,工作模式[使用者端/伺服器],FTP服務的埠號:tcp/21、tcp/20

FTP主動模式:使用者端從一個任意的埠N(N>1024)連線到FTP伺服器的port 21命令埠,使用者端開始監聽埠N+1,並行送FTP命令「port N+1」到FTP伺服器,FTP伺服器以資料埠(20)連線到使用者端指定的資料埠(N+1)。

FTP被動模式:使用者端從一個任意的埠N(N>1024)連線到FTP伺服器的port 21命令埠,使用者端開始監聽埠N+1,使用者端提交 PASV命令,伺服器會開啟一個任意的埠(P >1024),並行送PORT P命令給使用者端。使用者端發起從本地埠N+1到伺服器的埠P的連線用來傳送資料。

在企業實際環境中,如果FTP使用者端與FTP伺服器端均開放防火牆,FTP需以主動模式工作,這樣只需要在FTP伺服器端防火牆規則中,開放20、21埠即可。

一、FTP伺服器簡介

FTP(File Transfer Protocol):檔案傳輸協定,是一個客戶機/伺服器系統。使用FTP的使用者需要經過驗證後才能登入,FTP伺服器的使用者可分成3類。

系統使用者:即系統本機的使用者。Linux一般不會針對實體使用者進行限制,因此實體使用者可以針對整個檔案系統進行工作。但通常不希望他們通過FTP方式遠端存取系統。

虛擬使用者:只能採用FTP方式使用系統的使用者,不能直接使用Shell登入系統,即虛擬使用者,存取伺服器時需要驗證。大多數FTP使用者是這類使用者。

匿名使用者:對於公共性質的伺服器可以提供匿名使用者存取,使用者名稱:anonymous。但在使用匿名使用者時,應對其進行儘可能多的限制,許可權較低,如:同時連線的使用者數量受限,存取的檔案數目受限,不能上傳檔案,允許操作的指令較少,設定匿使用者同時登入的最大聯機數量等。

二、FTP伺服器的安裝

1、使用預設yum源安裝vsftpd軟體包

#yum install vsftpd ftp

2、啟動服務並設定開機自啟

vsftpd的服務名稱:vsftpd.service

#systemctl start vsftpd.service    啟動服務
#systemctl enable vsftpd.service   開機自啟

3、設定防火牆與selinux機制

#firewall-cmd --permanent --zone=public --add-service=ftp
#firewall-cmd --reload
#systemctl stop firewalld
#setenforce 0

4、存取ftp伺服器

Linux系統中使用ftp命令進行存取

在windows使用者端存取ftp伺服器

三、設定匿名使用者存取ftp

1、匿名使用者存取FTP相關知識點

(1)預設允許匿名使用者與系統使用者存取ftp,存取的預設目錄是:/var/ftp

存取測試(使用者名稱:anonymous 密碼為空)

(2)ftp的組態檔是:/etc/vsftpd/vsftpd.conf

設定匿名使用者存取ftp:

anonymous_enable=YES

(3)設定匿名使用者登入ftp時不輸入密碼:

​no_anon_password=YES
ftpd_banner= welcome to our home!   //設定提示內容

(4)設定匿名使用者上傳、新建、刪除檔案:

anon_upload_enable=YES       匿名使用者上傳許可權
anon_mkdir_write_enable=YES  匿名使用者新建資料夾的許可權
anon_other_write_enable=yes  匿名使用者刪除和修改檔案的許可權

(5)設定檔案許可權

chmod 777 pub   不推薦使用
setfacl -m u:ftp:rwx pub   推薦使用

(6)設定匿名使用者上傳或新建檔案的許可權

​umask值:決定了新建檔案或資料夾時的預設許可權
umask值的表示方法:0022

如果使用vsftp的是本地使用者,則要修改組態檔中的 local_umask 的值;
如果使用vsftp的是虛擬使用者,則要修改組態檔中的 anon_umask 的值。

umask = 022 時,新建的目錄 許可權是755,檔案的許可權是 644;
umask = 077 時,新建的目錄 許可權是700,檔案的許可權時 600。

(7)設定不允許系統使用者登入,只能匿名使用者登入:

 anonymous_enable=YES
 local_enable=no

(8)設定匿名使用者存取ftp的預設目錄

anon_root=/var/ftp
anon_root=/var/public

注意:要修改vsftp伺服器匿名使用者預設目錄時,不可以將anon_root設定為一個其他賬號已有的家目錄,否則不能實現匿名使用者存取ftp伺服器。

四、設定系統使用者存取FTP伺服器

1、系統使用者存取FTP相關知識

(1)系統使用者預設存取主目錄,具有上傳、下載、新建、刪除的許可權,還可以切換到的系統其他目錄。

關閉匿名使用者存取,只允許系統使用者存取

anonymous_enable=no     關閉匿名使用者存取
local_enable=yes         允許系統使用者存取
local_umask=022

(2)設定系統使用者只能存取自己的主目錄並具有所有許可權,不允許切換到系統的其他目錄。

chroot_local_user=YES   控制使用者存取路徑存取自己的主目錄,不能切換到其他目錄
allow_writeable_chroot=YES  允許寫入
ftpd_banner= welcome to our home!
max_clients=30   設定最大連線數
idle_session_timeout=600   設定超時時間

(3)設定系統使用者存取指定目錄,不允許切換到系統的其他目錄,並具上傳、下載、新建、刪除的許可權。

local_root=/mnt/public/   設定系統使用者存取ftp的預設目錄
write_enable=YES          允許寫入
chroot_local_user=YES      控制使用者存取路徑存取指定目錄,不能切換到其他目錄
allow_writeable_chroot=YES 允許寫入

​ 修改/mnt/public/目錄下的檔案許可權

2、基於本地使用者的存取控制

預設情況下,ftp伺服器中所有系統使用者都可以存取ftp,如何來限定只有指定的系統使用者可以存取呢?vsftp中提供了兩個與系統使用者相關的組態檔:

/etc/vsftpd/ftpusers 提供了一份用於禁止登入的ftp使用者列表(黑名單)。 此檔案中包含的使用者將被禁止登入vsftpd伺服器,不管該使用者是否在/etc/vfsftpd/user_list中出現。

/etc/vsftpd/user_list 提供了一份用於允許登入的ftp使用者列表(白名單),此檔案中包含的使用者可能被禁止登入,可能被允許登入。

具體在主組態檔vsftpd.conf中決定:

​ 當存在userlist_enable=YES時,user_list檔案生效。

​ 當存在userlist_deny=YES時,則僅禁止列表中的帳戶登入。

​ 當存在userlist_deny=NO時,則允許列表中使用者登入。

其中:ftpusers檔案的優先順序要高於user_list檔案,即如果一個使用者同時存在於兩個檔案中,則被拒絕存取ftp。

舉例:只讓ftpuser使用者存取ftp,那麼可以進行如下設定:

 #vim /etc/vsftpd/vsftpd.conf
		userlist_enable=YES      #啟用userlist使用者列表(系統預設設定)
		userlist_deny=NO         #只允許列表中的使用者登入    
#vim/etc/vsftpd/user_list

將服務重新啟動後,在使用者端測試,此時只有ftpuser使用者可以存取ftp

五、設定虛擬使用者存取FTP

1、安裝Vsftpd虛擬使用者需要用到的軟體及認證模組

#yum install pam* libdb-utils libdb* --skip-broken -y

2、建立虛擬使用者臨時檔案/etc/vsftpd/ftpusers.txt,使用者名稱密碼格式如下:

​ Techftp 使用者名稱

​ 123456 密碼

​ netftp

​ 123456

​ admftp

​ 123456

​ markftp

​ 123456

3、生成Vsftpd虛擬使用者資料庫認證檔案,設定許可權為600

#db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftp_login.db
#chmod 600 /etc/vsftpd/vsftp_login.db 

4、設定PAM認證檔案:vim /etc/pam.d/vsftpd.vu

auth   required   pam_userdb.so   db=/etc/vsftpd/vsftp_login
account  required  pam_userdb.so  db=/etc/vsftpd/vsftp_login

5、建立一個系統使用者,用於虛擬使用者對映

#useradd -s /sbin/nologin ftpuser

6、修改組態檔:#vim /etc/vsftpd/vsftpd.conf

pam_service_name=vsftpd
pam_service_name=vsftpd.vu
guest_enable=YES    開啟系統虛擬使用者存取
guest_username=ftpuser   指定系統虛擬使用者
user_config_dir=/etc/vsftpd/vsftpd_user_conf		指定虛擬使用者的組態檔目錄
virtual_use_local_privs=YES   允許虛擬使用者存取

7、分別為虛擬使用者建立私有的虛擬目錄與獨立的組態檔

#mkdir /home/ftpuser/techftp
#mkdir /etc/vsftpd/vsftpd_user_conf
#vim techftp
	local_root=/home/ftpuser/techftp   預設存取的目錄
	write_enable=YES   允許寫入
	anon_world_readable_only=YES   允許瀏覽
	anon_upload_enable=YES
	anon_mkdir_write_enable=YES
	anon_other_write_enable=YES
#mkdir /home/ftpuser/netftp
#vim netftp
	local_root=/home/ftpuser/netftp
	write_enable=YES
	virtual_use_local_privs=NO      #不具有可登入使用者的許可權     
	anon_world_readable_only=YES             #可瀏覽目錄
	anon_upload_enable=YES
	anon_mkdir_write_enable=YES
	anon_other_write_enable=YES

六、Vsftpd紀錄檔管理

1、Vsftp軟體搭建的FTP伺服器的紀錄檔檔案的設定,在/etc/vsftpd.conf中找到:

​ xferlog_enable=YES 開啟FTP伺服器記錄上傳下載的情況

​ xferlog_std_format=YES 紀錄檔格式

​ xferlog_file=路徑 指定紀錄檔檔案

預設為:/var/log/xferlog

2、紀錄檔檔案輸出格式如下:

(1)當前時間(為本地時間),格式為:DDD MMM dd hh:mm:ss YYYY

(2)傳輸時間:傳送檔案所用時間,單位為秒

(3)遠端主機名稱/IP:

(4)檔案大小:傳輸檔案的大小,單位為byte

(5)檔名:傳輸檔名,包括路徑

(6)傳輸型別:a–以ASCII傳輸;b–以二進位制檔案傳輸

(7)特殊處理標誌:

​ _:不做任何特殊處理

​ c:檔案是壓縮格式

​ u:檔案是非壓縮格式

​ t:檔案時tar格式

(8)傳輸方向:o 從FTP伺服器向用戶端傳輸;i 從使用者端向FTP伺服器傳輸

(9)存取模式:a 匿名使用者;g 來賓使用者;r 系統中的使用者

(10)使用者名稱

(11)服務名:一般為FTP

(12)認證方式:0 無; 1 RFC931認證

(13)認證使用者id:如果使用*,測表示無法獲得該id

(14)完成狀態:i 傳輸未完成;c表示傳輸已完成。