vsftpd(very secure ftp daemon,很是安全的FTP守護進程)是一款運行在Linux操做系統上的FTP服務程序,不只徹底開源並且免費,此外,還具備很高的安全性、傳輸速度,以及支持虛擬用戶驗證等其餘FTP服務程序不具有的特色。算法
在配置穩當Yum軟件倉庫以後,就能夠安裝vsftpd服務程序了。數據庫
[root@localhost ~]# yum install vsftpd
vsftpd服務程序的主配置文件(/etc/vsftpd/vsftpd.conf)內容總長度達到123行,但其中大多數參數在開頭都添加了井號(#),從而成爲註釋信息,你們沒有必要在註釋信息上花費太多的時間。咱們能夠在grep命令後面添加-v參數,過濾並反選出沒有包含井號(#)的參數行(即過濾掉全部的註釋信息),而後將過濾後的參數行經過輸出重定向符寫回原始的主配置文件中:vim
[root@localhost ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak [root@localhost ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf [root@localhost ~]# cat /etc/vsftpd/vsftpd.conf 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 pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES
vsftpd做爲更加安全的文件傳輸的服務程序,容許用戶以三種認證模式登陸到FTP服務器上。安全
匿名開放模式:是一種最不安全的認證模式,任何人均可以無需密碼驗證而直接登陸到FTP服務器。服務器
本地用戶模式:是經過Linux系統本地的帳戶密碼信息進行認證的模式,相較於匿名開放模式更安全,並且配置起來也很簡單。可是若是被黑客破解了帳戶的信息,就能夠暢通無阻地登陸FTP服務器,從而徹底控制整臺服務器。app
虛擬用戶模式:是這三種模式中最安全的一種認證模式,它須要爲FTP服務單獨創建用戶數據庫文件,虛擬出用來進行口令驗證的帳戶信息,而這些帳戶信息在服務器系統中其實是不存在的,僅供FTP服務程序進行認證使用。這樣,即便黑客破解了帳戶信息也沒法登陸服務器,從而有效下降了破壞範圍和影響。ssh
這裏看下 虛擬用戶模式 的典型配置tcp
第1步:建立用於進行FTP認證的用戶數據庫文件,其中奇數行爲帳戶名,偶數行爲密碼。例如,咱們分別建立出lightnear用戶,密碼均爲redhatui
[root@localhost ~]# cd /etc/vsftpd
[root@localhost vsftpd]# vim vuser.list
lightnear
redhat
可是,明文信息既不安全,也不符合讓vsftpd服務程序直接加載的格式,所以須要使用db_load命令用哈希(hash)算法將原始的明文信息文件轉換成數據庫文件,而且下降數據庫文件的權限(避免其餘人看到數據庫文件的內容),而後再把原始的明文信息文件刪除。spa
[root@localhost vsftpd]# db_load -T -t hash -f vuser.list vuser.db [root@localhost vsftpd]# file vuser.db vuser.db: Berkeley DB (Hash, version 9, native byte-order) [root@localhost vsftpd]# chmod 600 vuser.db [root@localhost vsftpd]# rm -f vuser.list
第2步:建立vsftpd服務程序用於存儲文件的根目錄以及虛擬用戶映射的系統本地用戶。FTP服務用於存儲文件的根目錄指的是,當虛擬用戶登陸後所訪問的默認位置。
因爲Linux系統中的每個文件都有全部者、所屬組屬性,例如使用虛擬帳戶「張三」新建了一個文件,可是系統中找不到帳戶「張三」,就會致使這個文件的權限出現錯誤。爲此,須要再建立一個能夠映射到虛擬用戶的系統本地用戶。簡單來講,就是讓虛擬用戶默認登陸到與之有映射關係的這個系統本地用戶的家目錄中,虛擬用戶建立的文件的屬性也都歸屬於這個系統本地用戶,從而避免Linux系統沒法處理虛擬用戶所建立文件的屬性權限。
爲了方便管理FTP服務器上的數據,能夠把這個系統本地用戶的家目錄設置爲/var目錄(該目錄用來存放常常發生改變的數據)。而且爲了安全起見,咱們將這個系統本地用戶設置爲不容許登陸FTP服務器,這不會影響虛擬用戶登陸,並且還能夠避免黑客經過這個系統本地用戶進行登陸。
[root@localhost ~]# useradd -d /var/ftproot -s /sbin/nologin virtual [root@localhost ~]# ls -ld /var/ftproot/ drwx------. 3 virtual virtual 74 Jul 14 17:50 /var/ftproot/ [root@localhost ~]# chmod -Rf 755 /var/ftproot/
第3步:創建用於支持虛擬用戶的PAM文件。
PAM(可插拔認證模塊)是一種認證機制,經過一些動態連接庫和統一的API把系統提供的服務與認證方式分開,使得系統管理員能夠根據需求靈活調整服務程序的不一樣認證方式。要想把PAM功能和做用徹底講透,至少要一個章節的篇幅才能夠(對該主題感興趣的讀者敬請關注本書的進階篇,裏面會詳細講解PAM)。
通俗來說,PAM是一組安全機制的模塊,系統管理員能夠用來輕易地調整服務程序的認證方式,而沒必要對應用程序進行任何修改。PAM採起了分層設計(應用程序層、應用接口層、鑑別模塊層)的思想。
新建一個用於虛擬用戶認證的PAM文件vsftpd.vu,其中PAM文件內的「db=」參數爲使用db_load命令生成的帳戶密碼數據庫文件的路徑,但不用寫數據庫文件的後綴:
[root@localhost ~]# vim /etc/pam.d/vsftpd.vu auth required pam_userdb.so db=/etc/vsftpd/vuser account required pam_userdb.so db=/etc/vsftpd/vuser
第4步:在vsftpd服務程序的主配置文件中經過pam_service_name參數將PAM認證文件的名稱修改成vsftpd.vu,PAM做爲應用程序層與鑑別模塊層的鏈接紐帶,可讓應用程序根據需求靈活地在自身插入所需的鑑別功能模塊。當應用程序須要PAM認證時,則須要在應用程序中定義負責認證的PAM配置文件,實現所需的認證功能。
例如,在vsftpd服務程序的主配置文件中默認就帶有參數pam_service_name=vsftpd,表示登陸FTP服務器時是根據/etc/pam.d/vsftpd文件進行安全認證的。如今咱們要作的就是把vsftpd主配置文件中原有的PAM認證文件vsftpd修改成新建的vsftpd.vu文件便可。
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=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
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/vuser_dir
anon_umask=022
pasv_max_port=21010
pasv_min_port=21001
第5步:爲虛擬用戶設置不一樣的權限。
[root@localhost ~]# mkdir /etc/vsftpd/vuser_dir/ [root@localhost ~]# cd /etc/vsftpd/vuser_dir/ [root@localhost vusers_dir]# touch lightnear [root@localhost vusers_dir]# vim lightnear guest_enable=YES guest_username=virtual local_root=/var/ftproot write_enable=yes pam_service_name=vsftpd.vu anon_umask=022 anon_world_readable_only=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
第6步:設置SELinux域容許策略,而後使用虛擬用戶模式登陸FTP服務器。相信你們能夠猜到,SELinux會繼續來搗亂。因此,先按照前面實驗中的步驟開啓SELinux域的容許策略,以避免再次出現操做失敗的狀況:
[root@localhost ~]# getsebool -a | grep ftp ftp_home_dir –> off ftpd_anon_write –> off ftpd_connect_all_unreserved –> off ftpd_connect_db –> off ftpd_full_access –> off ftpd_use_cifs –> off ftpd_use_fusefs –> off ftpd_use_nfs –> off ftpd_use_passive_mode –> off httpd_can_connect_ftp –> off httpd_enable_ftp_server –> off sftpd_anon_write –> off sftpd_enable_homedirs –> off sftpd_full_access –> off sftpd_write_ssh_home –> off tftp_anon_write –> off tftp_home_dir –> off [root@localhost ~]# setsebool -P ftpd_full_access=on
補充:解決中文亂碼問題[root@localhost ~]# vi /etc/sysconfig/i18nLANG="zh_CN.UTF-8"