日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

鸟哥的Linux私房菜(服务器)- 第二十一章、文件服务器之三: FTP 服务器

發(fā)布時(shí)間:2025/3/21 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 鸟哥的Linux私房菜(服务器)- 第二十一章、文件服务器之三: FTP 服务器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
第二十一章、文件服務(wù)器之三:?FTP?服務(wù)器
最近更新日期:2011/08/08
FTP (File Transfer Protocol) 可說(shuō)是最古老的協(xié)議之一了,主要是用來(lái)進(jìn)行檔案的傳輸,尤其是大型檔案的傳輸使用 FTP 更是方便!不過(guò),值得注意的是,使用 FTP 來(lái)傳輸時(shí),其實(shí)是具有一定程度的『危險(xiǎn)性』, 因?yàn)閿?shù)據(jù)在因特網(wǎng)上面是完全沒(méi)有受到保護(hù)的『明碼』傳輸方式!但是單純的 FTP 服務(wù)還是有其必要性的,例如很多學(xué)校就有 FTP 服務(wù)器的架設(shè)需求啊!

21.1?FTP 的數(shù)據(jù)鏈路原理
  21.1.1?FTP 功能簡(jiǎn)介
  21.1.2?FTP 的運(yùn)作流程與使用到的端口
  21.1.3?客戶端選擇被動(dòng)式聯(lián)機(jī)模式
  21.1.4?FTP 的安全性問(wèn)題與替代方案
  21.1.5?開(kāi)放什么身份的使用者登入
21.2?vsftpd 服務(wù)器基礎(chǔ)設(shè)定
  21.2.1?為何使用 vsftpd
  21.2.2?所需要的軟件以及軟件結(jié)構(gòu)
  21.2.3?vsftpd.conf 設(shè)定值說(shuō)明?
  21.2.4?vsftpd 啟動(dòng)的模式
  21.2.5?CentOS 的 vsftpd 默認(rèn)值:?使用本地端時(shí)間
  21.2.6?針對(duì)實(shí)體賬號(hào)的設(shè)定:?SELinux,?chroot,?限制帶寬,?最大上線人數(shù),?可用賬號(hào)列表
  21.2.7?僅有匿名登錄的相關(guān)設(shè)定:?匿名的根,?可上傳下載,?僅可上傳,?被動(dòng)式聯(lián)機(jī)埠口
  21.2.8?防火墻設(shè)定
  21.2.9?常見(jiàn)問(wèn)題與解決之道
21.3?客戶端的圖形接口 FTP 聯(lián)機(jī)軟件
  21.3.1?Filezilla
  21.3.2?透過(guò)瀏覽器取得 FTP 聯(lián)機(jī)
21.4?讓 vsftpd 增加 SSL 的加密功能
21.5?重點(diǎn)回顧
21.6?本章習(xí)題
21.7?參考數(shù)據(jù)與延伸閱讀
21.8?針對(duì)本文的建議:http://phorum.vbird.org/viewtopic.php?p=118520

21.1 FTP 的數(shù)據(jù)鏈路原理

FTP (File transfer protocol) 是相當(dāng)古老的傳輸協(xié)議之一,他最主要的功能是在服務(wù)器與客戶端之間進(jìn)行檔案的傳輸。 這個(gè)古老的協(xié)議使用的是明碼傳輸方式,且過(guò)去有相當(dāng)多的安全危機(jī)歷史。為了更安全的使用 FTP 協(xié)議,我們主要介紹較為安全但功能較少的 vsftpd 這個(gè)軟件吶。


2.1.1 FTP 功能簡(jiǎn)介

FTP 服務(wù)器的功能除了單純的進(jìn)行檔案的傳輸與管理之外,依據(jù)服務(wù)器軟件的設(shè)定架構(gòu),它還可以提供幾個(gè)主要的功能。 底下我們約略的來(lái)談一談:


  • 不同等級(jí)的用戶身份:user, guest, anonymous

FTP 服務(wù)器在預(yù)設(shè)的情況下,依據(jù)使用者登入的情況而分為三種不同的身份,分別是:?(1)實(shí)體賬號(hào),real user;(2)訪客, guest;(3)匿名登錄者, anonymous?這三種。這三種身份的用戶在系統(tǒng)上面的權(quán)限差異很大喔!例如實(shí)體用戶取得系統(tǒng)的權(quán)限比較完整, 所以可以進(jìn)行比較多的動(dòng)作;至于匿名登錄者,大概我們就僅提供他下載資源的能力而已,并不許匿名者使用太多主機(jī)的資源啊! 當(dāng)然,這三種人物能夠使用的『在線指令』自然也就不相同啰! ^_^


  • 命令記錄與登錄文件記錄:

FTP 可以利用系統(tǒng)的?syslogd?來(lái)進(jìn)行數(shù)據(jù)的紀(jì)錄, 而記錄的數(shù)據(jù)報(bào)括了用戶曾經(jīng)下達(dá)過(guò)的命令與用戶傳輸數(shù)據(jù)(傳輸時(shí)間、檔案大小等等)的紀(jì)錄呢! 所以你可以很輕松的在 /var/log/ 里面找到各項(xiàng)登錄信息喔!


  • 限制用戶活動(dòng)的目錄: (change root, 簡(jiǎn)稱 chroot)

為了避免用戶在你的 Linux 系統(tǒng)當(dāng)中隨意逛大街 (意指離開(kāi)用戶自己的家目錄而進(jìn)入到 Linux 系統(tǒng)的其他目錄去), 所以將使用者的工作范圍『局限』在用戶的家目錄底下,嗯!實(shí)在是個(gè)不錯(cuò)的好主意!FTP 可以限制用戶僅能在自己的家目錄當(dāng)中活動(dòng)喔!如此一來(lái),由于使用者無(wú)法離開(kāi)自己的家目錄,而且登入 FTP 后,顯示的『根目錄』就是自己家目錄的內(nèi)容,這種環(huán)境稱之為 change root ,簡(jiǎn)稱 chroot ,改變根目錄的意思啦!

這有什么好處呢?當(dāng)一個(gè)惡意的使用者以 FTP 登入你的系統(tǒng)當(dāng)中,如果沒(méi)有 chroot 的環(huán)境下,他可以到 /etc, /usr/local, /home 等其他重要目錄底下去察看檔案數(shù)據(jù),尤其是很重要的 /etc/ 底下的配置文件,如 /etc/passwd 等等。如果你沒(méi)有做好一些檔案權(quán)限的管理與保護(hù),那他就有辦法取得系統(tǒng)的某些重要信息, 用來(lái)『入侵』你的系統(tǒng)呢!所以在 chroot 的環(huán)境下,當(dāng)然就比較安全一些咯!


21.1.2 FTP 的運(yùn)作流程與使用到的端口

FTP 的傳輸使用的是 TCP 封包協(xié)議,在第二章網(wǎng)絡(luò)基礎(chǔ)中我們談過(guò), TCP 在建立聯(lián)機(jī)前會(huì)先進(jìn)行三向交握。不過(guò) FTP 服務(wù)器是比較麻煩一些,因?yàn)?span id="ozvdkddzhkzd" class="text_import2" style="font-size:11pt; font-family:新細(xì)明體,serif; color:rgb(0,0,136)">?FTP 服務(wù)器使用了兩個(gè)聯(lián)機(jī),分別是命令信道與數(shù)據(jù)流通道 (ftp-data) 。這兩個(gè)聯(lián)機(jī)都需要經(jīng)過(guò)三向交握, 因?yàn)槭?TCP 封包嘛!那么這兩個(gè)聯(lián)機(jī)通道的關(guān)系是如何呢?底下我們先以?FTP 預(yù)設(shè)的主動(dòng)式 (active) 聯(lián)機(jī)來(lái)作個(gè)簡(jiǎn)略的說(shuō)明啰:


圖 21.1-1、FTP 服務(wù)器的主動(dòng)式聯(lián)機(jī)示意圖

