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