一般來講,人們把計算機聯網的首要目的就是擷取資料,而檔案傳輸是一種非常重要的擷取資料的方式。今天的網際網路是由幾千萬台個人計算機、工作站、伺服器、小型機、大型機、巨型機等具有不同型号、不同架構的實體裝置共同組成的,而且即便是個人計算機,也可能會裝有Windows、Linux、UNIX、Mac等不同的作業系統。為了能夠在如此複雜多樣的裝置之間解決問題解決檔案傳輸問題,FTP(File Transfer Protocol)檔案傳輸協定應運而生。
FTP是一種在網際網路中進行檔案傳輸的協定,基于用戶端/伺服器模式,預設使用20、21号端口,其中端口20用于進行資料傳輸,端口21用于接受用戶端發出的相關FTP指令與參數。FTP伺服器普遍部署于内網中,友善管理的特點。而且有些FTP用戶端工具還可以支援檔案的多點下載下傳以及斷點續傳技術,是以得到了廣大使用者的青睐。FTP協定的傳輸拓撲如圖11-1所示。
FTP協定的傳輸拓撲
FTP伺服器是按照FTP協定在網際網路上提供檔案存儲和通路服務的主機,FTP用戶端則是向伺服器發送連接配接請求,以建立資料傳輸鍊路的主機。FTP協定有下面兩種工作模式,第8章在學習防火牆服務配置時曾經講過,防火牆一般是用于過濾從外網進入内網的流量,是以有些時候需要将FTP的工作模式設定為主動模式,才可以傳輸資料。
主動模式:FTP伺服器主動向用戶端發起連接配接請求。 被動模式:FTP伺服器等待用戶端發起連接配接請求(預設工作模式)。
由于FTP、HTTP、Telnet等協定的資料都是經過明文進行傳輸,是以從設計的原理上就是不可靠的,但人們又需要解決檔案傳輸的需求,是以便有了vsftpd服務程式。vsftpd(very secure ftp daemon,非常安全的FTP守護程序)是一款運作在Linux作業系統上的FTP服務程式,不僅完全開源而且免費,此外,還具有很高的安全性、傳輸速度,以及支援虛拟使用者驗證等其他FTP服務程式不具備的特點。在不影響使用的前提下,能夠讓管理者自行決定是公開匿名、本地使用者還是虛拟使用者的驗證方式,這樣即便被駭客拿到了我們的賬号密碼,也不見得能登陸的了伺服器。
在配置妥當軟體倉庫之後,就可以安裝vsftpd服務程式了,yum與dnf指令都可以,優先選擇用dnf指令方式。
iptables防火牆管理工具預設禁止了FTP傳輸協定的端口号,是以在正式配置vsftpd服務程式之前,為了避免這些預設的防火牆政策“搗亂”,還需要清空iptables防火牆的預設政策,并把目前已經被清理的防火牆政策狀态儲存下來:
然後再把FTP協定添加到firewalld服務的允許清單中,前期準備工作一定要做充足:
vsftpd服務程式的主配置檔案(/etc/vsftpd/vsftpd.conf)内容總長度達到127行,但其中大多數參數在開頭都添加了井号(#),進而成為注釋資訊,大家沒有必要在注釋資訊上花費太多的時間。我們可以在grep指令後面添加-v參數,過濾并反選出沒有包含井号(#)的參數行(即過濾掉所有的注釋資訊),然後将過濾後的參數行通過輸出重定向符寫回原始的主配置檔案中,隻剩下12行有效參數了,馬上就不緊張了:
vsftpd服務程式主配置檔案中常用的參數以及作用。目前大家隻需要簡單了解即可,在後續的實驗中将示範這些參數的用法,以幫助大家熟悉并掌握。
vsftpd服務程式常用的參數以及作用
參數
作用
listen=[YES|NO]
是否以獨立運作的方式監聽服務
listen_address=IP位址
設定要監聽的IP位址
listen_port=21
設定FTP服務的監聽端口
download_enable=[YES|NO]
是否允許下載下傳檔案
userlist_enable=[YES|NO]
userlist_deny=[YES|NO]
設定使用者清單為“允許”還是“禁止”操作
max_clients=0
最大用戶端連接配接數,0為不限制
max_per_ip=0
同一IP位址的最大連接配接數,0為不限制
anonymous_enable=[YES|NO]
是否允許匿名使用者通路
anon_upload_enable=[YES|NO]
是否允許匿名使用者上傳檔案
anon_umask=022
匿名使用者上傳檔案的umask值
anon_root=/var/ftp
匿名使用者的FTP根目錄
anon_mkdir_write_enable=[YES|NO]
是否允許匿名使用者建立目錄
anon_other_write_enable=[YES|NO]
是否開放匿名使用者的其他寫入權限(包括重命名、删除等操作權限)
anon_max_rate=0
匿名使用者的最大傳輸速率(位元組/秒),0為不限制
local_enable=[YES|NO]
是否允許本地使用者登入FTP
local_umask=022
本地使用者上傳檔案的umask值
local_root=/var/ftp
本地使用者的FTP根目錄
chroot_local_user=[YES|NO]
是否将使用者權限禁锢在FTP目錄,以確定安全
local_max_rate=0
本地使用者最大傳輸速率(位元組/秒),0為不限制
匿名通路模式
前文提到,在vsftpd服務程式中,匿名開放模式是最不安全的一種認證模式。任何人都可以無需密碼驗證而直接登入到FTP伺服器。這種模式一般用來通路不重要的公開檔案(在生産環境中盡量不要存放重要檔案)。當然,如果采用第8章中介紹的防火牆管理工具(如Tcp_wrappers服務程式)将vsftpd服務程式允許通路的主機範圍設定為企業内網,也可以提供基本的安全性。
vsftpd服務程式預設關閉了匿名開放模式,需要做的就是開放匿名使用者的上傳、下載下傳檔案的權限,以及讓匿名使用者建立、删除、更名檔案的權限。需要注意的是,針對匿名使用者放開這些權限會帶來潛在危險,我們隻是為了在Linux系統中練習配置vsftpd服務程式而放開了這些權限,不建議在生産環境中如此行事。表11-2羅列了可以向匿名使用者開放的權限參數以及作用。
表11-2 向匿名使用者開放的權限參數以及作用
anonymous_enable=YES
允許匿名通路模式
anon_upload_enable=YES
允許匿名使用者上傳檔案
anon_mkdir_write_enable=YES
允許匿名使用者建立目錄
anon_other_write_enable=YES
允許匿名使用者修改目錄名稱或删除目錄
在vsftpd服務程式的主配置檔案中正确填寫參數,然後儲存并退出。還需要重新開機vsftpd服務程式,讓新的配置參數生效。在此需要提醒各位讀者,在生産環境中或者在RHCSA、RHCE、RHCA認證考試中一定要把配置過的服務程式加入到開機啟動項中,以保證伺服器在重新開機後依然能夠正常提供傳輸服務:
現在就可以在用戶端執行ftp指令連接配接到遠端的FTP伺服器了。在vsftpd服務程式的匿名開放認證模式下,其賬戶統一為anonymous,密碼為空。而且在連接配接到FTP伺服器後,預設通路的是/var/ftp目錄。可以切換到該目錄下的pub目錄中,然後嘗試建立一個新的目錄檔案,以檢驗是否擁有寫入權限:
系統顯示拒絕建立目錄!我們明明在前面清空了iptables防火牆政策,而且也在vsftpd服務程式的主配置檔案中添加了允許匿名使用者建立目錄和寫入檔案的權限啊。建議先不要着急往下看,而是自己思考一下這個問題的解決辦法,以鍛煉您的Linux系統排錯能力。
前文提到,在vsftpd服務程式的匿名開放認證模式下,預設通路的是/var/ftp目錄。檢視該目錄的權限得知,隻有root管理者才有寫入權限。怪不得系統會拒絕操作呢!下面将目錄的所有者身份改成系統賬戶ftp即可,這樣應該可以了吧?
系統再次報錯!盡管在使用ftp指令登入FTP伺服器後,再建立目錄時系統依然提示操作失敗,但是報錯資訊卻發生了變化。在沒有寫入權限時,系統提示“權限拒絕”(Permission denied)是以劉遄老師懷疑是權限的問題。但現在系統提示“建立目錄的操作失敗”(Create directory operation failed),想必各位讀者也應該意識到是SELinux服務在“搗亂”了吧。
下面使用getsebool指令檢視與FTP相關的SELinux域政策都有哪些:
我們可以根據經驗(需要長期培養,别無它法)和政策的名稱判斷出是ftpd_full_access--> off政策規則導緻了操作失敗。接下來修改該政策規則,并且在設定時使用-P參數讓修改過的政策永久生效,確定在伺服器重新開機後依然能夠順利寫入檔案。
等SELinux域政策修改完畢,現在便能夠順利執行檔案建立、修改及删除等操作了:
在上面的操作中,由于權限的不足是以将/var/ftp/pub目錄的所有者設定成了ftp使用者本身。而除了這種方法外,也可以通過設定權限的方法讓其它使用者擷取到寫入權限,例如777這樣的權限。但是由于vsftpd服務自身帶有安全保護機制,不要對/var/ftp直接修改權限,有可能導緻服務被“安全鎖定”而不能登入,一定要記得是裡面的pub目錄哦:
此文章僅記錄自己的一個學習過程; 逆水行舟