簡(jiǎn)單的聯(lián)機(jī)流程就如上圖所示,至于聯(lián)機(jī)的步驟是這樣的:

  • 建立命令通道的聯(lián)機(jī)
    如上圖所示,客戶端會(huì)隨機(jī)取一個(gè)大于 1024 以上的埠口 (port AA) 來(lái)與 FTP 服務(wù)器端的 port 21 達(dá)成聯(lián)機(jī), 這個(gè)過(guò)程當(dāng)然需要三向交握了!達(dá)成聯(lián)機(jī)后客戶端便可以透過(guò)這個(gè)聯(lián)機(jī)來(lái)對(duì) FTP 服務(wù)器下達(dá)指令, 包括查詢檔名、下載、上傳等等指令都是利用這個(gè)通道來(lái)下達(dá)的;

  • 通知 FTP 服務(wù)器端使用 active 且告知連接的埠號(hào)
    FTP 服務(wù)器的 21 埠號(hào)主要用在命令的下達(dá),但是當(dāng)牽涉到數(shù)據(jù)流時(shí),就不是使用這個(gè)聯(lián)機(jī)了。 客戶端在需要數(shù)據(jù)的情況下,會(huì)告知服務(wù)器端要用什么方式來(lái)聯(lián)機(jī),如果是主動(dòng)式 (active) 聯(lián)機(jī)時(shí), 客戶端會(huì)先隨機(jī)啟用一個(gè)埠口 (圖 21.1-1 當(dāng)中的 port BB) ,且透過(guò)命令通道告知 FTP 服務(wù)器這兩個(gè)信息,并等待 FTP 服務(wù)器的聯(lián)機(jī);

  • FTP 服務(wù)器『主動(dòng)』向客戶端聯(lián)機(jī)
    FTP 服務(wù)器由命令通道了解客戶端的需求后,會(huì)主動(dòng)的由 20 這個(gè)埠號(hào)向客戶端的 port BB 聯(lián)機(jī), 這個(gè)聯(lián)機(jī)當(dāng)然也會(huì)經(jīng)過(guò)三向交握啦!此時(shí) FTP 的客戶端與服務(wù)器端共會(huì)建立兩條聯(lián)機(jī),分別用在命令的下達(dá)與數(shù)據(jù)的傳遞。 而預(yù)設(shè) FTP 服務(wù)器端使用的主動(dòng)聯(lián)機(jī)埠號(hào)就是 port 20 啰!
  • 如此一來(lái)則成功的建立起『命令』與『數(shù)據(jù)傳輸』兩個(gè)信道!不過(guò),要注意的是, 『數(shù)據(jù)傳輸信道』是在有數(shù)據(jù)傳輸?shù)男袨闀r(shí)才會(huì)建立的通道喔!并不是一開(kāi)始連接到 FTP 服務(wù)器就立刻建立的通道呢!留意一下啰!


    • 主動(dòng)式聯(lián)機(jī)使用到的埠號(hào)

    利用上述的說(shuō)明來(lái)整理一下 FTP 服務(wù)器端會(huì)使用到的埠號(hào)主要有:

    • 命令通道的 ftp (默認(rèn)為 port 21) 與
    • 數(shù)據(jù)傳輸?shù)?ftp-data (默認(rèn)為port 20)。

    再?gòu)?qiáng)調(diào)一次,這兩個(gè)埠口的工作是不一樣的,而且,重要的是兩者的聯(lián)機(jī)發(fā)起端是不一樣的!首先 port 21 主要接受來(lái)自客戶端的主動(dòng)聯(lián)機(jī),至于 port 20 則為 FTP 服務(wù)器主動(dòng)聯(lián)機(jī)至客戶端呢!這樣的情況在服務(wù)器與客戶端兩者同時(shí)為公共 IP (Public IP) 的因特網(wǎng)上面通常沒(méi)有太大的問(wèn)題,不過(guò),萬(wàn)一你的客戶端是在防火墻后端,或者是 NAT 服務(wù)器后端呢?會(huì)有什么問(wèn)題發(fā)生呢?底下我們來(lái)談一談這個(gè)嚴(yán)重的問(wèn)題!


    • 在主動(dòng)聯(lián)機(jī)的 FTP 服務(wù)器與客戶端之間具有防火墻的聯(lián)機(jī)問(wèn)題

    回想一下我們的第九章防火墻! 一般來(lái)說(shuō),很多的局域網(wǎng)絡(luò)都會(huì)使用防火墻 (iptables) 的 NAT 功能,那么在 NAT 后端的 FTP 用戶如何連接到 FTP 服務(wù)器呢? 我們可以簡(jiǎn)單的以下圖來(lái)說(shuō)明:


    圖 21.1-2、 FTP 客戶端與服務(wù)器端聯(lián)機(jī)中間具有防火墻的聯(lián)機(jī)狀態(tài)
  • 用戶與服務(wù)器間命令信道的建立:
    因?yàn)?NAT 會(huì)主動(dòng)的記錄由內(nèi)部送往外部的聯(lián)機(jī)信息,而由于命令信道的建立是由客戶端向服務(wù)器端聯(lián)機(jī)的, 因此這一條聯(lián)機(jī)可以順利的建立起來(lái)的;

  • 用戶與服務(wù)器間數(shù)據(jù)信道建立時(shí)的通知:
    同樣的,客戶端主機(jī)會(huì)先啟用 port BB ,并透過(guò)命令通道告知 FTP 服務(wù)器,且等待服務(wù)器端的主動(dòng)聯(lián)機(jī);

  • 服務(wù)器主動(dòng)連到 NAT 等待轉(zhuǎn)遞至客戶端的聯(lián)機(jī)問(wèn)題:
    但是由于透過(guò) NAT 的轉(zhuǎn)換后,FTP 服務(wù)器只能得知 NAT 的 IP 而不是客戶端的 IP , 因此 FTP 服務(wù)器會(huì)以 port 20 主動(dòng)的向 NAT 的 port BB 發(fā)送主動(dòng)聯(lián)機(jī)的要求。 但你的 NAT 并沒(méi)有啟動(dòng) port BB 來(lái)監(jiān)聽(tīng) FTP 服務(wù)器的聯(lián)機(jī)啊!
  • 了解問(wèn)題的所在了嗎?在 FTP 的主動(dòng)式聯(lián)機(jī)當(dāng)中,NAT 將會(huì)被視為客戶端,但 NAT 其實(shí)并非客戶端啊, 這就造成問(wèn)題了。如果你曾經(jīng)在 IP 分享器后面連接某些 FTP 服務(wù)器時(shí),可能偶爾會(huì)發(fā)現(xiàn)明明就連接上 FTP 服務(wù)器了 (命令通道已建立),但是就是無(wú)法取得文件名的列表,而是在超過(guò)一段時(shí)間后顯示『?Can't build data connection: Connection refused,無(wú)法進(jìn)行數(shù)據(jù)傳輸』之類的訊息, 那肯定就是這個(gè)原因所造成的困擾了。

    那有沒(méi)有辦法可以克服這個(gè)問(wèn)題呢?難道真的在 Linux NAT 后面就一定無(wú)法使用 FTP 嗎?當(dāng)然不是! 目前有兩個(gè)簡(jiǎn)易的方法可以克服這個(gè)問(wèn)題:

    • 使用 iptables 所提供的 FTP 偵測(cè)模塊:

      其實(shí) iptables 早就提供了許多好用的模塊了,這個(gè) FTP 當(dāng)然不會(huì)被錯(cuò)過(guò)! 你可以使用?modprobe?這個(gè)指令來(lái)加載 ip_conntrack_ftp 及 ip_nat_ftp 等模塊,這幾個(gè)模塊會(huì)主動(dòng)的分析『目標(biāo)是 port 21 的聯(lián)機(jī)』信息, 所以可以得到 port BB 的資料,此時(shí)若接受到 FTP 服務(wù)器的主動(dòng)聯(lián)機(jī),就能夠?qū)⒃摲獍鼘?dǎo)向正確的后端主機(jī)了! ^_^

      不過(guò),如果你鏈接的目標(biāo) FTP 服務(wù)器他的命令通道默認(rèn)端口號(hào)并非標(biāo)準(zhǔn)的 21 埠號(hào)時(shí) (例如某些地下 FTP 服務(wù)器), 那么這兩個(gè)模塊就無(wú)法順利解析出來(lái)了,這樣說(shuō),理解嗎?

    • 客戶端選擇被動(dòng)式 (Passive) 聯(lián)機(jī)模式:

      除了主動(dòng)式聯(lián)機(jī)之外,FTP 還提供一種稱為被動(dòng)式聯(lián)機(jī)的模式,什么是被動(dòng)式呢? 既然主動(dòng)式是由服務(wù)器向客戶端聯(lián)機(jī),反過(guò)來(lái)講,被動(dòng)式就是由客戶端向服務(wù)器端發(fā)起聯(lián)機(jī)的啰! 既然是由客戶端發(fā)起聯(lián)機(jī)的,那自然就不需要考慮來(lái)自 port 20 的聯(lián)機(jī)啦!關(guān)于被動(dòng)式聯(lián)機(jī)模式將在下一小節(jié)介紹喔!

    21.1.3 客戶端選擇被動(dòng)式聯(lián)機(jī)模式

    那么什么是被動(dòng)式聯(lián)機(jī)呢?我們可以使用底下的圖示來(lái)作個(gè)簡(jiǎn)略的介紹喔:


    圖 21.1-3、FTP 的被動(dòng)式數(shù)據(jù)流聯(lián)機(jī)流程
  • 用戶與服務(wù)器建立命令信道:
    同樣的需要建立命令通道,透過(guò)三向交握就可以建立起這個(gè)通道了。

  • 客戶端發(fā)出 PASV 的聯(lián)機(jī)要求:
    當(dāng)有使用數(shù)據(jù)信道的指令時(shí),客戶端可透過(guò)命令通道發(fā)出 PASV 的被動(dòng)式聯(lián)機(jī)要求 (Passive 的縮寫), 并等待服務(wù)器的回應(yīng);

  • FTP 服務(wù)器啟動(dòng)數(shù)據(jù)端口,并通知客戶端聯(lián)機(jī):
    如果你的 FTP 服務(wù)器是能夠處理被動(dòng)式聯(lián)機(jī)的,此時(shí) FTP 服務(wù)器會(huì)先啟動(dòng)一個(gè)埠口在監(jiān)聽(tīng)。 這個(gè)端口號(hào)碼可能是隨機(jī)的,也可以自定義某一范圍的埠口,端看你的 FTP 服務(wù)器軟件而定。 然后你的 FTP 服務(wù)器會(huì)透過(guò)命令通道告知客戶端該已經(jīng)啟動(dòng)的埠口 (圖中的 port PASV), 并等待客戶端的聯(lián)機(jī)。

  • 客戶端隨機(jī)取用大于 1024 的埠口進(jìn)行連接:
    然后你的客戶端會(huì)隨機(jī)取用一個(gè)大于 1024 的端口號(hào)來(lái)對(duì)主機(jī)的 port PASV 聯(lián)機(jī)。 如果一切都順利的話,那么你的 FTP 數(shù)據(jù)就可以透過(guò) port BB 及 port PASV 來(lái)傳送了。
  • 發(fā)現(xiàn)上面的不同點(diǎn)了嗎?被動(dòng)式 FTP 數(shù)據(jù)信道的聯(lián)機(jī)方向是由客戶端向服務(wù)器端聯(lián)機(jī)的喔! 如此一來(lái),在 NAT 內(nèi)部的客戶端主機(jī)就可以順利的連接上 FTP Server 了!但是,萬(wàn)一 FTP 主機(jī)也是在 NAT 后端那怎么辦...呵呵!那可就糗了吧~ @_@這里就牽涉到更深入的 DMZ 技巧了,我們這里暫不介紹這些深入的技巧,先理解一下這些特殊的聯(lián)機(jī)方向, 這將有助于你未來(lái)服務(wù)器架設(shè)時(shí)候的考慮因素喔!

    此外,不曉得你有無(wú)發(fā)現(xiàn),透過(guò) PASV 模式,服務(wù)器在沒(méi)有特別設(shè)定的情況下,會(huì)隨機(jī)選取大于 1024 的埠口來(lái)提供客戶端連接之用。那么萬(wàn)一服務(wù)器啟用的埠口被搞鬼怎么辦?而且, 如此一來(lái)也很難追蹤來(lái)自入侵者攻擊的登錄信息啊!所以,這個(gè)時(shí)候我們可以透過(guò) passive ports 的功能來(lái)『限定』服務(wù)器啟用的 port number 喔!


    21.1.4 FTP 的安全性問(wèn)題與替代方案

    其實(shí),在 FTP 上面?zhèn)魉偷臄?shù)據(jù)很可能被竊取,因?yàn)?FTP 是明碼傳輸?shù)穆?#xff01;而且某些 FTP 服務(wù)器軟件的資安歷史問(wèn)題也是很嚴(yán)重的。 因此,一般來(lái)說(shuō),除非是學(xué)校或者是一些社團(tuán)單位要開(kāi)放沒(méi)有機(jī)密或授權(quán)問(wèn)題的資料之外,FTP 是少用為妙的。

    拜?SSH?所賜,目前我們已經(jīng)有較為安全的 FTP 了,那就是 ssh 提供的 sftp 這個(gè) server 啊!這個(gè) sftp-server 最大的優(yōu)點(diǎn)就是:『在上面?zhèn)鬏數(shù)臄?shù)據(jù)是經(jīng)過(guò)加密的』!所以在因特網(wǎng)上面流竄的時(shí)候, 嘿嘿!畢竟是比較安全一些啦!所以建議你,除非必要,否則的話使用 SSH 提供的 sftp-server 功能即可~

    然而這個(gè)功能對(duì)于一些習(xí)慣了圖形接口,或者是有中文檔名的使用者來(lái)說(shuō),實(shí)在是不怎么方便, 雖說(shuō)目前有個(gè)圖形接口的 filezilla 客戶端軟件,不過(guò)很多時(shí)候還是會(huì)發(fā)生一些莫名的問(wèn)題說(shuō)! 所以,有的時(shí)候 FTP 網(wǎng)站還是有其存在的需要的。如果真的要架設(shè) FTP 網(wǎng)站,那么還是得需要注意幾個(gè)事項(xiàng)喔:

  • 隨時(shí)更新到最新版本的 FTP 軟件,并隨時(shí)注意漏洞訊息;
  • 善用 iptables 來(lái)規(guī)定可以使用 FTP 的網(wǎng)域;
  • 善用 TCP_Wrappers 來(lái)規(guī)范可以登入的網(wǎng)域;
  • 善用 FTP 軟件的設(shè)定來(lái)限制使用你 FTP 服務(wù)器的使用者的不同權(quán)限啊;
  • 使用 Super daemon 來(lái)進(jìn)階管理你的 FTP 服務(wù)器;
  • 隨時(shí)注意用戶的家目錄、以及匿名用戶登入的目錄的『檔案權(quán)限』;
  • 若不對(duì)外公開(kāi)的話,或許也可以修改 FTP 的 port 。
  • 也可以使用 FTPs 這種加密的 FTP 功能!
  • 無(wú)論如何,在網(wǎng)絡(luò)上聽(tīng)過(guò)太多人都是由于開(kāi)放 FTP 這個(gè)服務(wù)器而導(dǎo)致整個(gè)主機(jī)被入侵的事件,所以, 這里真的要給他一直不斷的強(qiáng)調(diào),要注意安全啊!


    21.1.5 開(kāi)放什么身份的使用者登入

    既然 FTP 是以明碼傳輸,并且某些早期的 FTP 服務(wù)器軟件也有不少的安全漏洞,那又為何需要架設(shè) FTP 服務(wù)器啊? 沒(méi)辦法啊,總是有人有需要這個(gè)玩意兒的,譬如說(shuō)各大專院校不就有提供 FTP 網(wǎng)站的服務(wù)嗎? 這樣可以讓校內(nèi)的同學(xué)共同分享校內(nèi)的網(wǎng)絡(luò)資源嘛!不過(guò),由于 FTP 登入者的身份可以分為三種, 你到底要開(kāi)放哪一種身份登入呢?這個(gè)時(shí)候你可以這樣簡(jiǎn)單的思考一下啰:


    • 開(kāi)放實(shí)體用戶的情況 (Real user):

    很多的 FTP 服務(wù)器默認(rèn)就已經(jīng)允許實(shí)體用戶的登入了。不過(guò),需要了解的是,以實(shí)體用戶做為 FTP 登入者身份時(shí), 系統(tǒng)默認(rèn)并沒(méi)有針對(duì)實(shí)體用戶來(lái)進(jìn)行『限制』的,所以他可以針對(duì)整個(gè)文件系統(tǒng)進(jìn)行任何他所具有權(quán)限的工作。 因此,如果你的 FTP 使用者沒(méi)能好好的保護(hù)自己的密碼而導(dǎo)致被入侵,那么你的整個(gè) Linux 系統(tǒng)數(shù)據(jù)將很有可能被竊取啊! 開(kāi)放實(shí)體用戶時(shí)的建議如下:

    • 使用替代的 FTP 方案較佳:?由于實(shí)體用戶本來(lái)就可以透過(guò)網(wǎng)絡(luò)連接到主機(jī)來(lái)進(jìn)行工作 (例如 SSH),因此實(shí)在沒(méi)有需要特別的開(kāi)放 FTP 的服務(wù)啊!因?yàn)槔?sftp 本來(lái)就能達(dá)到傳輸檔案的功能啰!

    • 限制用戶能力,如 chroot 與 /sbin/nologin 等:?如果確定要讓實(shí)體用戶利用 FTP 服務(wù)器的話,那么你可能需要讓某些系統(tǒng)賬號(hào)無(wú)法登入 FTP 才行,例如 bin, apache 等等。 最簡(jiǎn)單常用的作法是透過(guò) PAM 模塊來(lái)處理,譬如 vsftpd 這個(gè)軟件默認(rèn)可以透過(guò) /etc/vsftpd/ftpusers 這個(gè)檔案來(lái)設(shè)定不想讓他具有登入 FTP 的賬號(hào)。另外,將使用者身份 chroot 是相當(dāng)需要的!


    • 訪客身份 (Guest)

    通常會(huì)建立 guest 身份的案例當(dāng)中,多半是由于服務(wù)器提供了類似『個(gè)人 Web 首頁(yè)』的功能給一般身份用戶, 那么這些使用者總是需要管理自己的網(wǎng)頁(yè)空間吧?這個(gè)時(shí)候?qū)⑹褂谜叩纳矸輭嚎s成為 guest ,并且將他的可用目錄設(shè)定好,即可提供使用者一個(gè)方便的使用環(huán)境了!且不需要提供他 real user 的權(quán)限喔! 常見(jiàn)的建議如下:

    • 僅提供需要登入的賬號(hào)即可,不需要提供系統(tǒng)上面所有人均可登入的環(huán)境啊!

    • 當(dāng)然,我們?cè)诜?wù)器的設(shè)定當(dāng)中,需要針對(duì)不同的訪客給他們不一樣的『家目錄』, 而這個(gè)家目錄與用戶的權(quán)限設(shè)定需要相符合喔!例如要提供 dmtsai 這個(gè)人管理他的網(wǎng)頁(yè)空間,而他的網(wǎng)頁(yè)空間放置在 /home/dmtsai/www 底下,那我就將 dmtsai 在 FTP 提供的目錄僅有 /home/dmtsai/www 而已,比較安全啦!而且也方便使用者啊!

    • 針對(duì)這樣的身份者,需要設(shè)定較多的限制,包括:上下傳檔案數(shù)目與硬盤容量的限制、 聯(lián)機(jī)登入的時(shí)間限制、許可使用的指令要減少很多很多,例如 chmod 就不要允許他使用等等!


    • 匿名登錄使用者 (anonymous)

    雖然提供匿名登錄給因特網(wǎng)的使用者進(jìn)入實(shí)在不是個(gè)好主意,因?yàn)槊總€(gè)人都可以去下載你的數(shù)據(jù), 萬(wàn)一帶寬被吃光光怎么辦?但如同前面講過(guò)的,學(xué)校單位需要分享全校同學(xué)一些軟件資源時(shí), FTP 服務(wù)器也是一個(gè)很不錯(cuò)的解決方案啊!你說(shuō)是吧。如果要開(kāi)放匿名用戶的話,要注意:

    • 無(wú)論如何,提供匿名登錄都是一件相當(dāng)危險(xiǎn)的事情,因?yàn)橹灰阋徊恍⌒?#xff0c; 將重要的資料放置到匿名者可以讀取的目錄中時(shí),那么就很有可能會(huì)泄密!與其戰(zhàn)戰(zhàn)兢兢,不如就不要設(shè)定啊~

    • 果真要開(kāi)放匿名登錄時(shí),很多限制都要進(jìn)行的,這包括:(1)允許的工作指令要減低很多, 幾乎就不許匿名者使用指令啦、(2)限制文件傳輸?shù)臄?shù)量,盡量不要允許『上傳』數(shù)據(jù)的設(shè)定、 (3)限制匿名者同時(shí)登入的最大聯(lián)機(jī)數(shù)量,可以控制盜連喔!

    一般來(lái)說(shuō),如果你是要放置一些公開(kāi)的、沒(méi)有版權(quán)糾紛的數(shù)據(jù)在網(wǎng)絡(luò)上供人下載的話, 那么一個(gè)僅提供匿名登錄的 FTP 服務(wù)器,并且對(duì)整個(gè)因特網(wǎng)開(kāi)放是 OK 的啦! 不過(guò),如果你預(yù)計(jì)要提供的的軟件或數(shù)據(jù)是具有版權(quán)的,但是該版權(quán)允許你在貴單位內(nèi)傳輸?shù)那闆r下, 那么架設(shè)一個(gè)『僅針對(duì)內(nèi)部開(kāi)放的匿名 FTP 服務(wù)器 (利用防火墻處理) 』也是 OK 的啦!

    如果你還想要讓使用者反饋的話,那是否要架設(shè)一個(gè)匿名者可上傳的區(qū)域呢?鳥(niǎo)哥對(duì)這件事情的看法是.... 『萬(wàn)萬(wàn)不可』啊!如果要讓使用者反饋的話,除非該使用者是你信任的,否則不要允許對(duì)方上傳! 所以此時(shí)一個(gè)文件系統(tǒng)權(quán)限管理嚴(yán)格的 FTP 服務(wù)器,并提供實(shí)體用戶的登入就有點(diǎn)需求啦! 總之,要依照你的需求來(lái)思考是否有需要喔!


    21.2 vsftpd 服務(wù)器基礎(chǔ)設(shè)定

    終于要來(lái)聊一聊這個(gè)簡(jiǎn)單的 vsftpd 啰!vsftpd 的全名是『Very Secure FTP Daemon?』的意思, 換句話說(shuō),vsftpd 最初發(fā)展的理念就是在建構(gòu)一個(gè)以安全為重的 FTP 服務(wù)器呢!我們先來(lái)聊一聊為什么 vsftpd 號(hào)稱『非常安全』呢?然后再來(lái)談設(shè)定吧!


    21.2.1 為何使用 vsftpd

    為了建構(gòu)一個(gè)安全為主的 FTP 服務(wù)器, vsftpd 針對(duì)操作系統(tǒng)的『程序的權(quán)限 (privilege)』概念來(lái)設(shè)計(jì), 如果你讀過(guò)基礎(chǔ)篇的十七章程序與資源管理的話, 應(yīng)該會(huì)曉得系統(tǒng)上面所執(zhí)行的程序都會(huì)引發(fā)一個(gè)程序,我們稱他為 PID (Process ID), 這個(gè) PID 在系統(tǒng)上面能進(jìn)行的任務(wù)與他擁有的權(quán)限有關(guān)。也就是說(shuō), PID 擁有的權(quán)限等級(jí)越高, 他能夠進(jìn)行的任務(wù)就越多。舉例來(lái)說(shuō),使用 root 身份所觸發(fā)的 PID 通常擁有可以進(jìn)行任何工作的權(quán)限等級(jí)。

    不過(guò),萬(wàn)一觸發(fā)這個(gè) PID 的程序 (program) 有漏洞而導(dǎo)致被網(wǎng)絡(luò)怪客 (cracker) 所攻擊而取得此 PID 使用權(quán)時(shí), 那么網(wǎng)絡(luò)怪客將會(huì)取得這個(gè) PID 擁有的權(quán)限吶!所以,近來(lái)發(fā)展的軟件都會(huì)盡量的將服務(wù)取得的 PID 權(quán)限降低,使得該服務(wù)即使不小心被入侵了,入侵者也無(wú)法得到有效的系統(tǒng)管理權(quán)限,這樣會(huì)讓我們的系統(tǒng)較為安全的啦。 vsftpd 就是基于這種想法而設(shè)計(jì)的。

    除了 PID 方面的權(quán)限之外, vsftpd 也支持 chroot 這個(gè)函式的功能,chroot 顧名思義就是『 change root directory 』的意思,那個(gè) root 指的是『根目錄』而非系統(tǒng)管理員。 他可以將某個(gè)特定的目錄變成根目錄,所以與該目錄沒(méi)有關(guān)系的其他目錄就不會(huì)被誤用了。

    舉例來(lái)說(shuō),如果你以匿名身份登入我們的 ftp 服務(wù)的話,通常你會(huì)被限定在 /var/ftp 目錄下工作, 而你看到的根目錄其實(shí)就只是 /var/ftp ,至于系統(tǒng)其他如 /etc, /home, /usr... 等其他目錄你就看不到了! 這樣一來(lái)即使這個(gè) ftp 服務(wù)被攻破了,沒(méi)有關(guān)系,入侵者還是僅能在 /var/ftp 里面跑來(lái)跑去而已,而無(wú)法使用 Linux 的完整功能。自然我們的系統(tǒng)也就會(huì)比較安全啦!

    vsftpd 是基于上面的說(shuō)明來(lái)設(shè)計(jì)的一個(gè)較為安全的 FTP 服務(wù)器軟件,他具有底下的特點(diǎn)喔:

    • vsftpd 這個(gè)服務(wù)的啟動(dòng)者身份為一般用戶,所以對(duì)于 Linux 系統(tǒng)的權(quán)限較低,對(duì)于 Linux 系統(tǒng)的危害就相對(duì)的減低了。此外, vsftpd 亦利用 chroot() 這個(gè)函式進(jìn)行改換根目錄的動(dòng)作,使得系統(tǒng)工具不會(huì)被 vsftpd 這支服務(wù)所誤用;

    • 任何需要具有較高執(zhí)行權(quán)限的 vsftpd 指令均以一支特殊的上層程序所控制, 該上層程序享有的較高執(zhí)行權(quán)限功能已經(jīng)被限制的相當(dāng)?shù)牡?#xff0c;并以不影響 Linux 本身的系統(tǒng)為準(zhǔn);

    • 絕大部分 ftp 會(huì)使用到的額外指令功能 (dir, ls, cd ...) 都已經(jīng)被整合到 vsftpd 主程序當(dāng)中了,因此理論上 vsftpd 不需要使用到額外的系統(tǒng)提供的指令,所以在 chroot 的情況下,vsftpd 不但可以順利運(yùn)作,且不需要額外功能對(duì)于系統(tǒng)來(lái)說(shuō)也比較安全。

    • 所有來(lái)自客戶端且想要使用這支上層程序所提供的較高執(zhí)行權(quán)限之 vsftpd 指令的需求, 均被視為『不可信任的要求』來(lái)處理,必需要經(jīng)過(guò)相當(dāng)程度的身份確認(rèn)后,方可利用該上層程序的功能。 例如 chown(), Login 的要求等等動(dòng)作;

    • 此外,上面提到的上層程序中,依然使用 chroot() 的功能來(lái)限制用戶的執(zhí)行權(quán)限。

    由于具有這樣的特點(diǎn),所以 vsftpd 會(huì)變的比較安全一些咯!底下就開(kāi)始來(lái)談如何設(shè)定吧!


    21.2.2 所需要的軟件以及軟件結(jié)構(gòu)

    vsftpd 所需要的軟件只有一個(gè),那就是 vsftpd 啊!^_^!如果你的 CentOS 沒(méi)有安裝,請(qǐng)利用 yum install vsftpd 來(lái)安裝他吧!軟件很小,下載連同安裝不需要幾秒鐘就搞定了!而事實(shí)上整個(gè)軟件提供的配置文件也少的令人高興!簡(jiǎn)單易用就是 vsftpd 的特色啊!這些設(shè)定數(shù)據(jù)比較重要的有:

    • /etc/vsftpd/vsftpd.conf
      嚴(yán)格來(lái)說(shuō),整個(gè) vsftpd 的配置文件就只有這個(gè)檔案!這個(gè)檔案的設(shè)定是以?bash 的變量設(shè)定相同的方式來(lái)處理的, 也就是『參數(shù)=設(shè)定值』來(lái)設(shè)定的,注意,?等號(hào)兩邊不能有空白喔!至于詳細(xì)的 vsftpd.conf 可以使用 『 man 5 vsftpd.conf 』來(lái)詳查。

    • /etc/pam.d/vsftpd
      這個(gè)是 vsftpd 使用 PAM 模塊時(shí)的相關(guān)配置文件。主要用來(lái)作為身份認(rèn)證之用,還有一些用戶身份的抵擋功能, 也是透過(guò)這個(gè)檔案來(lái)達(dá)成的。你可以察看一下該檔案:
      [root@www ~]# cat /etc/pam.d/vsftpd #%PAM-1.0 session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed auth required pam_shells.so auth include password-auth account include password-auth session required pam_loginuid.so session include password-auth
      上面那個(gè) file 后面接的檔案是『限制使用者無(wú)法使用 vsftpd 』之意, 也就是說(shuō),其實(shí)你的限制檔案不見(jiàn)得要使用系統(tǒng)默認(rèn)值,也可以在這個(gè)檔案里面進(jìn)行修改啦! ^_^

    • /etc/vsftpd/ftpusers
      與上一個(gè)檔案有關(guān)系,也就是 PAM 模塊 (/etc/pam.d/vsftpd) 所指定的那個(gè)無(wú)法登入的用戶配置文件啊! 這個(gè)檔案的設(shè)定很簡(jiǎn)單,你只要將『不想讓他登入 FTP 的賬號(hào)』寫入這個(gè)檔案即可。一行一個(gè)賬號(hào),看起來(lái)像這樣:
      [root@www ~]# cat /etc/vsftpd/ftpusers # Users that are not allowed to login via ftp root bin daemon ....(底下省略)....
      瞧見(jiàn)沒(méi)有?絕大部分的系統(tǒng)賬號(hào)都在這個(gè)檔案內(nèi)喔,也就是說(shuō),系統(tǒng)賬號(hào)默認(rèn)是沒(méi)有辦法使用 vsftpd 的啦! 如果你還想要讓某些使用者無(wú)法登入,寫在這里是最快的!

    • /etc/vsftpd/user_list
      這個(gè)檔案是否能夠生效與 vsftpd.conf 內(nèi)的兩個(gè)參數(shù)有關(guān),分別是『 userlist_enable, userlist_deny 』。 如果說(shuō) /etc/vsftpd/ftpusers 是 PAM 模塊的抵擋設(shè)定項(xiàng)目,那么這個(gè) /etc/vsftpd/user_list 則是 vsftpd 自定義的抵擋項(xiàng)目。事實(shí)上這個(gè)檔案與 /etc/vsftpd/ftpusers 幾乎一模一樣, 在預(yù)設(shè)的情況下,你可以將不希望可登入 vsftpd 的賬號(hào)寫入這里。不過(guò)這個(gè)檔案的功能會(huì)依據(jù) vsftpd.conf 配置文件內(nèi)的 userlist_deny={YES/NO} 而不同,這得要特別留意喔!

    • /etc/vsftpd/chroot_list
      這個(gè)檔案預(yù)設(shè)是不存在的,所以你必須要手動(dòng)自行建立。這個(gè)檔案的主要功能是可以將某些賬號(hào)的使用者 chroot 在他們的家目錄下!但這個(gè)檔案要生效與 vsftpd.conf 內(nèi)的『 chroot_list_enable, chroot_list_file 』兩個(gè)參數(shù)有關(guān)。 如果你想要將某些實(shí)體用戶限制在他們的家目錄下而不許到其他目錄去,可以啟動(dòng)這個(gè)設(shè)定項(xiàng)目喔!

    • /usr/sbin/vsftpd
      這就是 vsftpd 的主要執(zhí)行檔咯!不要懷疑, vsftpd 只有這一個(gè)執(zhí)行檔而已啊!

    • /var/ftp/
      這個(gè)是 vsftpd 的預(yù)設(shè)匿名者登入的根目錄喔!其實(shí)與 ftp 這個(gè)賬號(hào)的家目錄有關(guān)啦!

    大致上就只有這幾個(gè)檔案需要注意而已,而且每個(gè)檔案的設(shè)定又都很簡(jiǎn)單!真是不錯(cuò)啊!


    21.2.3 vsftpd.conf 設(shè)定值說(shuō)明

    事實(shí)上,/etc/vsftpd/vsftpd.conf 本身就是一個(gè)挺詳細(xì)的配置文件,且使用『 man 5 vsftpd.conf 』則可以得到完整的參數(shù)說(shuō)明。 不過(guò)我們這里依舊先將 vsftpd.conf 內(nèi)的常用參數(shù)給他寫出來(lái),希望對(duì)你有幫助:


    • 與服務(wù)器環(huán)境較相關(guān)的設(shè)定值
    • connect_from_port_20=YES (NO)
      記得在前一小節(jié)提到的主動(dòng)式聯(lián)機(jī)使用的 FTP 服務(wù)器的 port 嗎?這就是 ftp-data 的埠號(hào);

    • listen_port=21
      vsftpd 使用的命令通道 port,如果你想要使用非正規(guī)的埠號(hào),在這個(gè)設(shè)定項(xiàng)目修改吧! 不過(guò)你必須要知道,這個(gè)設(shè)定值僅適合以 stand alone 的方式來(lái)啟動(dòng)喔!(對(duì)于 super daemon 無(wú)效)

    • dirmessage_enable=YES (NO)
      當(dāng)用戶進(jìn)入某個(gè)目錄時(shí),會(huì)顯示該目錄需要注意的內(nèi)容,顯示的檔案默認(rèn)是 .message ,你可以使用底下的設(shè)定項(xiàng)目來(lái)修訂!

    • message_file=.message
      當(dāng) dirmessage_enable=YES 時(shí),可以設(shè)定這個(gè)項(xiàng)目來(lái)讓 vsftpd 尋找該檔案來(lái)顯示訊息!

    • listen=YES (NO)
      若設(shè)定為 YES 表示 vsftpd 是以 standalone 的方式來(lái)啟動(dòng)的!預(yù)設(shè)是 NO 呦!所以我們的 CentOS 將它改為 YES 哩!這樣才能使用 stand alone 的方式來(lái)喚醒。

    • pasv_enable=YES (NO)
      支持?jǐn)?shù)據(jù)流的被動(dòng)式聯(lián)機(jī)模式(passive mode),一定要設(shè)定為 YES 的啦!

    • use_localtime=YES (NO)
      是否使用本地時(shí)間?vsftpd 預(yù)設(shè)使用 GMT 時(shí)間(格林威治),所以預(yù)設(shè)的 FTP 內(nèi)的檔案日期會(huì)比臺(tái)灣晚 8 小時(shí),建議修改設(shè)定為 YES 吧!

    • write_enable=YES (NO)
      如果你允許用戶上傳數(shù)據(jù)時(shí),就要啟動(dòng)這個(gè)設(shè)定值;

    • connect_timeout=60
      單位是秒,在數(shù)據(jù)連接的主動(dòng)式聯(lián)機(jī)模式下,我們發(fā)出的連接訊號(hào)在 60 秒內(nèi)得不到客戶端的響應(yīng),則不等待并強(qiáng)制斷線咯。?

    • accept_timeout=60
      當(dāng)用戶以被動(dòng)式 PASV 來(lái)進(jìn)行數(shù)據(jù)傳輸時(shí),如果服務(wù)器啟用 passive port 并等待 client 超過(guò) 60 秒而無(wú)回應(yīng), 那么就給他強(qiáng)制斷線!這個(gè)設(shè)定值與 connect_timeout 類似,不過(guò)一個(gè)是管理主動(dòng)聯(lián)機(jī),一個(gè)管理被動(dòng)聯(lián)機(jī)。

    • data_connection_timeout=300
      如果服務(wù)器與客戶端的數(shù)據(jù)聯(lián)機(jī)已經(jīng)成功建立 (不論主動(dòng)還是被動(dòng)聯(lián)機(jī)),但是可能由于線路問(wèn)題導(dǎo)致 300 秒內(nèi)還是無(wú)法順利的完成數(shù)據(jù)的傳送,那客戶端的聯(lián)機(jī)就會(huì)被我們的 vsftpd 強(qiáng)制剔除!

    • idle_session_timeout=300
      如果使用者在 300 秒內(nèi)都沒(méi)有命令動(dòng)作,強(qiáng)制脫機(jī)!避免占著茅坑不拉屎~

    • max_clients=0
      如果 vsftpd 是以 stand alone 方式啟動(dòng)的,那么這個(gè)設(shè)定項(xiàng)目可以設(shè)定同一時(shí)間,最多有多少 client 可以同時(shí)連上 vsftpd 哩!限制使用 FTP 的用量!

    • max_per_ip=0
      與上面 max_clients 類似,這里是同一個(gè) IP 同一時(shí)間可允許多少聯(lián)機(jī)?

    • pasv_min_port=0, pasv_max_port=0
      上面兩個(gè)是與 passive mode 使用的 port number 有關(guān),如果你想要使用 65400 到 65410 這 11 個(gè) port 來(lái)進(jìn)行被動(dòng)式聯(lián)機(jī)模式的連接,可以這樣設(shè)定 pasv_max_port=65410 以及 pasv_min_port=65400。 如果是 0 的話,表示隨機(jī)取用而不限制。

    • ftpd_banner=一些文字說(shuō)明
      當(dāng)使用者聯(lián)機(jī)進(jìn)入到 vsftpd 時(shí),在 FTP 客戶端軟件上頭會(huì)顯示的說(shuō)明文字。不過(guò),這個(gè)設(shè)定值數(shù)據(jù)比較少啦! 建議你可以使用底下的 banner_file 設(shè)定值來(lái)取代這個(gè)項(xiàng)目;

    • banner_file=/path/file
      這個(gè)項(xiàng)目可以指定某個(gè)純文本檔作為使用者登入 vsftpd 服務(wù)器時(shí)所顯示的歡迎字眼。同時(shí),也能夠放置一些讓使用者知道本 FTP 服務(wù)器的目錄架構(gòu)!


    • 與實(shí)體用戶較相關(guān)的設(shè)定值
    • guest_enable=YES (NO)
      若這個(gè)值設(shè)定為 YES 時(shí),那么任何實(shí)體賬號(hào),均會(huì)被假設(shè)成為 guest 喔 (所以預(yù)設(shè)是不開(kāi)放的)! 至于訪客在 vsftpd 當(dāng)中,預(yù)設(shè)會(huì)取得 ftp 這個(gè)使用者的相關(guān)權(quán)限。但可以透過(guò) guest_username 來(lái)修改。

    • guest_username=ftp
      在 guest_enable=YES 時(shí)才會(huì)生效,指定訪客的身份而已。

    • local_enable=YES (NO)
      這個(gè)設(shè)定值必須要為 YES 時(shí),在 /etc/passwd 內(nèi)的賬號(hào)才能以實(shí)體用戶的方式登入我們的 vsftpd 服務(wù)器喔!

    • local_max_rate=0
      實(shí)體用戶的傳輸速度限制,單位為 bytes/second, 0 為不限制。

    • chroot_local_user=YES (NO)
      在預(yù)設(shè)的情況下,是否要將使用者限制在自己的家目錄之內(nèi)(chroot)?如果是 YES 代表用戶默認(rèn)就會(huì)被 chroot,如果是 NO, 則預(yù)設(shè)是沒(méi)有 chroot。不過(guò),實(shí)際還是需要底下的兩個(gè)參數(shù)互相參考才行。為了安全性,這里應(yīng)該要設(shè)定成 YES 才好。

    • chroot_list_enable=YES (NO)
      是否啟用 chroot 寫入列表的功能?與底下的 chroot_list_flie 有關(guān)!這個(gè)項(xiàng)目得要開(kāi)啟,否則底下的列表檔案會(huì)無(wú)效。?

    • chroot_list_file=/etc/vsftpd.chroot_list
      如果 chroot_list_enable=YES 那么就可以設(shè)定這個(gè)項(xiàng)目了!這個(gè)項(xiàng)目與 chroot_local_user 有關(guān),詳細(xì)的設(shè)定狀態(tài)請(qǐng)參考21.2.6 chroot?的說(shuō)明。

    • userlist_enable=YES (NO)
      是否藉助 vsftpd 的抵擋機(jī)制來(lái)處理某些不受歡迎的賬號(hào),與底下的參數(shù)設(shè)定有關(guān);

    • userlist_deny=YES (NO)
      當(dāng) userlist_enable=YES 時(shí)才會(huì)生效的設(shè)定,若此設(shè)定值為 YES 時(shí),則當(dāng)使用者賬號(hào)被列入到某個(gè)檔案時(shí), 在該檔案內(nèi)的使用者將無(wú)法登入 vsftpd 服務(wù)器!該檔案文件名與下列設(shè)定項(xiàng)目有關(guān)。

    • userlist_file=/etc/vsftpd/user_list
      若上面 userlist_deny=YES 時(shí),則這個(gè)檔案就有用處了!在這個(gè)檔案內(nèi)的賬號(hào)都無(wú)法使用 vsftpd 喔!


    • 匿名者登入的設(shè)定值
    • anonymous_enable=YES (NO)
      設(shè)定為允許 anonymous 登入我們的 vsftpd 主機(jī)!預(yù)設(shè)是 YES ,底下的所有相關(guān)設(shè)定都需要將這個(gè)設(shè)定為 anonymous_enable=YES 之后才會(huì)生效!

    • anon_world_readable_only=YES (NO)
      僅允許 anonymous 具有下載可讀檔案的權(quán)限,預(yù)設(shè)是 YES。

    • anon_other_write_enable=YES (NO)
      是否允許 anonymous 具有除了寫入之外的權(quán)限?包括刪除與改寫服務(wù)器上的檔案及檔名等權(quán)限。預(yù)設(shè)當(dāng)然是 NO!如果要設(shè)定為 YES,那么開(kāi)放給 anonymous 寫入的目錄亦需要調(diào)整權(quán)限,讓 vsftpd 的 PID 擁有者可以寫入才行!

    • anon_mkdir_write_enable=YES (NO)
      是否讓 anonymous 具有建立目錄的權(quán)限?默認(rèn)值是 NO!如果要設(shè)定為 YES, 那么 anony_other_write_enable 必須設(shè)定為 YES !

    • anon_upload_enable=YES (NO)
      是否讓 anonymous 具有上傳數(shù)據(jù)的功能,默認(rèn)是 NO,如果要設(shè)定為 YES ,則 anon_other_write_enable=YES 必須設(shè)定。

    • deny_email_enable=YES (NO)
      將某些特殊的 email address 抵擋住,不讓那些 anonymous 登入!如果以 anonymous 登入服務(wù)器時(shí),不是會(huì)要求輸入密碼嗎?密碼不是要你輸入你的 email address 嗎?如果你很討厭某些 email address, 就可以使用這個(gè)設(shè)定來(lái)將他取消登入的權(quán)限!需與下個(gè)設(shè)定項(xiàng)目配合:

    • banned_email_file=/etc/vsftpd/banned_emails
      如果 deny_email_enable=YES 時(shí),可以利用這個(gè)設(shè)定項(xiàng)目來(lái)規(guī)定哪個(gè) email address 不可登入我們的 vsftpd 喔!在上面設(shè)定的檔案內(nèi),一行輸入一個(gè) email address 即可!

    • no_anon_password=YES (NO)
      當(dāng)設(shè)定為 YES 時(shí),表示 anonymous 將會(huì)略過(guò)密碼檢驗(yàn)步驟,而直接進(jìn)入 vsftpd 服務(wù)器內(nèi)喔!所以一般預(yù)設(shè)都是 NO 的!(登入時(shí)會(huì)檢查輸入的 emai)

    • anon_max_rate=0
      這個(gè)設(shè)定值后面接的數(shù)值單位為 bytes/秒 ,限制 anonymous 的傳輸速度,如果是 0 則不限制(由最大帶寬所限制),如果你想讓 anonymous 僅有 30 KB/s 的速度,可以設(shè)定『anon_max_rate=30000』

    • anon_umask=077
      限制 anonymous 上傳檔案的權(quán)限!如果是 077 則 anonymous 傳送過(guò)來(lái)的檔案權(quán)限會(huì)是 -rw------- 喔!


    • 關(guān)于系統(tǒng)安全方面的一些設(shè)定值
    • ascii_download_enable=YES (NO)
      如果設(shè)定為 YES ,那么 client 就優(yōu)先 (預(yù)設(shè)) 使用 ASCII 格式下載文件。

    • ascii_upload_enable=YES (NO)
      與上一個(gè)設(shè)定類似的,只是這個(gè)設(shè)定針對(duì)上傳而言!預(yù)設(shè)是 NO

    • one_process_model=YES (NO)
      這個(gè)設(shè)定項(xiàng)目比較危險(xiǎn)一點(diǎn)~當(dāng)設(shè)定為 YES 時(shí),表示每個(gè)建立的聯(lián)機(jī)都會(huì)擁有一支 process 在負(fù)責(zé),可以增加 vsftpd 的效能。不過(guò), 除非你的系統(tǒng)比較安全,而且硬件配備比較高,否則容易耗盡系統(tǒng)資源喔!一般建議設(shè)定為 NO 的啦!

    • tcp_wrappers=YES (NO)
      當(dāng)然我們都習(xí)慣支持?TCP Wrappers?的啦!所以設(shè)定為 YES 吧!

    • xferlog_enable=YES (NO)
      當(dāng)設(shè)定為 YES 時(shí),使用者上傳與下載文件都會(huì)被紀(jì)錄起來(lái)。記錄的檔案與下一個(gè)設(shè)定項(xiàng)目有關(guān):

    • xferlog_file=/var/log/xferlog
      如果上一個(gè) xferlog_enable=YES 的話,這里就可以設(shè)定了!這個(gè)是登錄檔的檔名啦!

    • xferlog_std_format=YES (NO)
      是否設(shè)定為 wu ftp 相同的登錄檔格式?預(yù)設(shè)為 NO ,因?yàn)榈卿洐n會(huì)比較容易讀! 不過(guò),如果你有使用 wu ftp 登錄文件的分析軟件,這里才需要設(shè)定為 YES

    • dual_log_enable=YES, vsftpd_log_file=/var/log/vsftpd.log
      除了 /var/log/xferlog 的 wu-ftp 格式登錄檔之外,還可以具有 vsftpd 的獨(dú)特登錄檔格式喔!如果你的 FTP 服務(wù)器并不是很忙碌, 或許訂出兩個(gè)登錄檔的撰寫 (/var/log/{vsftpd.log,xferlog) 是不錯(cuò)的。

    • nopriv_user=nobody
      我們的 vsftpd 預(yù)設(shè)以 nobody 作為此一服務(wù)執(zhí)行者的權(quán)限。因?yàn)?nobody 的權(quán)限相當(dāng)?shù)牡?#xff0c;因此即使被入侵,入侵者僅能取得 nobody 的權(quán)限喔!

    • pam_service_name=vsftpd
      這個(gè)是 pam 模塊的名稱,我們放置在 /etc/pam.d/vsftpd 即是這個(gè)咚咚!

    上面這些是常見(jiàn)的 vsftpd 的設(shè)定參數(shù),還有很多參數(shù)我沒(méi)有列出來(lái),你可以使用 man 5 vsftpd.conf 查閱喔!不過(guò),基本上上面這些參數(shù)已經(jīng)夠我們?cè)O(shè)定 vsftpd 啰。


    21.2.4 vsftpd 啟動(dòng)的模式

    vsftpd 可以使用 stand alone 或 super daemon 的方式來(lái)啟動(dòng),我們 CentOS 預(yù)設(shè)是以 stand alone 來(lái)啟動(dòng)的。 那什么時(shí)候應(yīng)該選擇 stand alone 或者是 super daemon 呢?如果你的 ftp 服務(wù)器是提供給整個(gè)因特網(wǎng)來(lái)進(jìn)行大量下載的任務(wù),例如各大專院校的 FTP 服務(wù)器,那建議你使用 stand alone 的方式, 服務(wù)的速度上會(huì)比較好。如果僅是提供給內(nèi)部人員使用的 FTP 服務(wù)器,那使用 super daemon 來(lái)管理即可啊。


    • 利用 CentOS 提供的 script 來(lái)啟動(dòng) vsftpd (stand alone)

    其實(shí) CentOS 不用作任何設(shè)定就能夠啟動(dòng) vsftpd 啰!是這樣啟動(dòng)的啦:

    [root@www ~]# /etc/init.d/vsftpd start [root@www ~]# netstat -tulnp| grep 21 tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 11689/vsftpd # 看到啰,是由 vsftpd 所啟動(dòng)的呢!


    • 自行設(shè)定以 super daemon 來(lái)啟動(dòng) (有必要再進(jìn)行,不用實(shí)作)

    如果你的 FTP 是很少被使用的,那么利用 super daemon 來(lái)管理不失為一個(gè)好主意。 不過(guò)若你想要使用 super daemon 管理的話,那就得要自行修改一下配置文件了。其實(shí)也不難啦,你應(yīng)該要這樣處理的:

    [root@www ~]# vim /etc/vsftpd/vsftpd.conf # 找到 listen=YES 這一行:大約在 109 行左右啦,并將它改成: listen=NO

    接下來(lái)修改一下 super daemon 的配置文件,底下這個(gè)檔案你必須要自行建立的,原本是不存在的喔:

    [root@www ~]# yum install xinetd <==假設(shè) xinetd 沒(méi)有安裝時(shí) [root@www ~]# vim /etc/xinetd.d/vsftpd service ftp {socket_type = streamwait = nouser = rootserver = /usr/sbin/vsftpdlog_on_success += DURATION USERIDlog_on_failure += USERIDnice = 10disable = no }

    然后嘗試啟動(dòng)看看呢:

    [root@www ~]# /etc/init.d/vsftpd stop [root@www ~]# /etc/init.d/xinetd restart [root@www ~]# netstat -tulnp| grep 21 tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 32274/xinetd

    有趣吧!兩者啟動(dòng)的方式可不一樣啊!管理的方式就會(huì)差很多的呦!不管你要使用哪種啟動(dòng)的方式,切記不要兩者同時(shí)啟動(dòng),否則會(huì)發(fā)生錯(cuò)誤的!你應(yīng)該使用 chkconfig --list 檢查一下這兩種啟動(dòng)的方式,然后依據(jù)你的需求來(lái)決定用哪一種方式啟動(dòng)。鳥(niǎo)哥底下的設(shè)定都會(huì)以 stand alone 這個(gè) CentOS 默認(rèn)的啟動(dòng)模式來(lái)處理,所以趕緊將剛剛的動(dòng)作給他改回來(lái)喔!


    21.2.5 CentOS 的 vsftpd 默認(rèn)值

    在 CentOS 的默認(rèn)值當(dāng)中,vsftpd 是同時(shí)開(kāi)放實(shí)體用戶與匿名用戶的,CentOS 的默認(rèn)值如下:

    [root@www ~]# vim /etc/vsftpd/vsftpd.conf # 1. 與匿名者有關(guān)的信息: anonymous_enable=YES <==支持匿名者的登入使用 FTP 功能# 2. 與實(shí)體用戶有關(guān)的設(shè)定 local_enable=YES <==支持本地端的實(shí)體用戶登入 write_enable=YES <==允許用戶上傳數(shù)據(jù) (包括檔案與目錄) local_umask=022 <==建立新目錄 (755) 與檔案 (644) 的權(quán)限# 3. 與服務(wù)器環(huán)境有關(guān)的設(shè)定 dirmessage_enable=YES <==若目錄下有 .message 則會(huì)顯示該檔案的內(nèi)容 xferlog_enable=YES <==啟動(dòng)登錄文件記錄,記錄于 /var/log/xferlog connect_from_port_20=YES <==支持主動(dòng)式聯(lián)機(jī)功能 xferlog_std_format=YES <==支持 WuFTP 的登錄檔格式 listen=YES <==使用 stand alone 方式啟動(dòng) vsftpd pam_service_name=vsftpd <==支持 PAM 模塊的管理 userlist_enable=YES <==支持 /etc/vsftpd/user_list 檔案內(nèi)的賬號(hào)登入管控! tcp_wrappers=YES <==支持 TCP Wrappers 的防火墻機(jī)制

    上面各項(xiàng)設(shè)定值請(qǐng)自行參考?21.2.3?的詳細(xì)說(shuō)明吧。而通過(guò)這樣的設(shè)定值咱們的 vsftpd 可以達(dá)到如下的功能:

    • 你可以使用 anonymous 這個(gè)匿名賬號(hào)或其他實(shí)體賬號(hào) (/etc/passwd) 登入;
    • anonymous 的家目錄在 /var/ftp ,且無(wú)上傳權(quán)限,亦已經(jīng)被 chroot 了;
    • 實(shí)體用戶的家目錄參考 /etc/passwd,并沒(méi)有被 chroot,可前往任何有權(quán)限可進(jìn)入的目錄中;
    • 任何于 /etc/vsftpd/ftpusers 內(nèi)存在的賬號(hào)均無(wú)法使用 vsftpd (PAM);
    • 可利用 /etc/hosts.{allow|deny} 來(lái)作為基礎(chǔ)防火墻;
    • 當(dāng)客戶端有任何上傳/下載信息時(shí),該信息會(huì)被紀(jì)錄到 /var/log/xferlog 中;
    • 主動(dòng)式聯(lián)機(jī)的埠口為 port 20;
    • 使用格林威治時(shí)間 (GMT)。

    所以當(dāng)你啟動(dòng) vsftpd 后,你的實(shí)體用戶就能夠直接利用 vsftpd 這個(gè)服務(wù)來(lái)傳輸他自己的數(shù)據(jù)了。 不過(guò)比較大的問(wèn)題是,因?yàn)?vsftpd 預(yù)設(shè)使用 GMT 時(shí)間,因?yàn)槟阍诳蛻舳耸褂?ftp 軟件連接到 FTP 服務(wù)器時(shí),會(huì)發(fā)現(xiàn)每個(gè)檔案的時(shí)間都慢了八小時(shí)了!真是討厭啊! 所以建議你加設(shè)一個(gè)參數(shù)值,就是『 use_localtime=YES 』啰!

    [root@www ~]# vim /etc/vsftpd/vsftpd.conf # 在這個(gè)檔案當(dāng)中的最后一行加入這一句即可 use_localtime=YES[root@www ~]# /etc/init.d/vsftpd restart [root@www ~]# chkconfig vsftpd on

    如此一來(lái)你的 FTP 服務(wù)器不但可以提供匿名賬號(hào)來(lái)下載 /var/ftp 的數(shù)據(jù),如果使用實(shí)體賬號(hào)來(lái)登入的話, 就能夠進(jìn)入到該用戶的家目錄底下去了!真是很簡(jiǎn)單方便的一個(gè)設(shè)定啊!且使用本地端時(shí)間呢! ^_^

    另外,如果你預(yù)計(jì)要將 FTP 開(kāi)放給 Internet 使用時(shí),請(qǐng)注意得要開(kāi)放防火墻喔!關(guān)于防火墻的建置情況, 由于牽涉到數(shù)據(jù)流的主動(dòng)、被動(dòng)聯(lián)機(jī)方式,因此,還得要加入防火墻模塊。這部份我們?cè)诤罄m(xù)的?21.2.8 小節(jié)再加以介紹,反正,最終記得要開(kāi)放 FTP 的聯(lián)機(jī)要求就對(duì)了!


    21.2.6 針對(duì)實(shí)體賬號(hào)的設(shè)定

    雖然在 CentOS 的默認(rèn)情況當(dāng)中實(shí)體用戶已經(jīng)可以使用 FTP 的服務(wù)了,不過(guò)我們可能還需要一些額外的功能來(lái)限制實(shí)體用戶。 舉例來(lái)說(shuō),限制用戶無(wú)法離開(kāi)家目錄 (chroot)、限制下載速率、限制用戶上傳檔案時(shí)的權(quán)限 (mask) 等等。 底下我們先列出一些希望達(dá)到的功能,然后再繼續(xù)進(jìn)行額外功能的處理:

    • 希望使用臺(tái)灣本地時(shí)間取代 GMT 時(shí)間;
    • 用戶登入時(shí)顯示一些歡迎訊息的信息;
    • 系統(tǒng)賬號(hào)不可登入主機(jī) (亦即 UID 小于 500 以下的賬號(hào));
    • 一般實(shí)體用戶可以進(jìn)行上傳、下載、建立目錄及修改檔案等動(dòng)作;
    • 用戶新增的檔案、目錄之 umask 希望設(shè)定為 002;
    • 其他主機(jī)設(shè)定值保留默認(rèn)值即可。

    你可以自行處理 vsftpd.conf 這個(gè)檔案,以下則是一個(gè)范例。注意,如果你的 vsftpd.conf 沒(méi)有相關(guān)設(shè)定值, 請(qǐng)自行補(bǔ)上吧!OK!讓我們開(kāi)始一步一步來(lái)依序處理先:

  • 先建立主配置文件 vsftpd.conf,這個(gè)配置文件已經(jīng)包含了主要設(shè)定值:
    [root@www ~]# vim /etc/vsftpd/vsftpd.conf # 1. 與匿名者相關(guān)的信息,在這個(gè)案例中將匿名登錄取消: anonymous_enable=NO# 2. 與實(shí)體用戶相關(guān)的信息:可寫入,且 umask 為 002 喔! local_enable=YES write_enable=YES local_umask=002 userlist_enable=YES userlist_deny=YES userlist_file=/etc/vsftpd/user_list <==這個(gè)檔案必須存在!還好,預(yù)設(shè)有此檔案!# 3. 與服務(wù)器環(huán)境有關(guān)的設(shè)定 use_localtime=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES pam_service_name=vsftpd tcp_wrappers=YES banner_file=/etc/vsftpd/welcome.txt <==這個(gè)檔案必須存在!需手動(dòng)建立![root@www ~]# /etc/init.d/xinetd restart <==取消 super dameon [root@www ~]# /etc/init.d/vsftpd restart

  • 建立歡迎訊息:

    當(dāng)我們想讓登入者可查閱咱們系統(tǒng)管理員所下達(dá)的『公告』事項(xiàng)時(shí),可以使用這個(gè)設(shè)定!那就是 banner_file=/etc/vsftpd/welcome.txt 這個(gè)參數(shù)的用途了!我們可以編輯這個(gè)檔案即可。 好了,開(kāi)始來(lái)建立歡迎畫面吧!
    [root@www ~]# vim /etc/vsftpd/welcome.txt 歡迎光臨本小站,本站提供 FTP 的相關(guān)服務(wù)! 主要的服務(wù)是針對(duì)本機(jī)實(shí)體用戶提供的, 若有任何問(wèn)題,請(qǐng)與鳥(niǎo)哥聯(lián)絡(luò)!

  • 建立限制系統(tǒng)賬號(hào)登入的檔案

    再來(lái)是針對(duì)系統(tǒng)賬號(hào)來(lái)給予抵擋的機(jī)制,其實(shí)有兩個(gè)檔案啦,一個(gè)是 PAM 模塊管的,一個(gè)是 vsftpd 主動(dòng)提供的, 在預(yù)設(shè)的情況下這兩個(gè)檔案分別是:

    • /etc/vsftpd/ftpusers:就是 /etc/pam.d/vsftpd 這個(gè)檔案的設(shè)定所影響的;
    • /etc/vsftpd/user_list:由 vsftpd.conf 的 userlist_file 所設(shè)定。

    這兩個(gè)檔案的內(nèi)容是一樣的哩~并且這兩個(gè)檔案必須要存在才行。請(qǐng)你參考你的 /etc/passwd 配置文件, 然后將 UID 小于 500 的賬號(hào)名稱給他同時(shí)寫到這兩個(gè)檔案內(nèi)吧!一行一個(gè)賬號(hào)!
    [root@www ~]# vim /etc/vsftpd/user_list root bin ....(底下省略)....

  • 測(cè)試結(jié)果:

    你可以使用圖形接口的 FTP 客戶端軟件來(lái)處理,也可以透過(guò) Linux 本身提供的 ftp 客戶端功能哩! 關(guān)于?ftp 指令我們已經(jīng)在第五章談過(guò)了,你可以自行前往參考。這里直接測(cè)試一下吧:
    # 測(cè)試使用已知使用者登入,例如 dmtsai 這個(gè)實(shí)體用戶: [root@www ~]# ftp localhost Trying 127.0.0.1... Connected to localhost (127.0.0.1). 220-歡迎光臨本小站,本站提供 FTP 的相關(guān)服務(wù)! <==剛剛建立的歡迎訊息 220-主要的服務(wù)是針對(duì)本機(jī)實(shí)體用戶提供的, 220-若有任何問(wèn)題,請(qǐng)與鳥(niǎo)哥聯(lián)絡(luò)! 220 Name (localhost:root): student 331 Please specify the password. Password: <==輸入密碼啰在這里! 500 OOPS: cannot change directory:/home/student <==有講登入失敗的原因喔! Login failed. ftp> bye 221 Goodbye.
    由于默認(rèn)一般用戶無(wú)法登入 FTP 的!因?yàn)?SELinux 的問(wèn)題啦!請(qǐng)參考下個(gè)小節(jié)的方式來(lái)處理。 然后以上面的方式測(cè)試完畢后,你可以在登入者賬號(hào)處分別填寫 (1)root (2)anonymous 來(lái)嘗試登入看看! 如果不能登入的話,那就是設(shè)定 OK 的啦!(root 不能登入是因?yàn)?PAM 模塊以及 user_list 設(shè)定值的關(guān)系, 而匿名無(wú)法登入,是因?yàn)槲覀?vsftpd.conf 里頭就是設(shè)定不能用匿名登錄嘛!)
  • 上面是最簡(jiǎn)單的實(shí)體賬號(hào)相關(guān)設(shè)定。那如果你還想要限制用戶家目錄的 chroot 或其他如速限等數(shù)據(jù),就得要看看底下的特殊設(shè)定項(xiàng)目啰。


    • 實(shí)體賬號(hào)的 SELinux 議題

    在預(yù)設(shè)的情況下,CentOS 的 FTP 是不允許實(shí)體賬號(hào)登入取得家目錄數(shù)據(jù)的,這是因?yàn)?SELinux 的問(wèn)題啦! 如果你在剛剛的 ftp localhost 步驟中,在 bye 離開(kāi) FTP 之前下達(dá)過(guò)『 dir 』的話,那你會(huì)發(fā)現(xiàn)沒(méi)有任何資料跑出來(lái)~ 這并不是你錯(cuò)了,而是 SELinux 不太對(duì)勁的緣故。那如何解決呢?這樣處理即可:

    [root@www ~]# getsebool -a | grep ftp allow_ftpd_anon_write --> off allow_ftpd_full_access --> off allow_ftpd_use_cifs --> off allow_ftpd_use_nfs --> off ftp_home_dir --> off <==就是這玩意兒!要設(shè)定 on 才行! ....(底下省略)....[root@www ~]# setsebool -P ftp_home_dir=1

    這樣就搞定啰!如果還有其他可能發(fā)生錯(cuò)誤的原因,包括檔案數(shù)據(jù)使用 mv 而非使用 cp 導(dǎo)致 SELinux 文件類型無(wú)法繼承原有目錄的類型時(shí),那就請(qǐng)自行查閱 /var/log/messages 的內(nèi)容吧!通常 SELinux 沒(méi)有這么難處理的啦!^_^


    • 對(duì)使用者 (包括未來(lái)新增用戶) 進(jìn)行 chroot

    在鳥(niǎo)哥接觸的一般 FTP 使用環(huán)境中,大多數(shù)都是要開(kāi)放給廠商聯(lián)機(jī)來(lái)使用的,給自己人使用的機(jī)會(huì)雖然也有, 不過(guò)使用者數(shù)量通常比較少一些。所以啰,鳥(niǎo)哥現(xiàn)在都是建議默認(rèn)讓實(shí)體用戶通通被 chroot, 而允許不必 chroot 的賬號(hào)才需要額外設(shè)定。這樣的好處是,新建的賬號(hào)如果忘記進(jìn)行 chroot,反正原本就是 chroot, 比較不用擔(dān)心如果該賬號(hào)是開(kāi)給廠商時(shí)該怎辦的問(wèn)題。

    現(xiàn)在假設(shè)我系統(tǒng)里面僅有 vbird 與 dmtsai 兩個(gè)賬號(hào)不要被 chroot,其他如 student, smb1... 等賬號(hào)通通預(yù)設(shè)是 chroot 的啦,包括未來(lái)新增賬號(hào)也全部預(yù)設(shè) chroot!那該如何設(shè)定?很簡(jiǎn)單,三個(gè)設(shè)定值加上一個(gè)額外配置文件就搞定了!步驟如下:

    # 1. 修改 vsftpd.conf 的參數(shù)值: [root@www ~]# vim /etc/vsftpd/vsftpd.conf # 增加是否設(shè)定針對(duì)某些使用者來(lái) chroot 的相關(guān)設(shè)定呦! chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list# 2. 建立不被 chroot 的使用者賬號(hào)列表,即使沒(méi)有任何賬號(hào),此檔案也是要存在! [root@www ~]# vim /etc/vsftpd/chroot_list vbird dmtsai[root@www ~]# /etc/init.d/vsftpd restart

    如此一來(lái),除了 dmtsai 與 vbird 之外的其他可用 FTP 的賬號(hào)者,通通會(huì)被 chroot 在他們的家目錄下, 這樣對(duì)系統(tǒng)比較好啦!接下來(lái),請(qǐng)你自己分別使用有與沒(méi)有被 chroot 的賬號(hào)來(lái)聯(lián)機(jī)測(cè)試看看。


    • 限制實(shí)體用戶的總下載流量 (帶寬)

    你可不希望帶寬被使用者上傳/下載所耗盡,而影響咱們服務(wù)器的其他正常服務(wù)吧?所以限制使用者的傳輸帶寬有時(shí)也是需要的! 假設(shè)『我要限制所有使用者的總傳輸帶寬最大可達(dá) 1 MBytes/秒 』時(shí),你可以這樣做即可:

    [root@www ~]# vim /etc/vsftpd/vsftpd.conf # 增加底下這一個(gè)參數(shù)即可: local_max_rate=1000000 <==記住喔,單位是 bytes/second[root@www ~]# /etc/init.d/vsftpd restart

    上述的單位是 Bytes/秒,所以你可以依據(jù)你自己的網(wǎng)絡(luò)環(huán)境來(lái)限制你的帶寬!這樣就給他限制好啰!有夠容易吧! 那怎么測(cè)試啊?很簡(jiǎn)單,用本機(jī)測(cè)試最準(zhǔn)!你可以用 dd 做出一個(gè) 10MB 的檔案放在 student 的家目錄下,然后用 root 下達(dá) ftp localhost,并輸入 student 的帳密,接下來(lái)給他 get 這個(gè)新的檔案,就能夠在最終知道下載的速度啦!


    • 限制最大同時(shí)上線人數(shù)與同一 IP 的 FTP 聯(lián)機(jī)數(shù)

    如果你有限制最大使用帶寬的話,那么你可能還需要限制最大在線人數(shù)才行!舉例來(lái)說(shuō),你希望最多只有 10 個(gè)人同時(shí)使用你的 FTP 的話,并且每個(gè) IP 來(lái)源最多只能建立一條 FTP 的聯(lián)機(jī)時(shí),那你可以這樣做:

    [root@www ~]# vim /etc/vsftpd/vsftpd.conf # 增加底下的這兩個(gè)參數(shù): max_clients=10 max_per_ip=1[root@www ~]# /etc/init.d/vsftpd restart

    這樣就搞定了!讓你的 FTP 不會(huì)人滿為患吶!


    • 建立嚴(yán)格的可使用 FTP 的賬號(hào)列表

    在預(yù)設(shè)的環(huán)境當(dāng)中,我們是將『不許使用 FTP 的賬號(hào)寫入 /etc/vsftpd/user_list 檔案』,所以沒(méi)有寫入 /etc/vsftpd/user_list 當(dāng)中的使用者就能夠使用 FTP 了!如此一來(lái),未來(lái)新增的使用者預(yù)設(shè)都能夠使用 FTP 的服務(wù)。 如果換個(gè)角度來(lái)思考,若我想只讓某些人可以使用 FTP 而已,亦即是新增的使用者預(yù)設(shè)不可使用 FTP 這個(gè)服務(wù)的話那么應(yīng)該如何作呢?你需要修改配置文件成為這樣:

    [root@www ~]# vim /etc/vsftpd/vsftpd.conf # 這幾個(gè)參數(shù)必須要修改成這樣: userlist_enable=YES userlist_deny=NO userlist_file=/etc/vsftpd/user_list[root@www ~]# /etc/init.d/vsftpd restart

    則此時(shí)『寫入 /etc/vsftpd/user_list 變成可以使用 FTP 的賬號(hào)』了! 所以未來(lái)新增的使用者如果要能夠使用 FTP 的話,就必須要寫入 /etc/vsftpd/user_list 才行! 使用這個(gè)機(jī)制請(qǐng)?zhí)貏e小心,否則容易搞混掉~

    透過(guò)這幾個(gè)簡(jiǎn)單的設(shè)定值,相信 vsftpd 已經(jīng)可以符合大部分合法 FTP 網(wǎng)站的需求啰! 更多詳細(xì)的用法則請(qǐng)參考 man 5 vsftpd.conf 吧!

    例題: 假設(shè)你因?yàn)槟承┨厥庑枨?#xff0c;所以必須要開(kāi)放 root 使用 FTP 傳輸檔案,那么你應(yīng)該要如何處理? 答: 由于系統(tǒng)賬號(hào)無(wú)法使用 FTP 是因?yàn)?PAM 模塊與 vsftpd 的內(nèi)建功能所致,亦即是 /etc/vsftpd/ftpusers 及 /etc/vsftpd/user_list 這兩個(gè)檔案的影響。所以你只要進(jìn)入這兩個(gè)檔案,并且將 root 那一行批注掉,那 root 就可以使用 vsftpd這個(gè) FTP 服務(wù)了。 不過(guò),不建議如此作喔!


    21.2.7 僅有匿名登錄的相關(guān)設(shè)定

    雖然你可以同時(shí)開(kāi)啟實(shí)體用戶與匿名用戶,不過(guò)建議你,服務(wù)器還是依據(jù)需求,針對(duì)單一種身份來(lái)設(shè)定吧! 底下我們將針對(duì)匿名用戶來(lái)設(shè)定,且不開(kāi)放實(shí)體用戶。一般來(lái)說(shuō),這種設(shè)定是給類似大專院校的 FTP 服務(wù)器來(lái)使用的哩!

    • 使用臺(tái)灣本地的時(shí)間,而非 GMT 時(shí)間;
    • 提供歡迎訊息,說(shuō)明可提供下載的信息;
    • 僅開(kāi)放 anonymous 的登入,且不需要輸入密碼;
    • 文件傳輸?shù)乃傧逓?1 Mbytes/second;
    • 數(shù)據(jù)連接的過(guò)程 (不是命令通道!) 只要超過(guò) 60 秒沒(méi)有響應(yīng),就強(qiáng)制 Client 斷線!
    • 只要 anonymous 超過(guò)十分鐘沒(méi)有動(dòng)作,就予以斷線;
    • 最大同時(shí)上線人數(shù)限制為 50 人,且同一 IP 來(lái)源最大聯(lián)機(jī)數(shù)量為 5 人;


    • 預(yù)設(shè)的 FTP 匿名者的根目錄所在: ftp 賬號(hào)的家目錄

    OK!那如何設(shè)定呢?首先我們必須要知道的是匿名用戶的目錄在哪里? 事實(shí)上匿名者默認(rèn)登入的根目錄是以 ftp 這個(gè)用戶的家目錄為主,所以你可以使用『 finger ftp 』來(lái)查閱。 咱們的 CentOS 默認(rèn)的匿名者根目錄在 /var/ftp/ 中。且匿名登錄者在使用 FTP 服務(wù)時(shí),他預(yù)設(shè)可以使用『 ftp 』 這個(gè)使用者身份的權(quán)限喔,只是被 chroot 到 /var/ftp/ 目錄中就是了。

    因?yàn)槟涿咧粫?huì)在 /var/ftp/ 當(dāng)中瀏覽,所以你必須將要提供給用戶下載的數(shù)據(jù)通通給放置到 /var/ftp/ 去。 假設(shè)你已經(jīng)放置了 linux 的相關(guān)目錄以及 gnu 的相關(guān)軟件到該目錄中了,那我們可以這樣做個(gè)假設(shè):

    [root@www ~]# mkdir /var/ftp/linux [root@www ~]# mkdir /var/ftp/gnu

    然后將 vsftpd.conf 的數(shù)據(jù)清空,重新這樣處理他吧:

  • 建立 vsftpd.conf 的設(shè)定數(shù)據(jù)
    [root@www ~]# vim /etc/vsftpd/vsftpd.conf # 將這個(gè)檔案的全部?jī)?nèi)容改成這樣: # 1. 與匿名者相關(guān)的信息: anonymous_enable=YES no_anon_password=YES <==匿名登錄時(shí),系統(tǒng)不會(huì)檢驗(yàn)密碼 (通常是email) anon_max_rate=1000000 <==最大帶寬使用為 1MB/s 左右 data_connection_timeout=60 <==數(shù)據(jù)流聯(lián)機(jī)的 timeout 為 60 秒 idle_session_timeout=600 <==若匿名者發(fā)呆超過(guò) 10 分鐘就斷線 max_clients=50 <==最大聯(lián)機(jī)與每個(gè) IP 的可用聯(lián)機(jī) max_per_ip=5# 2. 與實(shí)體用戶相關(guān)的信息,本案例中為關(guān)閉他的情況! local_enable=NO# 3. 與服務(wù)器環(huán)境有關(guān)的設(shè)定 use_localtime=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES pam_service_name=vsftpd tcp_wrappers=YES banner_file=/etc/vsftpd/anon_welcome.txt <==檔名有改喔![root@www ~]# /etc/init.d/vsftpd restart

  • 建立歡迎畫面與下載提示訊息

    各位親愛(ài)的觀眾朋友!要注意~在這個(gè)案例當(dāng)中,我們將歡迎訊息設(shè)定在 /etc/vsftpd/anon_welcome.txt 這個(gè)檔案中, 至于這個(gè)檔案的內(nèi)容你可以這樣寫 (這個(gè)檔案一定要存在!否則會(huì)造成客戶端無(wú)法聯(lián)機(jī)成功喔!):
    [root@www ~]# vim /etc/vsftpd/anon_welcome.txt 歡迎光臨本站所提供的 FTP 服務(wù)! 本站主要提供 Linux 操作系統(tǒng)相關(guān)檔案以及 GNU 自由軟件喔! 有問(wèn)題請(qǐng)與站長(zhǎng)聯(lián)絡(luò)!謝謝大家! 主要的目錄為:linux 提供 Linux 操作系統(tǒng)相關(guān)軟件 gnu 提供 GNU 的自由軟件 uploads 提供匿名的您上傳數(shù)據(jù)
    看到啰!主要寫的數(shù)據(jù)都是針對(duì)一些公告事項(xiàng)就是了!

  • 客戶端的測(cè)試:密碼與歡迎訊息是重點(diǎn)!

    同樣的,我們使用 ftp 這個(gè)軟件來(lái)給他測(cè)試一下吧!
    [root@www ~]# ftp localhost Connected to localhost (127.0.0.1). 220-歡迎光臨本站所提供的 FTP 服務(wù)! <==底下這幾行中文就是歡迎與提示訊息! 220-本站主要提供 Linux 操作系統(tǒng)相關(guān)檔案以及 GNU 自由軟件喔! 220-有問(wèn)題請(qǐng)與站長(zhǎng)聯(lián)絡(luò)!謝謝大家! 220-主要的目錄為: 220- 220-linux 提供 Linux 操作系統(tǒng)相關(guān)軟件 220-gnu 提供 GNU 的自由軟件 220-uploads 提供匿名的您上傳數(shù)據(jù) 220 Name (localhost:root): anonymous <==匿名賬號(hào)名稱是要背的! 230 Login successful. <==沒(méi)有輸入密碼即可登入呢! Remote system type is UNIX. Using binary mode to transfer files. ftp> dir 227 Entering Passive Mode (127,0,0,1,196,17). 150 Here comes the directory listing. drwxr-xr-x 2 0 0 4096 Aug 08 16:37 gnu -rw-r--r-- 1 0 0 17 Aug 08 14:18 index.html drwxr-xr-x 2 0 0 4096 Aug 08 16:37 linux drwxr-xr-x 2 0 0 4096 Jun 25 17:44 pub 226 Directory send OK. ftp> bye 221 Goodbye.
    看到否?這次可就不需要輸入任何密碼了,因?yàn)槭悄涿卿浡?#xff01;而且,如果你以其他的賬號(hào)來(lái)嘗試登入時(shí), 那么 vsftpd 會(huì)立刻響應(yīng)僅開(kāi)放匿名的訊息喔!(530 This FTP server is anonymous only.)


    • 讓匿名者可上傳/下載自己的資料 (權(quán)限開(kāi)放最大)

    在上列的數(shù)據(jù)當(dāng)中,實(shí)際上匿名用戶僅可進(jìn)行下載的動(dòng)作而已。如果你還想讓匿名者可以上傳檔案或者是建立目錄的話, 那你還需要額外增加一些設(shè)定才行:

    [root@www ~]# vim /etc/vsftpd/vsftpd.conf # 新增底下這幾行啊! write_enable=YES anon_other_write_enable=YES anon_mkdir_write_enable=YES anon_upload_enable=YES[root@www ~]# /etc/init.d/vsftpd restart

    如果你設(shè)定上面四項(xiàng)參數(shù),則會(huì)允許匿名者擁有完整的建立、刪除、修改檔案與目錄的權(quán)限。 不過(guò),實(shí)際要生效還需要 Linux 的文件系統(tǒng)權(quán)限正確才行!?我們知道匿名者取得的身份是 ftp ,所以如果想讓匿名者上傳數(shù)據(jù)到 /var/ftp/uploads/ 中,則需要這樣做:

    [root@www ~]# mkdir /var/ftp/uploads [root@www ~]# chown ftp /var/ftp/uploads

    然后你以匿名者身份登入后,就會(huì)發(fā)現(xiàn)匿名者的根目錄多了一個(gè) /upload 的目錄存在了,并且你可以在該目錄中上傳檔案/目錄喔! 如此一來(lái)系統(tǒng)的權(quán)限大開(kāi)!很要命喔!所以,請(qǐng)仔細(xì)的控制好你的上傳目錄才行!

    不過(guò),在實(shí)際測(cè)試當(dāng)中,卻發(fā)現(xiàn)還是沒(méi)辦法上傳呢!怎么回事啊?如果你有去看一下 /var/log/messages 的話,那就會(huì)發(fā)現(xiàn)啦! 又是 SELinux 這家伙呢!怎么辦?就透過(guò)『 sealert -l ... 』在 /var/log/messages 里面觀察到的指令丟進(jìn)去, 立刻就知道解決方案啦!解決方案就是放行 SELinux 的匿名 FTP 規(guī)則如下:

    [root@www ~]# setsebool -P allow_ftpd_anon_write=1 [root@www ~]# setsebool -P allow_ftpd_full_access=1

    然后你再測(cè)試一下用 anonymous 登入,到 /uploads 去上傳個(gè)檔案吧!就會(huì)知道能不能成功哩!


    • 讓匿名者僅具有上傳權(quán)限,不可下載匿名者上傳的東西

    一般來(lái)說(shuō),用戶上傳的數(shù)據(jù)在管理員尚未查閱過(guò)是否合乎版權(quán)等相關(guān)事宜前,是不應(yīng)該讓其他人下載的! 然而前一小節(jié)的設(shè)定當(dāng)中,用戶上傳的資料是可以被其他人所瀏覽與下載的!如此一來(lái)實(shí)在是很危險(xiǎn)!所以如果你要設(shè)定 /var/ftp/uploads/ 內(nèi)透過(guò)匿名者上傳的數(shù)據(jù)中,僅能上傳不能被下載時(shí),那么被上傳的數(shù)據(jù)的權(quán)限就得要修改一下才行! 請(qǐng)將前一小節(jié)所設(shè)定的四個(gè)參數(shù)簡(jiǎn)化成為:

    [root@www ~]# vim /etc/vsftpd/vsftpd.conf # 將這幾行給他改一改先!記得要拿掉 anon_other_write_enable=YES write_enable=YES anon_mkdir_write_enable=YES anon_upload_enable=YES chown_uploads=YES <==新增的設(shè)定值在此! chown_username=daemon[root@www ~]# /etc/init.d/vsftpd restart

    當(dāng)然啦,那個(gè) /var/ftp/uploads/ 還是需要可以被 ftp 這個(gè)使用者寫入才行!如此一來(lái)被上傳的檔案將會(huì)被修改檔案擁有者成為 daemon 這個(gè)使用者,而 ftp (匿名者取得的身份) 是無(wú)法讀取 daemon 的數(shù)據(jù)的,所以也就無(wú)法被下載啰! ^_^

    例題: 在上述的設(shè)定后,我嘗試以 anonymous 登入并且上傳一個(gè)大檔案到 /uploads/ 目錄下。由于網(wǎng)絡(luò)的問(wèn)題,這個(gè)檔案?jìng)鞯揭话刖蛿嗑€。 下在我重新上傳時(shí),卻告知這個(gè)檔案無(wú)法覆寫!該如何是好? 答: 為什么會(huì)無(wú)法覆寫呢?因?yàn)檫@個(gè)檔案在你脫機(jī)后,檔案的擁有者就被改為 daemon 了!因?yàn)檫@個(gè)檔案不屬于 ftp 這個(gè)用戶了, 因此我們無(wú)法進(jìn)行覆寫或刪除的動(dòng)作。此時(shí),你只能更改本地端檔案的檔名再次的上傳,重新從頭一直上傳啰!


    • 被動(dòng)式聯(lián)機(jī)埠口的限制

    FTP 的聯(lián)機(jī)分為主動(dòng)式與被動(dòng)式,主動(dòng)式聯(lián)機(jī)比較好處理,因?yàn)槎际峭高^(guò)服務(wù)器的 port 20 對(duì)外主動(dòng)聯(lián)機(jī), 所以防火墻的處理比較簡(jiǎn)單。被動(dòng)式聯(lián)機(jī)就比較麻煩~因?yàn)轭A(yù)設(shè) FTP 服務(wù)器會(huì)隨機(jī)取幾個(gè)沒(méi)有在使用當(dāng)中的埠口來(lái)建立被動(dòng)式聯(lián)機(jī),那防火墻的設(shè)定就麻煩啦!

    沒(méi)關(guān)系,我們可以透過(guò)指定幾個(gè)固定范圍內(nèi)的埠口來(lái)作為 FTP 的被動(dòng)式數(shù)據(jù)連接之用即可, 這樣我們就能夠預(yù)先知道 FTP 數(shù)據(jù)鏈路的埠口啦!舉例來(lái)說(shuō),我們假設(shè)被動(dòng)式連接的埠口為 65400 到 65410 這幾個(gè)埠口時(shí),可以這樣設(shè)定:

    [root@www ~]# vim /etc/vsftpd/vsftpd.conf # 增加底下這幾行即可啊! pasv_min_port=65400 pasv_max_port=65410[root@www ~]# /etc/init.d/vsftpd restart

    匿名用戶的設(shè)定大致上這樣就能符合你的需求啰!其他的設(shè)定就自己看著辦吧! ^_^


    21.2.8 防火墻設(shè)定

    防火墻設(shè)定有什么難的?將第九章里面的 script 拿出來(lái)修改即可啊!不過(guò),如同前言談到的,FTP 使用兩個(gè)埠口,加上常有隨機(jī)啟用的數(shù)據(jù)流埠口,以及被動(dòng)式聯(lián)機(jī)的服務(wù)器埠口等, 所以,你可能得要進(jìn)行:

    • 加入 iptables 的 ip_nat_ftp, ip_conntrack_ftp 兩個(gè)模塊
    • 開(kāi)放 port 21 給因特網(wǎng)使用
    • 開(kāi)放前一小節(jié)提到的 port 65400~65410 埠口給 Internet 聯(lián)機(jī)用

    要修改的地方不少,那就讓我們來(lái)一步一腳印吧!

    # 1. 加入模塊:雖然 iptables.rule 已加入模塊,不過(guò)系統(tǒng)檔案還是修改一下好了: [root@www ~]# vim /etc/sysconfig/iptables-config IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp" # 加入模塊即可!兩個(gè)模塊中間有空格鍵隔開(kāi)!然后重新啟動(dòng) iptables 服務(wù)啰![root@www ~]# /etc/init.d/iptables restart# 2. 修改 iptables.rule 的腳本如下: [root@www ~]# vim /usr/local/virus/iptables/iptables.rule iptables -A INPUT -p TCP -i $EXTIF --dport 21 --sport 1024:65534 -j ACCEPT # 找到上面這一行,并將前面的批注拿掉即可!并且新增底下這一行喔! iptables -A INPUT -p TCP -i $EXTIF --dport 65400:65410 --sport 1024:65534 -j ACCEPT[root@www ~]# /usr/local/virus/iptables/iptables.rule

    這樣就好了!同時(shí)兼顧主動(dòng)式與被動(dòng)式的聯(lián)機(jī)!并且加入所需要的 FTP 模塊啰!


    21.2.9 常見(jiàn)問(wèn)題與解決之道

    底下說(shuō)明幾個(gè)常見(jiàn)的問(wèn)題與解決之道吧!

    • 如果在 Client 端上面發(fā)現(xiàn)無(wú)法聯(lián)機(jī)成功,請(qǐng)檢查:
    • iptables 防火墻的規(guī)則當(dāng)中,是否開(kāi)放了 client 端的 port 21 登入?
    • 在 /etc/hosts.deny 當(dāng)中,是否將 client 的登入權(quán)限擋住了?
    • 在 /etc/xinetd.d/vsftpd 當(dāng)中,是否設(shè)定錯(cuò)誤,導(dǎo)致 client 的登入權(quán)限被取消了?

    • 如果 Client 已經(jīng)連上 vsftpd 服務(wù)器,但是卻顯示『 XXX file can't be opend 』的字樣,請(qǐng)檢查:
    • 最主要的原因還是在于在 vsftpd.conf 當(dāng)中設(shè)定了檢查某個(gè)檔案,但是你卻沒(méi)有將該檔案設(shè)定起來(lái), 所以,請(qǐng)檢查 vsftpd.conf 里面所有設(shè)定的檔案檔名,使用 touch 這個(gè)指令將該檔案建立起來(lái)即可!

    • 如果 Client 已經(jīng)連上 vsftpd 服務(wù)器,卻無(wú)法使用某個(gè)賬號(hào)登入,請(qǐng)檢查:
    • 在 vsftpd.conf 里面是否設(shè)定了使用 pam 模塊來(lái)檢驗(yàn)賬號(hào),以及利用 userlist_file 來(lái)管理賬號(hào)?
    • 請(qǐng)檢查 /etc/vsftpd/ftpusers 以及 /etc/vsftpd/user_list 檔案內(nèi)是否將該賬號(hào)寫入了?

    • 如果 Client 無(wú)法上傳檔案,該如何是好?
    • 最可能發(fā)生的原因就是在 vsftpd.conf 里面忘記加上這個(gè)設(shè)定『write_enable=YES』這個(gè)設(shè)定,請(qǐng)加入;
    • 是否所要上傳的目錄『權(quán)限』不對(duì),請(qǐng)以 chmod 或 chown 來(lái)修訂;
    • 是否 anonymous 的設(shè)定里面忘記加上了底下三個(gè)參數(shù):
      • anon_other_write_enable=YES
      • anon_mkdir_write_enable=YES
      • anon_upload_enable=YES
    • 是否因?yàn)樵O(shè)定了 email 抵擋機(jī)制,又將 email address 寫入該檔案中了!?請(qǐng)檢查!
    • 是否設(shè)定了不許 ASCII 格式傳送,但 Client 端卻以 ASCII 傳送呢?請(qǐng)?jiān)?client 端以 binary 格式來(lái)傳送檔案!
    • 檢查一下 /var/log/messages ,是否被 SELinux 所抵擋住了呢?

    上面是蠻常發(fā)現(xiàn)的錯(cuò)誤,如果還是無(wú)法解決你的問(wèn)題,請(qǐng)你務(wù)必分析一下這兩個(gè)檔案:/var/log/vsftpd.log 與 /var/log/messages ,里面有相當(dāng)多的重要資料,可以提供給你進(jìn)行除錯(cuò)喔!不過(guò) /var/log/vsftpd.log 卻預(yù)設(shè)不會(huì)出現(xiàn)! 只有 /var/log/xferlog 而已。如果你想要加入 /var/log/vsftpd.log 的支持,可以這樣做:

    [root@www ~]# vim /etc/vsftpd/vsftpd.conf dual_log_enable=YES vsftpd_log_file=/var/log/vsftpd.log # 加入這兩個(gè)設(shè)定值即可呦![root@www ~]# /etc/init.d/vsftpd restart

    這樣未來(lái)有新聯(lián)機(jī)或者是錯(cuò)誤時(shí),就會(huì)額外寫一份 /var/log/vsftpd.log 去喔!


    21.3 客戶端的圖形接口 FTP 聯(lián)機(jī)軟件

    客戶端的聯(lián)機(jī)軟件主要有文字接口的?ftp?及?lftp?這兩支指令,詳細(xì)的使用方式請(qǐng)參考第五章常用網(wǎng)絡(luò)指令的說(shuō)明。至于 Linux 底下的圖形接口軟件,可以參考 gftp 這支程序喔!圖形接口的啦!很簡(jiǎn)單啊!那 Windows 底下有沒(méi)有相對(duì)應(yīng)的 FTP 客戶端軟件?


    21.3.1 Filezilla

    上述的軟件都是自由軟件啊,那么 Windows 操作系統(tǒng)有沒(méi)有自由軟件啊?有的,你可以使用 filezilla 這個(gè)好東西!這個(gè)玩意兒的詳細(xì)說(shuō)明與下載點(diǎn)可以在底下的連結(jié)找到:

    • 說(shuō)明網(wǎng)站:http://filezilla.sourceforge.net/
    • 下載網(wǎng)站:http://sourceforge.net/project/showfiles.php?group_id=21558

    目前 (2011/06) 最新的穩(wěn)定版本是 3.5.x 版,所以底下鳥(niǎo)哥就以這個(gè)版本來(lái)跟大家說(shuō)明。為什么要選擇 Filezilla 呢?除了他是自由軟件之外,這家伙竟然可以連結(jié)到 SSH 的 sftp 呢!真是很不錯(cuò)的一個(gè)家伙啊!^_^!另外要注意的是,底下鳥(niǎo)哥是以 Windows 版本來(lái)說(shuō)明的,不要拿來(lái)在 X window 上面安裝喔!^_^ (請(qǐng)下載 Filezilla client 不是 server 喔!)

    因?yàn)檫@個(gè)程序是給 Windows 安裝用的,所以安裝的過(guò)程就是...(下一步)^n 就好了!并且這個(gè)程序支持多國(guó)語(yǔ)系, 所以你可以選擇繁體中文呢!實(shí)在是很棒!安裝完畢之后,請(qǐng)你執(zhí)行他,就會(huì)出現(xiàn)如下的畫面了:


    圖 21.3-1、Filezilla 的操作接口示意圖

    上圖的 第一、二到五區(qū)的內(nèi)容所代表的資料是:

  • 第一區(qū):代表 FTP 服務(wù)器的輸出信息,例如歡迎訊息等信息;
  • 第二區(qū):代表本機(jī)的文件系統(tǒng)目錄,與第三區(qū)有關(guān);
  • 第三區(qū):代表第二區(qū)所選擇的磁盤內(nèi)容為何;
  • 第四區(qū):代表遠(yuǎn)程 FTP 服務(wù)器的目錄與檔案;
  • 第五區(qū):代表傳輸時(shí)的隊(duì)列信息 (等待傳送的數(shù)據(jù))
  • 而另外圖中的 a, b, c 則代表的是:

  • 站臺(tái)管理員,你可以將一些常用的 FTP 服務(wù)器的 IP 與用戶信息記錄在此;
  • 更新,如果你的資料有更新,可使用這個(gè)按鈕來(lái)同步 filezilla 的屏幕顯示;
  • 主機(jī)地址、用戶、密碼與端口這四個(gè)玩意兒可以實(shí)時(shí)聯(lián)機(jī),不記錄信息。
  • 好,接下來(lái)我們連接到 FTP 服務(wù)器上面去,所以你可按下圖 21.3-1 的 a 部分,會(huì)出現(xiàn)如下畫面:


    圖 21.3-2、Filezilla 的 FTP 站臺(tái)管理員使用示意圖

    上圖的箭頭與相關(guān)的內(nèi)容是這樣的:

  • 先按下『新增站臺(tái)』的按鈕,然后在箭頭 2 的地方就會(huì)出現(xiàn)可輸入名稱的方框;
  • 在該方框當(dāng)中隨便填寫一個(gè)你容易記錄的名字,只要與真正的網(wǎng)站有點(diǎn)關(guān)連即可;
  • 接下來(lái)看到右邊有一般設(shè)定,在一般設(shè)定里面幾個(gè)項(xiàng)目很重要的:
    • 主機(jī):在這個(gè)方框中填寫主機(jī)的 IP,端口如果不是標(biāo)準(zhǔn)的 port 21 才填寫其他埠口。
    • 協(xié)定:主要有 (1)FTP 及 (2)SFTP (SSHD 所提供),我們這里選 FTP
    • 加密:是否有網(wǎng)絡(luò)加密,新的協(xié)議中,FTP 可以加上 TLS 的 FTPS 喔!預(yù)設(shè)為明碼
    • 登入型式:因?yàn)樾枰~號(hào)密碼,選擇『一般』即可,然后底下就是輸入使用者、賬號(hào)即可。
  • 基本上這樣設(shè)定完就能夠連上主機(jī)了,不過(guò),如果你還想要更詳細(xì)的規(guī)范數(shù)據(jù)連接的方式 (主動(dòng)式與被動(dòng)式) 以及其他數(shù)據(jù)時(shí), 可以按下的『傳輸設(shè)定』按鈕,就會(huì)出現(xiàn)如下畫面了:


    圖 21.3-3、Filezilla 站臺(tái)管理員內(nèi)的傳輸設(shè)定

    在這個(gè)畫面當(dāng)中你可以選擇是否使用被動(dòng)式傳輸機(jī)制,還可以調(diào)整最大聯(lián)機(jī)數(shù)呢!為什么要自我限制呢? 因?yàn)?Filezilla 會(huì)主動(dòng)的重復(fù)建立多條聯(lián)機(jī)來(lái)快速下載,但如果 vsftpd.conf 有限制 max_per_ip 的話, 某些下載會(huì)被拒絕的!因此,這個(gè)時(shí)候在此設(shè)定為 1 就顯的很重要~隨時(shí)只有一支聯(lián)機(jī)建立,就不會(huì)有重復(fù)登入的問(wèn)題! 最后請(qǐng)按下圖 21.3-2 畫面中的『聯(lián)機(jī)』吧!


    圖 21.3-4、Filezilla 聯(lián)機(jī)成功示意圖

    更多的用法就請(qǐng)你自行研究啰!


    21.3.2 透過(guò)瀏覽器取得 FTP 聯(lián)機(jī)

    我們?cè)?第二十章 WWW 服務(wù)器當(dāng)中曾經(jīng)談過(guò)瀏覽器所支持的協(xié)議,其中一個(gè)就是 ftp 這個(gè)協(xié)定啰!這個(gè)協(xié)議的處理方式可以在網(wǎng)址列的地方這樣輸入的:

    • ftp://username@your_ip

    要記得,如果你沒(méi)有輸入那個(gè) username@ 的字樣時(shí),系統(tǒng)默認(rèn)會(huì)以匿名登錄來(lái)處理這次的聯(lián)機(jī)。因此如果你想要使用實(shí)體用戶聯(lián)機(jī)時(shí), 就在在 IP 或主機(jī)名之前填寫你的賬號(hào)。舉例來(lái)說(shuō),鳥(niǎo)哥的 FTP 服務(wù)器 (192.168.100.254) 若有 dmtsai 這個(gè)使用者, 那我啟動(dòng)瀏覽器后,可以這樣做:

    • ftp://dmtsai@192.168.100.254

    然后在出現(xiàn)的對(duì)話窗口當(dāng)中輸入 dmtsai 的密碼,就能夠使用瀏覽器來(lái)管理我在 FTP 服務(wù)器內(nèi)的文件系統(tǒng)啰!是否很容易啊 甚至,你連密碼都想要寫上網(wǎng)址列,那就更厲害啦!

    • ftp://dmtsai:yourpassword@192.168.100.254

    21.4 讓 vsftpd 增加 SSL 的加密功能

    既然 http 都有 https 了,那么使用明碼傳輸?shù)?ftp 有沒(méi)有加密的 ftps 呢?嘿嘿!說(shuō)的好!有的啦~既然都有 openssl 這個(gè)加密函式庫(kù), 我們當(dāng)然能夠使用類似的機(jī)制來(lái)處理 FTP 啰!但前提之下是你的 vsftpd 有支持 SSL 函式庫(kù)才行!此外,我們也必須要建立 SSL 的憑證檔給 vsftpd 使用,這樣才能夠進(jìn)行加密嘛!了解乎!接下來(lái),就讓我們一步一步的進(jìn)行 ftps 的服務(wù)器建置吧!


    • 1. 檢查 vsftpd 有無(wú)支持 ssl 模塊:

    如果你的 vsftpd 當(dāng)初編譯的時(shí)候沒(méi)有支持 SSL 模塊,那么你就得只好自己重新編譯一個(gè) vsftpd 的軟件了!我們的 CentOS 有支持嗎? 趕緊來(lái)瞧瞧:

    [root@www ~]# ldd $(which vsftpd) | grep ssllibssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f0587879000)

    如果有出現(xiàn) libssl.so 的字樣,就是有支持!這樣才能夠繼續(xù)下一步呦!


    • 2. 建立專門給 vsftpd 使用的憑證數(shù)據(jù):

    CentOS 給我們一個(gè)建立憑證的地方,那就是 /etc/pki/tls/certs/ 這個(gè)目錄!詳細(xì)的說(shuō)明我們?cè)?20.5.2?里面談過(guò)咯,所以這里只介紹怎么做:

    [root@www ~]# cd /etc/pki/tls/certs [root@www certs]# make vsftpd.pem ----- ....(前面省略).... Country Name (2 letter code) [XX]:TW State or Province Name (full name) []:Taiwan Locality Name (eg, city) [Default City]:Tainan Organization Name (eg, company) [Default Company Ltd]:KSU Organizational Unit Name (eg, section) []:DIC Common Name (eg, your name or your server's hostname) []:www.centos.vbird Email Address []:root@www.centos.vbird[root@www certs]# cp -a vsftpd.pem /etc/vsftpd/ [root@www certs]# ll /etc/vsftpd/vsftpd.pem -rw-------. 1 root root 3116 2011-08-08 16:52 /etc/vsftpd/vsftpd.pem # 要注意一下權(quán)限喔!

    • 3. 修改 vsftpd.conf 的配置文件,假定有實(shí)體、匿名賬號(hào):

    在前面 21.2 里面大多是單純匿名或單純實(shí)體帳戶,這里我們將實(shí)體賬號(hào)透過(guò) SSL 聯(lián)機(jī),但匿名者使用明碼傳輸! 兩者同時(shí)提供給客戶端使用啦!FTP 的設(shè)定項(xiàng)目主要是這樣:

    • 提供實(shí)體賬號(hào)登入,實(shí)體賬號(hào)可上傳數(shù)據(jù),且 umask 為 002
    • 實(shí)體賬號(hào)默認(rèn)為 chroot 的情況,且全部實(shí)體賬號(hào)可用帶寬為 1Mbytes/second
    • 實(shí)體賬號(hào)的登入與數(shù)據(jù)傳輸均需透過(guò) SSL 加密功能傳送;
    • 提供匿名登錄,匿名者僅能下載,不能上傳,且使用明碼傳輸 (不透過(guò) SSL)

    此時(shí),整體的設(shè)定值會(huì)有點(diǎn)像這樣:

    [root@www ~]# vim /etc/vsftpd/vsftpd.conf # 實(shí)體賬號(hào)的一般設(shè)定項(xiàng)目: local_enable=YES write_enable=YES local_umask=002 chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list local_max_rate=10000000# 匿名者的一般設(shè)定: anonymous_enable=YES no_anon_password=YES anon_max_rate=1000000 data_connection_timeout=60 idle_session_timeout=600# 針對(duì) SSL 所加入的特別參數(shù)!每個(gè)項(xiàng)目都很重要! ssl_enable=YES <==啟動(dòng) SSL 的支持 allow_anon_ssl=NO <==但是不允許匿名者使用 SSL 喔! force_local_data_ssl=YES <==強(qiáng)制實(shí)體用戶數(shù)據(jù)傳輸加密 force_local_logins_ssl=YES <==同上,但連登入時(shí)的帳密也加密 ssl_tlsv1=YES <==支持 TLS 方式即可,底下不用啟動(dòng) ssl_sslv2=NO ssl_sslv3=NO rsa_cert_file=/etc/vsftpd/vsftpd.pem <==預(yù)設(shè) RSA 加密的憑證檔案所在# 一般服務(wù)器系統(tǒng)設(shè)定的項(xiàng)目: max_clients=50 max_per_ip=5 use_localtime=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES pam_service_name=vsftpd tcp_wrappers=YES banner_file=/etc/vsftpd/welcome.txt dual_log_enable=YES vsftpd_log_file=/var/log/vsftpd.log pasv_min_port=65400 pasv_max_port=65410[root@www ~]# /etc/init.d/vsftpd restart

    • 4. 聯(lián)機(jī)測(cè)試看看!使用 Filezilla 聯(lián)機(jī)測(cè)試:

    接下來(lái)我們利用 filezilla 來(lái)說(shuō)明一下,如何透過(guò) SSL/TLS 功能來(lái)進(jìn)行聯(lián)機(jī)加密。很簡(jiǎn)單,只要在站臺(tái)管理員的地方選擇:


    圖 21.4-1、透過(guò) Filezilla 聯(lián)機(jī)到 SSL/TLS 支持的 FTP 方式

    如上圖所示,重點(diǎn)在箭頭所指的地方,需要透過(guò) TLS 的加密方式才行!然后,鳥(niǎo)哥嘗試使用 student 這個(gè)一般賬號(hào)登入系統(tǒng), 聯(lián)機(jī)的時(shí)候,應(yīng)該會(huì)出現(xiàn)如下的圖示才對(duì):


    圖 21.4-2、透過(guò) Filezilla 是否接受憑證呢?

    如果一切都沒(méi)有問(wèn)題,那么你可以點(diǎn)選上圖那個(gè)『總是信任』的項(xiàng)目,如此一來(lái),未來(lái)聯(lián)機(jī)到這個(gè)地方就不會(huì)再次要你確認(rèn)憑證啦! 很簡(jiǎn)單的解決了 FTP 聯(lián)機(jī)加密的問(wèn)題啰!^_^

    例題: 想一想,既然有了 SFTP 可以進(jìn)行加密的 FTP 傳輸,那為何需要 ftps 呢? 答: 因?yàn)榧热灰_(kāi)放 SFTP 的話,就得要同時(shí)放行 sshd 亦即是 ssh 的聯(lián)機(jī),如此一來(lái),你的 port 22 很可能會(huì)常常被偵測(cè)~若是 openssl, openssh 出問(wèn)題,恐怕你的系統(tǒng)就會(huì)被綁架。如果你的 FTP 真的有必要存在,那么透過(guò) ftps 以及利用 vsftpd 這個(gè)較為安全的服務(wù)器軟件來(lái)架設(shè), 理論上,是要比 sftp 來(lái)的安全些~至少對(duì) Internet 放行 ftps 還不會(huì)覺(jué)得很可怕...


    21.5 重點(diǎn)回顧
    • FTP 是文件傳輸協(xié)議 (File Transfer Protocol) 的簡(jiǎn)寫,主要的功能是進(jìn)行服務(wù)器與客戶端的檔案管理、傳輸?shù)仁马?xiàng);
    • FTP 的服務(wù)器軟件非常多,例如 Wu FTP, Proftpd, vsftpd 等等,各種 FTP 服務(wù)器軟件的發(fā)展理念并不相同, 所以選擇時(shí)請(qǐng)依照你的需求來(lái)決定所需要的軟件;
    • FTP 使用的是明碼傳輸,而過(guò)去一些 FTP 服務(wù)器軟件也曾被發(fā)現(xiàn)安全漏洞,因此設(shè)定前請(qǐng)確定該軟件已是最新版本,避免安全議題的衍生;
    • 由于 FTP 是明碼傳輸,其實(shí)可以使用 SSH 提供的 sftp 來(lái)取代 FTP ;
    • 大多數(shù)的 FTP 服務(wù)器軟件都提供 chroot 的功能,將實(shí)體用戶限制在他的家目錄內(nèi);
    • FTP 這個(gè) daemon 所開(kāi)啟的正規(guī)埠口為 20 與 21 ,其中 21 為命令通道, 20 為主動(dòng)聯(lián)機(jī)的數(shù)據(jù)傳輸信道;
    • FTP 的數(shù)據(jù)傳輸方式主要分為主動(dòng)與被動(dòng)(Passive, PASV),如果是主動(dòng)的話,則 ftp-data 在服務(wù)器端主動(dòng)以 port 20 連接到客戶端,否則需開(kāi)放被動(dòng)式監(jiān)聽(tīng)的埠口等待客戶端來(lái)連接;
    • 在 NAT 主機(jī)內(nèi)的客戶端 FTP 軟件聯(lián)機(jī)時(shí)可能發(fā)生困擾,這可以透過(guò) iptables 的 nat 模塊或利用被動(dòng)式聯(lián)機(jī)來(lái)克服;
    • 一般來(lái)說(shuō), FTP 上面共有三個(gè)群組,分別是實(shí)體用戶、訪客與匿名登錄者(real, guest, anonymous);
    • 可以藉由修改 /etc/passwd 里面的 Shell 字段,來(lái)讓使用者僅能使用 FTP 而無(wú)法登入主機(jī);
    • FTP 的指令、與用戶活動(dòng)所造成的登錄檔是放置在 /var/log/xferlog 里面;
    • vsftpd 為專注在安全議題上而發(fā)展的一套 FTP 服務(wù)器軟件,他的配置文件在 /etc/vsftpd/vsftpd.conf

    21.6 本章習(xí)題
    • FTP 在建立聯(lián)機(jī)以及數(shù)據(jù)傳輸時(shí),會(huì)建立哪些聯(lián)機(jī)? 需建立兩種聯(lián)機(jī),分別是命令信道與數(shù)據(jù)傳輸信道。在主動(dòng)式聯(lián)機(jī)上為 port 21(ftp) 與 port 20(ftp-data)。
    • FTP 主動(dòng)式與被動(dòng)式聯(lián)機(jī)有何不同? 主動(dòng)式聯(lián)機(jī)的時(shí)候,命令聯(lián)機(jī)是由 client 端主動(dòng)連接到服務(wù)器端,但是 ftp-data 則是由服務(wù)器端主動(dòng)的聯(lián)機(jī)到 client 端。至于被動(dòng)式聯(lián)機(jī)的時(shí)候,則不論 command 還是 ftp-data 的聯(lián)機(jī),服務(wù)器端都是監(jiān)聽(tīng)客戶端的要求的!
    • 有哪些動(dòng)作可以讓你的 FTP 主機(jī)更為安全 (secure) ?
      • 隨時(shí)更新服務(wù)器軟件到最新版本;
      • 讓 guest 與 anonymous 的家目錄限制在固定的目錄中(chroot 或是 restricted);
      • 拒絕 root 的登入或者其他系統(tǒng)賬號(hào)的登入;
      • 拒絕大部分的 upload 行為!
    • 我們知道 ftp 會(huì)啟用兩個(gè) ports ,請(qǐng)問(wèn)這兩個(gè) port 在哪里規(guī)范的 (以 vsftpd 為例)?而且,一般正規(guī)的 port 是幾號(hào)? 若為 stand alone 時(shí),都是由 vsftpd.conf 規(guī)范,命令通道為 listen_port=21 規(guī)范,數(shù)據(jù)連接為 connect_from_port_20=YES 及pasv_max_port=0, pasv_max_port=0 所規(guī)范。
      若是 super daemon 所管理時(shí),命令信道則由 /etc/services 所規(guī)范了。
    • 那幾個(gè)檔案可以用來(lái)抵擋類似 root 這種系統(tǒng)賬號(hào)的登入 FTP? /etc/vsftpd/ftpusers
      /etc/vsftpd/user_list
    • 在 FTP 的 server 與 client 端進(jìn)行數(shù)據(jù)傳輸時(shí),有哪兩種模式?為何這兩種模式影響數(shù)據(jù)的傳輸很重要? 數(shù)據(jù)的傳輸有 ASCII 與 Binary 兩種方式,在進(jìn)行 ascii 傳送方式時(shí),被傳送的檔案將會(huì)以文本模式來(lái)進(jìn)行傳送的行為, 因此,檔案的屬性會(huì)被修改過(guò),可能造成執(zhí)行檔最后卻無(wú)法執(zhí)行等的問(wèn)題!一般來(lái)說(shuō),ASCII 通常僅用在文本文件與一些原始碼檔案的傳送。
    • 我的主機(jī)明明時(shí)區(qū)設(shè)定沒(méi)有問(wèn)題,但為何登入 vsftpd 這個(gè) FTP 服務(wù)時(shí),時(shí)間就是少八小時(shí)?該如何解決? 肯定是時(shí)區(qū)方面出了問(wèn)題,應(yīng)該就是 vsftpd.conf 里面少了『 use_localtime=YES 』這個(gè)參數(shù)了。

    21.7 參考數(shù)據(jù)與延伸閱讀
    • vsftpd 官方網(wǎng)站:http://vsftpd.beasts.org/
    • man 5 vsftpd.conf
    • Filezilla 官方網(wǎng)站:http://filezilla.sourceforge.net/
    • vsftpd + ssl 功能:http://wiki.vpslink.com/Configuring_vsftpd_for_secure_connections_%28TLS/SSL/SFTP%29
    • http://beginlinux.com/blog/2009/01/secure-ftp-with-ssl-on-centos/
    from:?http://vbird.dic.ksu.edu.tw/linux_server/0410vsftpd.php

    總結(jié)

    以上是生活随笔為你收集整理的鸟哥的Linux私房菜(服务器)- 第二十一章、文件服务器之三: FTP 服务器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。