使用 vsftpd 服務傳輸文件
1.文件傳輸協議(File Transfer Protocol,FTP)
FTP是一種在互聯網中進行文件傳輸的協議,基於客戶端/服務器模式,默認使用20、21號端口,其中端口20(數據端口)用於進行數據傳輸,端口21(命令端口)用於接受客戶端發出的相關FTP命令與參數。
FTP服務器是按照FTP協議在互聯網上提供文件存儲和訪問服務的主機,FTP客戶端則是向服務器發送連接請求,以建立數據傳輸鏈路的主機。FTP協議有下面兩種工作模式。
主動模式:FTP服務器主動向客戶端發起連接請求。
被動模式:FTP服務器等待客戶端發起連接請求(FTP的默認工作模式)。
vsftpd(very secure ftp daemon,非常安全的FTP守護進程)是一款運行在Linux操作系統上的FTP服務程序,完全開源且免費,此外,還具有很高的安全性、傳輸速度,以及支持虛擬用戶驗證等特性。在配置好Yum軟件倉庫之後,就可以安裝vsftpd服務程序了。
過濾 vsftpd 服務主配置文件(/etc/vsftpd/vsftpd.conf)的註釋(#)信息:
2.vsftpd 服務程序
vsftpd作為更加安全的文件傳輸的服務程序,允許用戶以三種認證模式登錄到FTP服務器上。
匿名開放模式:是一種最不安全的認證模式,任何人都可以無需密碼驗證而直接登錄到FTP服務器。
本地用戶模式:是通過Linux系統本地的賬戶密碼信息進行認證的模式,相較於匿名開放模式更安全,而且配置起來也很簡單。但是如果被黑客破解了賬戶的信息,就可以暢通無阻地登錄FTP服務器,從而完全控制整臺服務器。
虛擬用戶模式:是這三種模式中最安全的一種認證模式,它需要為FTP服務單獨建立用戶數據庫文件,虛擬出用來進行口令驗證的賬戶信息,而這些賬戶信息在服務器系統中實際上是不存在的,僅供FTP服務程序進行認證使用。這樣,即使黑客破解了賬戶信息也無法登錄服務器,從而有效降低了破壞範圍和影響。
ftp是Linux系統中以命令行界面的方式來管理FTP傳輸服務的客戶端工具,安裝ftp客戶端。
2.1 匿名開放模式
vsftpd服務程序默認開啟了匿名開放模式, 可以向匿名用戶開放的權限參數以及作用如下:
在vsftpd服務程序的主配置文件中正確填寫參數,然後保存並退出。
重啟服務並設置永久生效。
現在就可以在客戶端執行ftp命令連接到遠程的FTP服務器了。在vsftpd服務程序的匿名開放認證模式下,其賬戶統一為anonymous,密碼為空。在連接到FTP服務器後,默認訪問的是/var/ftp目錄。我們可以切換到該目錄下的pub目錄中,然後嘗試創建一個新的目錄文件,以檢驗是否擁有寫入權限:
創建失敗,應該是 SELinux 服務的問題,查看與FTP相關的SELinux域策略都有哪些:
ftpd_full_access--> off策略規則導致了操作失敗。接下來修改該策略規則,並且在設置時使用-P參數讓修改過的策略永久生效,確保在服務器重啟後依然能夠順利寫入文件。
然後即可順利執行文件創建修改刪除等操作(將目錄的所有者身份改成系統賬戶ftp)。
2.2 本地用戶模式
本地用戶模式使用的權限參數及作用:
此時,按本地用戶登錄,登錄失敗:
這是因為vsftpd服務程序所在的目錄中默認存放著兩個名為“用戶名單”的文件(ftpusers和user_list),只要裏面寫有某位用戶的名字,就不再允許這位用戶登錄到FTP服務器上。
vsftpd服務程序為了保證服務器的安全性而默認禁止了root管理員和大多數系統用戶的登錄行為,這樣可以有效地避免黑客通過FTP服務對root管理員密碼進行暴力破解。如果在生產環境中使用root管理員不會對系統安全產生影響,只需刪除掉root用戶名即可。我們也可以選擇ftpusers和user_list文件中沒有的一個普通用戶嘗試登錄FTP服務器:
2.3 虛擬用戶模式
第一步:創建用於進行FTP認證的用戶數據庫文件,其中奇數行為賬戶名,偶數行為密碼。
但是,明文信息既不安全,也不符合讓vsftpd服務程序直接加載的格式,因此需要使用db_load命令用哈希(hash)算法將原始的明文信息文件轉換成數據庫文件,並且降低數據庫文件的權限(避免其他人看到數據庫文件的內容),然後再把原始的明文信息文件刪除。
第二步:創建vsftpd服務程序用於存儲文件的根目錄以及虛擬用戶映射的系統本地用戶。FTP服務用於存儲文件的根目錄指的是,當虛擬用戶登錄後所訪問的默認位置。
由於Linux系統中的每一個文件都有所有者、所屬組屬性,例如使用虛擬賬戶“張三”新建了一個文件,但是系統中找不到賬戶“張三”,就會導致這個文件的權限出現錯誤。為此,需要再創建一個可以映射到虛擬用戶的系統本地用戶。簡單來說,就是讓虛擬用戶默認登錄到與之有映射關系的這個系統本地用戶的家目錄中,虛擬用戶創建的文件的屬性也都歸屬於這個系統本地用戶,從而避免Linux系統無法處理虛擬用戶所創建文件的屬性權限。
為了方便管理FTP服務器上的數據,可以把這個系統本地用戶的家目錄設置為/var目錄(該目錄用來存放經常發生改變的數據)。並且為了安全起見,我們將這個系統本地用戶設置為不允許登錄FTP服務器,這不會影響虛擬用戶登錄,而且還可以避免黑客通過這個系統本地用戶進行登錄。
第三步:建立用於支持虛擬用戶的PAM文件。通俗來講,PAM是一組安全機制的模塊,系統管理員可以用來輕易地調整服務程序的認證方式,而不必對應用程序進行任何修改。新建一個用於虛擬用戶認證的PAM文件vsftpd.vu,其中PAM文件內的“db=”參數為使用db_load命令生成的賬戶密碼數據庫文件的路徑,但不用寫數據庫文件的後綴:
第四步:在vsftpd服務程序的主配置文件中通過pam_service_name參數將PAM認證文件的名稱修改為vsftpd.vu。
PAM作為應用程序層與鑒別模塊層的連接紐帶,可以讓應用程序根據需求靈活地在自身插入所需的鑒別功能模塊。當應用程序需要PAM認證時,則需要在應用程序中定義負責認證的PAM配置文件,實現所需的認證功能。
例如,在vsftpd服務程序的主配置文件中默認就帶有參數pam_service_name=vsftpd,表示登錄FTP服務器時是根據/etc/pam.d/vsftpd文件進行安全認證的。
利用PAM文件進行認證時使用的參數以及作用如下:
第五步:為虛擬用戶設置不同的權限。
雖然賬戶zhangsan和lisi都是用於vsftpd服務程序認證的虛擬賬戶,但是我們依然想對這兩人進行區別對待。比如,允許張三上傳、創建、修改、查看、刪除文件,只允許李四查看文件。這可以通過vsftpd服務程序來實現。
只需新建一個目錄,在裏面分別創建兩個以zhangsan和lisi命名的文件,其中在名為zhangsan的文件中寫入允許的相關權限(使用匿名用戶的參數):
然後再次修改vsftpd主配置文件,通過添加user_config_dir參數來定義這兩個虛擬用戶不同權限的配置文件所存放的路徑。為了讓修改後的參數立即生效,需要重啟vsftpd服務程序並將該服務添加到開機啟動項中:
第六步:設置SELinux域允許策略(setsebool -P ftpd_full_access=on),然後使用虛擬用戶模式登錄FTP服務器,這樣就可以分別使用zhangsan和lisi來使用對應的權限。
3 簡單文件傳輸協議
簡單文件傳輸協議(Trivial File Transfer Protocol,TFTP)是一種基於UDP協議在客戶端和服務器之間進行簡單文件傳輸的協議。顧名思義,它提供不復雜、開銷不大的文件傳輸服務(可將其當作FTP協議的簡化版本)。
TFTP的命令功能不如FTP服務強大,甚至不能遍歷目錄,在安全性方面也弱於FTP服務。而且,由於TFTP在傳輸文件時采用的是UDP協議,占用的端口號為69,因此文件的傳輸過程也不像FTP協議那樣可靠。但是,因為TFTP不需要客戶端的權限認證,也就減少了無謂的系統和網絡帶寬消耗,因此在傳輸瑣碎(trivial)不大的文件時,效率更高。
安裝TFTP(yum install tftp-server tftp)。在RHEL 7系統中,TFTP服務是使用xinetd服務程序來管理的。在安裝TFTP軟件包後,還需要在xinetd服務程序中將其開啟,把默認的禁用(disable)參數修改為no:
重啟服務並添加到開機啟動項中,有些系統的防火墻默認沒有允許UDP協議的69端口,因此需要手動將該端口號加入到防火墻的允許策略中:
TFTP的根目錄為/var/lib/tftpboot。可以使用tftp命令嘗試訪問其中的文件,體驗TFTP服務的文件傳輸過程。 tftp命令中可用的參數以及作用:
使用 vsftpd 服務傳輸文件