FTP簡介:
文件傳輸協議(File Transfer Protocol,FTP),基於該協議FTP客戶端與服務端可以實現共享文件、上傳文件、下載文件。 FTP 基於TCP協議生成一個虛擬的連接,主要用於控制FTP連接信息,同時再生成一個單獨的TCP連接用於FTP數據傳輸。用戶可以通過客戶端向FTP服務器端上傳、下載、刪除文件,FTP服務器端可以同時提供給多人共享使用。
FTP服務是Client/Server(簡稱C/S)模式,基於FTP協議實現FTP文件對外共享及傳輸的軟件稱之為FTP服務器源端,客戶端程序基於FTP協議,則稱之為FTP客戶端,FTP客戶端可以向FTP服務器上傳、下載文件。
傳輸模式:
FTP基於C/S模式,FTP客戶端與服務器端有兩種傳輸模式,分別是FTP主動模式、FTP被動模式,主被動模式均是以FTP服務器端為參照。主被動模式如圖8-2(a)、8-2(b)所示,主被動模式詳細區別如下:
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的連接用來傳送數據。
vsftpd服務安裝:
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install vsftpd
匿名用戶配置:
[root@localhost ~]# grep -Ev "^$|^#" /etc/vsftpd/vsftpd.conf
anonymous_enable=YES #開啟匿名用戶訪問 anon_upload_enable=YES #允許匿名用戶上傳文件 anon_mkdir_write_enable=YES #允許匿名用戶創建目錄 anon_other_write_enable=YES #允許匿名用戶其他寫入權限 local_enable=YES #啟用本地系統用戶訪問 write_enable=YES #本地系統用戶寫入權限 local_umask=022 #本地用戶創建文件及目錄默認權限掩碼 dirmessage_enable=YES #打印目錄顯示信息,通常用於用戶第一次訪問目錄時,信息提示 xferlog_enable=YES #啟用上傳/下載日志記錄 connect_from_port_20=YES #使用20端口進行數據傳輸 xferlog_std_format=YES #日志文件將根據xferlog的標准格式寫入 listen=NO #Vsftpd不以獨立的服務啟動,通過Xinetd服務管理 listen_ipv6=YES #啟用IPV6監聽 pam_service_name=vsftpd #登錄FTP服務器,依據/etc/pam.d/vsftpd中內容進行認證 userlist_enable=YES #vsftpd.user_list和ftpusers配置文件里用戶禁止訪問FTP tcp_wrappers=YES 設置vsftpd與tcp wrapper結合進行主機的訪問控制,Vsftpd服務器檢查/etc/hosts.allow 和/etc/hosts.deny中的設置,來決定請求連接的主機,是否允許訪問該FTP服務器
[root@localhost ~]# chown -R ftp /var/ftp/pub/
[root@localhost ~]# chmod o+w /var/ftp/pub/
重啟vsftpd服務,訪問測試上傳、刪除、創建等權限:
ftp默認被動模式,設置為主動模式使用端口方法:
pasv_enable=YES pasv_min_port=60000 pasv_max_port=60100
vsftpd虛擬用戶配置:
Vsftpd虛擬用戶原理:虛擬用戶就是沒有實際的真實系統用戶,而是通過映射到其中一個真實用戶以及設置相應的權限來實現訪問驗證,虛擬用戶不能登錄Linux系統,從而讓系統更加的安全可靠。
1)安裝vsftpd虛擬用戶需要用到的軟件及認證模塊:
[root@localhost ~]# yum -y install pam* db4
2)創建虛擬用戶臨時文件:
[root@localhost ~]# vim /etc/vsftpd/vuser.txt
ftp001 123456 ftp002 123456
3)生成vsftpd虛擬用戶數據庫認證文件:
[root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vsftpd_login.db
[root@localhost ~]# chmod 600 /etc/vsftpd/vsftpd_login.db
4)配置pam認證文件:
[root@localhost ~]# vim /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login
5)創建系統用戶,用於虛擬用戶映射使用
[root@localhost ~]# useradd -s /sbin/nologin ftpuser
6)vsftpd.conf主配置文件:
#global config Vsftpd 2017 anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES userlist_enable=YES tcp_wrappers=YES #config virtual user FTP pam_service_name=vsftpd #虛擬用戶啟用pam認證 guest_enable=YES #啟用虛擬用戶 guest_username=ftpuser #映射虛擬用戶至系統用戶ftpuser user_config_dir=/etc/vsftpd/vsftpd_user_conf #設置虛擬用戶配置文件所在目錄 virtual_use_local_privs=YES #虛擬用戶使用與本地用戶相同的權限
7)vsftpd虛擬用戶配置文件:
[root@localhost ~]# mkdir -p /etc/vsftpd/vsftpd_user_conf
[root@localhost ~]# vim /etc/vsftpd/vsftpd_user_conf/ftp001
local_root=/home/ftpuser/ftp001 #虛擬用戶文件路徑 write_enable=YES #允許登錄用戶寫權限 anon_world_readable_only=YES #允許匿名用戶下載 anon_upload_enable=YES #允許匿名用戶上傳權限,只有在write_enable=YES時該參數才生效 anon_mkdir_write_enable=YES #允許匿名用戶創建目錄,只有在write_enable=YES時該參數才生效 anon_other_write_enable=YES #允許匿名用戶其他權限,例如刪除、重命名等
9)創建虛擬用戶的目錄:
[root@localhost ~]# mkdir -p /home/ftpuser/{ftp001,ftp002}
[root@localhost ~]# chown -R ftpuser:ftpuser /home/ftpuser
10)重啟vsftpd,測試: