FTP簡介:數據庫
文件傳輸協議(File Transfer Protocol,FTP),基於該協議FTP客戶端與服務端能夠實現共享文件、上傳文件、下載文件。 FTP 基於TCP協議生成一個虛擬的鏈接,主要用於控制FTP鏈接信息,同時再生成一個單獨的TCP鏈接用於FTP數據傳輸。用戶能夠經過客戶端向FTP服務器端上傳、下載、刪除文件,FTP服務器端能夠同時提供給多人共享使用。vim
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)。app
FTP被動模式:客戶端從一個任意的端口N(N>1024)鏈接到FTP服務器的port 21命令端口,客戶端開始監聽端口N+1,客戶端提交 PASV命令,服務器會開啓一個任意的端口(P >1024),併發送PORT P命令給客戶端。客戶端發起從本地端口N+1到服務器的端口P的鏈接用來傳送數據。tcp
vsftpd服務安裝:測試
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install vsftpdui
匿名用戶配置:spa
[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,測試: