FTP,即:文件傳輸協議(File Transfer Protocol),基於客戶端/服務器模式,默認使用20、21端口號,其中端口20(數據端口)用於進行數據傳輸,端口21(命令端口)用於接受客戶端發出的相關FTP命令與參數。FTP服務器廣泛部署於局域網中,具備容易搭建、方便管理的特色。並且有些FTP客戶端工具還能夠支持文件的多點下載以及斷點續傳技術,所以FTP服務獲得了廣大用戶的青睞。
FTP協議有如下兩種工做模式:python
vsftpd是一款運行在Linux操做系統上的FTP服務程序,具備很高的安全性和傳輸速度。
vsftpd有如下三種認證模式:linux
表1:vsftpd服務經常使用的參數以及做用
算法
一、安裝vsftpd服務yum -y install vsftpd
二、去掉配置文件裏的註釋行數據庫
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak grep -v "#" /etc/vsftpd/vsftpd.conf.bak > /etc/vsftpd/vsftpd.conf
三、配置firewalld防火牆開放2231和45000-49000端口vim
firewall-cmd --permanent --add-port=2231/tcp firewall-cmd --permanent --add-port=45000-49000/tcp firewall-cmd --reload
四、配置selinux容許FTP服務
注:沒有selinux相關命令的話,須要安裝policycoreutils-python包安全
yum -y install policycoreutils-python.x86_64 setsebool -P ftpd_full_access=on
一、修改配置文件,帶註釋的是須要修改和新增的配置vim /etc/vsftpd/vsftpd.conf
服務器
anonymous_enable=YES #啓用匿名訪問模式 anon_umask=022 #匿名用戶上傳文件的umask值 anon_upload_enable=YES #容許匿名用戶上傳文件 anon_mkdir_write_enable=YES #容許匿名用戶建立目錄 anon_other_write_enable=YES #容許匿名用戶重命名、刪除等操做 anon_root=/data/anon #匿名用戶的FTP根目錄 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_port=2231 #vsftpd服務監聽的端口號 listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES pasv_min_port=45000 #PASV模式最小端口號 pasv_max_port=49000 #PASV模式最大端口號
二、建立並受權匿名用戶FTP根目錄app
mkdir -p /data/anon/pub chown -R ftp /data/anon/pub/
三、啓動vsftpd服務,並加入開機啓動tcp
systemctl start vsftpd systemctl enable vsftpd
四、測試
ide
一、修改配置文件,刪除以前的匿名模式配置內容,帶註釋的是須要修改和新增的配置vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #關閉匿名訪問模式 local_enable=YES write_enable=YES local_umask=022 local_root=/data/user #指定本地用戶的FTP根目錄 chroot_local_user=YES #將用戶權限禁錮在FTP目錄 allow_writeable_chroot=YES #容許對FTP根目錄執行寫入操做 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen_port=2231 listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES pasv_min_port=45000 pasv_max_port=49000
二、建立本地用戶,並指定家目錄
useradd -d /data/user -s /sbin/nologin user echo "123456" | passwd --stdin user
三、重啓vsftpd服務systemctl restart vsftpd
四、測試
一、建立用於FTP認證的用戶數據庫文件vim /etc/vsftpd/vuser.txt
注:第一行用戶名,第二行密碼,依此類推
xuad 123456 limin 123456
明文信息不安全,須要使用db_load命令用哈希(hash)算法將明文信息轉換成數據文件,而後將明文信息文件刪除。
db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db chmod 600 /etc/vsftpd/vuser.db rm -f /etc/vsftpd/vuser.txt
二、建立虛擬用戶映射的系統本地用戶和FTP根目錄
useradd -d /data/ftproot -s /sbin/nologin virtual chmod -Rf 755 /data/ftproot/
三、創建用於支持虛擬用戶的PAM文件
PAM(可插拔認證模塊)是一種認證機制,經過一些動態連接庫和統一的API把系統提供的服務與認證方式分開,使得系統管理員能夠根據需求靈活調整服務程序的不一樣認證方式。PAM採用了分層設計(應用程序層、應用接口層、鑑別模塊層)的思想,其結構以下圖所示。
新建一個用於虛擬用戶認證的PAM文件vsftpd.vu,其中PAM文件內的「db=」參數爲使用db_load命令生成的帳戶密碼數據文件的路徑,但不用寫數據文件的後綴。vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser account required pam_userdb.so db=/etc/vsftpd/vuser
四、爲兩個虛擬用戶設置不一樣的權限,xuad擁有全部權限,而limin只有讀取權限。
mkdir /etc/vsftpd/vusers_dir touch /etc/vsftpd/vusers_dir/limin vim /etc/vsftpd/vusers_dir/xuad
anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
五、修改配置文件,刪除以前的匿名模式配置內容,帶註釋的是須要修改和新增的配置vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO anon_umask=022 local_enable=YES guest_enable=YES #開啓虛擬用戶模式 guest_username=virtual #指定虛擬用戶對應的系統用戶 allow_writeable_chroot=YES #容許對FTP根目錄執行寫入操做 write_enable=YES local_umask=022 local_root=/data/ftproot dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen_port=2231 listen=NO listen_ipv6=YES pam_service_name=vsftpd.vu #指定PAM文件 userlist_enable=YES tcp_wrappers=YES user_config_dir=/etc/vsftpd/vusers_dir #指定虛擬用戶配置文件目錄 pasv_min_port=45000 pasv_max_port=49000
六、重啓vsftpd服務systemctl restart vsftpd
七、測試