檔案傳輸協定
一般來講,人們将計算機聯網的首要目的就是擷取資料,而檔案傳輸是一種非常重要的擷取資料的方式。今天的網際網路是由幾千萬台個人計算機、工作站、伺服器、小型機、大型機、巨型機等具有不同型号、不同架構的實體裝置共同組成的,而且即便是個人計算機,也可能會裝有Windows、Linux、UNIX、Mac等不同的作業系統。為了能夠在如此複雜多樣的裝置之間解決問題解決檔案傳輸問題,檔案傳輸協定(FTP)應運而生。
FTP是一種在網際網路中進行檔案傳輸的協定,基于用戶端/伺服器模式,預設使用20、21号端口,其中端口20(資料端口)用于進行資料傳輸,端口21(指令端口)用于接受用戶端發出的相關FTP指令與參數。FTP伺服器普遍部署于内網中,具有容易搭建、友善管理的特點。而且有些FTP用戶端工具還可以支援檔案的多點下載下傳以及斷點續傳技術,是以FTP服務得到了廣大使用者的青睐。FTP協定的傳輸拓撲如圖所示
FTP伺服器是按照FTP協定在網際網路上提供檔案存儲和通路服務的主機,FTP用戶端則是向伺服器發送連接配接請求,以建立資料傳輸鍊路的主機。FTP協定有下面兩種工作模式。
主動模式:FTP伺服器主動向用戶端發起連接配接請求
被動模式:FTP伺服器等待用戶端發起連接配接請求(FTP的預設工作模式)
vsftpd(very secure ftp daemon,非常安全的FTP守護程序)是一款運作在Linux作業系統上的FTP服務程式,不僅完全開源而且免費,此外,還具有很高的安全性、傳輸速度,以及支援虛拟使用者驗證等其他FTP服務程式不具備的特點。
在配置完YUM軟體倉庫之後,就可以安裝vsftpd服務程式了
安裝指令: yum install -y vsftpd
Firewalld和iptables防火牆工具預設禁止了FTP傳輸協定的端口号,是以在正式配置vsftpd服務程式之前,為了避免這些預設的防火牆政策“搗亂”,還需要清空iptables防火牆的預設政策,并把目前已經被清理的防火牆政策狀态儲存下來:
Iptables
Iptables -F
Service iptables save
Firewalld
Systemctl stop firewalld
Systemctl disabled firewalld
vsftpd服務程式的主配置檔案(/etc/vsftpd/vsftpd.conf)内容總長度達到123行,但其中大多數參數在開頭都添加了井号(#),進而成為注釋資訊,大家沒有必要在注釋資訊上花費太多的時間。我們可以在grep指令後面添加-v參數,過濾并反選出沒有包含井号(#)的參數行(即過濾掉所有的注釋資訊),然後将過濾後的參數行通過輸出重定向符寫回原始的主配置檔案中:
[root@linuxprobe ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
[root@linuxprobe ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
[root@linuxprobe ~]# 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
注:配置參數的作用不一 一講述
Vsftp服務程式
vsftpd作為更加安全的檔案傳輸的服務程式,允許使用者以三種認證模式登入到FTP伺服器上。
匿名開放模式:是一種最不安全的認證模式,任何人都可以無需密碼驗證而直接登入到FTP伺服器。
本地使用者模式:是通過Linux系統本地的賬戶密碼資訊進行認證的模式,相較于匿名開放模式更安全,而且配置起來也很簡單。但是如果被黑客破解了賬戶的資訊,就可以暢通無阻地登入FTP伺服器,進而完全控制整台伺服器。
虛拟使用者模式:是這三種模式中最安全的一種認證模式,它需要為FTP服務單獨建立使用者資料庫檔案,虛拟出用來進行密碼驗證的賬戶資訊,而這些賬戶資訊在伺服器系統中實際上是不存在的,僅供FTP服務程式進行認證使用。這樣,即使黑客破解了賬戶資訊也無法登入伺服器,進而有效降低了破壞範圍和影響。
ftp是Linux系統中以指令行界面的方式來管理FTP傳輸服務的用戶端工具。我們首先手動安裝這個ftp用戶端工具,以便在後續實驗中檢視結果。
Yum install -y ftp
1.2.1匿名通路模式
前文提到,在vsftpd服務程式中,匿名開放模式是最不安全的一種認證模式。任何人都可以無需密碼驗證而直接登入到FTP伺服器。這種模式一般用來通路不重要的公開檔案(在生産環境中盡量不要存放重要檔案)。當然,如果采用第8章中介紹的防火牆管理工具(如Tcp_wrappers服務程式)将vsftpd服務程式允許通路的主機範圍設定為企業内網,也可以提供基本的安全性。
vsftpd服務程式預設開啟了匿名開放模式,我們需要做的就是開放匿名使用者的上傳、下載下傳檔案的權限,以及讓匿名使用者建立、删除、更名檔案的權限。需要注意的是,針對匿名使用者放開這些權限會帶來潛在危險,我們隻是為了在Linux系統中練習配置vsftpd服務程式而放開了這些權限,不建議在生産環境中如此行事。
[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf
1 anonymous_enable=YES
2 anon_umask=022
3 anon_upload_enable=YES
4 anon_mkdir_write_enable=YES
5 anon_other_write_enable=YES
6 local_enable=YES
7 write_enable=YES
8 local_umask=022
9 dirmessage_enable=YES
10 xferlog_enable=YES
11 connect_from_port_20=YES
12 xferlog_std_format=YES
13 listen=NO
14 listen_ipv6=YES
15 pam_service_name=vsftpd
16 userlist_enable=YES
17 tcp_wrappers=YES
在vsftpd服務程式的主配置檔案中正确填寫參數,然後儲存并退出。還需要重新開機vsftpd服務程式,讓新的配置參數生效。在此需要提醒各位讀者,在生産環境中或者在RHCSA、RHCE、RHCA認證考試中一定要把配置過的服務程式加入到開機啟動項中,以保證伺服器在重新開機後依然能夠正常提供傳輸服務:
Systemctl restart vsftpd
Systemctl enable vsftpd
現在就可以在用戶端執行ftp指令連接配接到遠端的FTP伺服器了。在vsftpd服務程式的匿名開放認證模式下,其賬戶統一為anonymous,密碼為空。而且在連接配接到FTP伺服器後,預設通路的是/var/ftp目錄。我們可以切換到該目錄下的pub目錄中,然後嘗試建立一個新的目錄檔案,以檢驗是否擁有寫入權限:
ftp ip位址
系統顯示拒絕建立目錄!我們明明在前面清空了iptables防火牆政策,而且也在vsftpd服務程式的主配置檔案中添加了允許匿名使用者建立目錄和寫入檔案的權限啊。建議大家先不要着急往下看,而是自己思考一下這個問題的解決辦法,以鍛煉您的Linux系統排錯能力。
前文提到,在vsftpd服務程式的匿名開放認證模式下,預設通路的是/var/ftp目錄。檢視該目錄的權限得知,隻有root管理者才有寫入權限。怪不得系統會拒絕操作呢!下面将目錄的所有者身份改成系統賬戶ftp即可(該賬戶在系統中已經存在),這樣應該可以了吧:
1.2.2 本地通路模式
相較于匿名開放模式,本地使用者模式要更安全,而且配置起來也很簡單。如果大家之前用的是匿名開放模式,現在就可以将它關了,然後開啟本地使用者模式。
[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf
1 anonymous_enable=NO
2 local_enable=YES
3 write_enable=YES
4 local_umask=022
5 dirmessage_enable=YES
6 xferlog_enable=YES
7 connect_from_port_20=YES
8 xferlog_std_format=YES
9 listen=NO
10 listen_ipv6=YES
11 pam_service_name=vsftpd
12 userlist_enable=YES
13 tcp_wrappers=YES
在vsftpd服務程式的主配置檔案中正确填寫參數,然後儲存并退出。還需要重新開機vsftpd服務程式,讓新的配置參數生效。在執行完上一個實驗後還原了虛拟機的讀者,還需要将配置好的服務添加到開機啟動項中,以便在系統重新開機自後依然可以正常使用vsftpd服務。
Systemctl restart vsftpd
然後使用賬戶名密碼直接通路就ok!