編者按:VSFTPD是一款在Linux發(fā)行版中最受推崇的FTP服務(wù)器程序,本文主要討論在CentOS 7環(huán)境下VSFTPD匿名訪問模式的基本配置及故障探討。
VSFTPD是一個Unix類操作系統(tǒng)上運(yùn)行的服務(wù)器的名字,它可以運(yùn)行在諸如Linux、BSD、Solaris、HP-Unix等系統(tǒng)上面,是一個完全免費(fèi)的、開放源代碼的FTP服務(wù)器軟件,支持很多其他的FTP服務(wù)器所不支持的特征。比如非常高的安全性需求、帶寬限制、良好的可伸縮性、可創(chuàng)建虛擬用戶、支持IPv6和速率高等。
VSFTPD是一款在Linux發(fā)行版中最受推崇的FTP服務(wù)器程序,特點(diǎn)是小巧輕快,安全易用,以下是在CentOS 7環(huán)境下的操作實驗。
FTP服務(wù)器匿名開放模式是任何人都可以無需密碼認(rèn)證即可直接登錄到FTP服務(wù)器的驗證方式。本文主要討論匿名訪問模式的基本配置及故障探討。
FTP協(xié)議有兩種工作方式:PORT(主動)方式和PASV(被動)方式。兩種傳輸方式包括ASCII與二進(jìn)制。
Linux下VSFTPD的運(yùn)行框架如圖1所示,Linux操作系統(tǒng)一直在服務(wù)器操作系統(tǒng)中占主導(dǎo)地位,安全、穩(wěn)定、可靠。所以在上面搭建的各種服務(wù)必須在它的安全策略下才能正常運(yùn)行,除非人為關(guān)閉了所有安全服務(wù),但那樣就失去了我們選擇VSFTPD的意義了。
安裝:Yum install vsftpd
啟動:systemctl start vsftpd
檢測:systemctl status vsftpd
3月08 10:40:39 hbzj systemd[1]:Starting Vs ftpd ftp daemon...
3月08 10:40:39 hbzj systemd[1]:Started Vs ftpd ftp daemon.
一定要看到上面正常啟動的狀態(tài)信息,才能繼續(xù)下一步操作。如果有異常,請查閱相關(guān)資料解決,這并不是本篇重點(diǎn)。
每項服務(wù)都有自己的配置文件,用來保存各種初始化參數(shù)及針對不同的用戶環(huán)境的配置參數(shù)。VSFTPD非常重要的一個配置文件是/etc/vsftpd/vsftpd.conf,里面有VSFTPD服務(wù)程序的主配置文件(/etc/vsftpd/vsftpd.conf),內(nèi)容總長度達(dá)到123行,但其中大多數(shù)參數(shù)在開頭都添加了#,從而成為注釋信息,大家沒有必要在注釋信息上花費(fèi)太多時間。下面將關(guān)于匿名配置的主要參數(shù)羅列如下:
圖1 Linux下VSFTPD的運(yùn)行框架
在VSFTPD服務(wù)程序的主配置文件中正確填寫以上參數(shù),然后保存并退出。還需要重啟VSFTPD服務(wù)程序,讓新的配置參數(shù)生效。在此需要提醒各位讀者,在生產(chǎn)環(huán)境中或者在專業(yè)認(rèn)證考試中一定要把配置過的服務(wù)程序加入到開機(jī)啟動項中,以保證服務(wù)器在重啟后依然能夠正常提供傳輸服務(wù):
(1)關(guān)閉SElinux
SELinux(安全增強(qiáng)型Linux)是一個Linux內(nèi)核模塊,也是Linux的一個安全子系統(tǒng)。SELinux的結(jié)構(gòu)及配置非常復(fù)雜,而且有大量概念性的東西,很多Linux管理員嫌麻煩把SELinux關(guān)閉了。所以作者建議初學(xué)者直接將其關(guān)閉,以后對整個Linux系統(tǒng)精通后再關(guān)注研究它。
當(dāng)然,如果喜歡挑戰(zhàn)一下,可以查閱這方面的資料,熟練掌握SELinux并正確運(yùn)用,那么整個系統(tǒng)基本上可以到達(dá)“堅不可摧”的地步了(但請記住永遠(yuǎn)沒有絕對的安全)。
注意:以上只是臨時關(guān)閉,系統(tǒng)重新啟動后又恢復(fù)初值,若要永久生效,須更改配置文檔
(2)防火墻端口開放
如表1所示。
注意:此處并沒有開放端口20,但并不影響之后的各種登陸、上傳、下載測試,因為根據(jù)防火墻的策略,端口20是服務(wù)端主動出擊,它認(rèn)為是安全的,予以放行了。
這里筆者并不建議直接關(guān)掉防火墻,因為之前已經(jīng)放棄了一個強(qiáng)用力的安全措施,我們之所以選擇在Linux下搭建服務(wù),非常重要一點(diǎn)就是看重它的安全性。初學(xué)者更應(yīng)樹立這種安全意識,而且經(jīng)過防火墻的配置才能檢驗到服務(wù)搭建中的各種錯誤及應(yīng)對措施,提升自己對整個系統(tǒng)服務(wù)的運(yùn)維能力。
注意:以上只是臨時開放端口服務(wù),若要永久生效,還須修改防火墻配置文檔,或者在以上配置中增加參數(shù)。
(1)Windows 10平臺下的FTP命令登錄
現(xiàn)在就可以在客戶端執(zhí)行FTP命令連接到遠(yuǎn)程的FTP服務(wù)器了。在VSFTPD服務(wù)程序的匿名開放認(rèn)證模式下,其賬戶統(tǒng)一為anonymous,密碼為空。在連接到FTP服務(wù)器后,默認(rèn)訪問的是/var/ftp目錄。我們可以切換到該目錄下的pub目錄中,然后嘗試創(chuàng)建一個新的目錄文件,以檢驗是否擁有寫入權(quán)限:
系統(tǒng)顯示拒絕創(chuàng)建目錄!我們明明在前面停掉了SElinux,防火墻端口21/TCP也放行了,而且也在VSFTPD服務(wù)程序的主配置文件中添加了允許匿名用戶創(chuàng)建目錄和寫入文件的權(quán)限。這是怎么回事呢?
在VSFTPD服務(wù)程序的匿名開放認(rèn)證模式下,默認(rèn)訪問的是/var/ftp目錄。而此時我們進(jìn)入的pub目錄,通過查看該目錄的權(quán)限得知,只有root管理員才有寫入權(quán)限,難怪系統(tǒng)會拒絕操作。
下面通過權(quán)限的配置來打通最后一道關(guān)卡。
將目錄的所有者身份改成系統(tǒng)賬戶FTP即可(該賬戶在系統(tǒng)中已經(jīng)存在),或者將pub目錄的other用戶增加寫的權(quán)限。
再重復(fù)上面的新建目錄操作,提示建立成功!
通過以上折騰,整個服務(wù)端到客戶端應(yīng)該能正?;?。但換一種客戶端訪問時,問題又來了。
(2)瀏覽器訪問
錯誤信息:“打開FTP服務(wù)器上的文件夾時發(fā)生錯誤,請檢查是否有權(quán)限訪問該文件夾”。
原因分析:瀏覽器連接FTP一般默認(rèn)采用的是FTP被動模式,在該模式下,瀏覽器和FTP服務(wù)器通過端口21通信外,還要通過其他一個隨機(jī)的、大于1024的端口號來進(jìn)行實際的數(shù)據(jù)傳輸。而默認(rèn)配置文件中FTP是沒有配置被動模式下要用到的端口號,防火墻即使放開了21端口,瀏覽器也無法連接FTP服務(wù),因為還要開放配置的隨機(jī)端口。
解決辦法:
①FTP服務(wù)器啟用被動模式:我們可以在配置文件vsftpd.conf中,給VSFTPD服務(wù)設(shè)置一個用于被動模式的端口范圍,如下:
pasv_enable=yes(啟用被動模式)
pasv_min_port=30000
pasv_max_port=30010
然后重啟VSFTPD服務(wù),再在防火墻中開放這個范圍的端口號,重啟防火墻,瀏覽器就可以正常訪問FTP服務(wù)了。
②瀏覽器客戶端切換到主動模式:設(shè)置“IE瀏覽器→Internet選項→高級”選項,將“使用被動FTP(用于防火墻和DSL調(diào)制解調(diào)器的兼容)”選項取消掉,然后點(diǎn)擊“確定”即可。
(3)資源管理器訪問
這種方式與瀏覽器訪問方式一樣,它采用哪種模式是基于瀏覽器的中訪問模式配置,只不過它以文件夾的方式顯示,比較符合我們用戶平常的操作習(xí)慣,比較方便。
(4)第三方FTP工具訪問
FTP工具匿名訪問也要注意訪問模式的選擇。
注意FTP的匿名登錄賬號及密碼:如果是FTP命令方式,會提示用戶輸入賬號及密碼,這時可以輸入賬號anonymous或FTP,密碼為空即可;如果是瀏覽器及資源管理器中打開,不會出現(xiàn)輸入窗口,但系統(tǒng)會自動用anonymous賬號及空密碼(或郵件賬號)去嘗試登錄,可以通過Wireshark抓包軟件驗證。
(1)可以修改配置文件vsftpd.conf中anon_mkdir_write_enable=YES。
(2)修改匿名用戶登錄的目錄訪問權(quán)限。
(1)沒有放開SElinux安全選項,配置見上文的“安全配置”。
(2)必須在指定文件夾下才可以創(chuàng)建文件:如/home/ftpuser賬號是ftpuser,那么只能在這個文件夾下創(chuàng)建或刪除目錄,而在其他文件夾下也會出現(xiàn)以上錯誤。
主要原因是客戶端以被動方式連接,但在服務(wù)器端沒有提供被動方式的連接,或者被動方式配置不正確,參照上面“瀏覽器訪問”中的訪問模式配置辦法。
注意:微軟自帶的FTP命令客戶端不支持PASV模式。雖然可以使用QUOTE PASV命令強(qiáng)制使用PASV模式,但是當(dāng)用ls命令列出服務(wù)器目錄列表,會發(fā)現(xiàn)它還是使用PORT方式來連接服務(wù)器的,如下所示。
說明FTP服務(wù)沒有裝,可以重裝后再試。
因為沒有放開SElinux安全選項,配置見上面的“安全配置”。
因為沒有放開SElinux安全選項,配置見上面的“安全配置”。
本地上傳的文件或目錄沒有讀寫權(quán)限,因為anon_umask默認(rèn)配置導(dǎo)致上傳的文件沒有讀寫的權(quán)限了。umask是在Linux中常見的,它其實是一個掩碼。
當(dāng)然,也有umask這樣的命令,它是對用戶建立的文件的默認(rèn)屬性的定義。該定義為:假設(shè)umask為022,則對于一個文件夾的話,它的默認(rèn)屬性為777-022=755。這也就是我們平時建立文件夾的權(quán)限。而對于一般的文件的話,則是用666-022=644。
配置文檔中的注釋為:Default umask for local users is 077.You may wish to change this to 022,if your users expect that (022 is used by most other ftpd's)(本地用戶的默認(rèn)umask是077。如果您的用戶希望(022被大多數(shù)其他FTPD使用),您可能希望將其更改為022)。
如果使用VSFTP的是本地用戶,則要修改配置文件中的local_umask=022。
如果使用VSFTP的是匿名用戶,則要修改配置文件中的anon_umask=022。
anon_umask=077導(dǎo)致上傳的文件權(quán)限為600對應(yīng)rw-------,修改配置為anon_umask=022。反過來,上傳的文件權(quán)限就為755對應(yīng) rw-r--r--。
如下所示,yh2.txt是修改之前上傳的文件,yh1.txt是修改后上傳的文件。
-rw-r--r--.1 ftp ftp 4 3月 6 22:22 yh1.txt
-rw-------.1 ftp ftp 9 3月 6 21:46 yh2.txt