当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : vsftpd 的详细配置方法(转)(版主请给加精)
帖子发表于 : 2007-07-06 12:41 
头像

注册: 2006-09-06 20:41
帖子: 37
地址: 南京理工
送出感谢: 0 次
接收感谢: 0 次
原文:http://linux.vbird.org/

本章的行前準備工作
架設 FTP 是個很難的任務,因為 FTP 服務同時啟用兩個連線通道,分別是命令通道與資料流通道, 這兩條通道的連線建立方式不太一樣,結果就造成了防火牆設定方面的困擾。 所以在學習 FTP 之前,請先確認您已經具有網路基礎概念,而且對防火牆也需要有一定程度的概念了喔!

* 必須要熟悉網路基礎,尤其是網路連線的建立是雙向的這個概念;
* 必須要瞭解防火牆的機制,尤其當防火牆架設在路由器上的網路架構時。
* 必須要瞭解 stand alone 與 super daemon 的啟動方式。

大標題的圖示FTP 的資料連結原理
FTP 是相當古老的傳輸協定之一,他最主要的功能是在伺服器與用戶端之間進行檔案的傳輸。 FTP 其實是以 TCP 封包的模式進行伺服器與用戶端電腦之間的連線,當連線建立後,使用者可以在用戶端端連上 FTP 伺服器來進行檔案的下載與上傳,此外,也可以直接管理用戶在 FTP 伺服器上面的檔案呢,相當的方便! 而這個古老的協定是使用明碼傳輸,且過去有相當多的安全危機歷史。為了更安全的使用 FTP 協定, 我們主要介紹較為安全但功能較少的 vsftpd 這個軟體吶。

小標題的圖示FTP 功能簡介
FTP 伺服器的功能除了單純的進行檔案的傳輸與管理之外,依據伺服器軟體的設定架構, 他還可以提供幾個主要的功能,底下我們約略的來談一談:

# 不同等級的使用者身份:
FTP 伺服器在預設的情況下,依據使用者登入的情況而分為三種不同的身份,分別是 (1)實體帳號,real user;(2)訪客, guest;(3)匿名登入者, anonymous 這三種。這三種身份的使用者在系統上面的使用權限差異很大喔! 例如實體用戶取得系統的權限比較完整,所以可以進行比較多的動作;至於匿名登入者, 大概我們就僅提供他下載一下資源而已,並不許匿名者使用太多主機的資源啊! 當然,這三種人物能夠使用的『線上指令』自然也就不相同囉! ^_^

# 命令記錄與登錄檔記錄:
FTP 可以利用系統的 syslogd 這個 daemon 來進行資料的紀錄, 而記錄的資料包括了使用者曾經下達過的命令與使用者傳輸資料(傳輸時間、檔案大小等等)的紀錄呢! 所以你可以很輕鬆的在 /var/log/ 裡面找到各項登錄資訊喔!

# 限制或解除使用者家目錄所在(change root, 簡稱 chroot):
為了避免使用者在您的 Linux 系統當中隨意逛大街 (意指離開使用者自己的家目錄而進入到 Linux 系統的其他目錄去), 所以將使用者的工作範圍『侷限』在使用者的家目錄底下,嗯!實在是個不錯的好主意!FTP 可以限制使用者僅能在自己的家目錄當中活動喔!如此一來,由於使用者無法離開自己的家目錄,而且登入 FTP 後,顯示的『根目錄』就是自己家目錄的內容,這種環境稱之為 change root ,簡稱 chroot ,改變根目錄的意思啦!

這有什麼好處呢?當一個惡意的使用者以 FTP 登入您的系統當中,如果沒有 chroot 的環境下,他可以到 /etc, /usr/local, /home 等其他重要目錄底下去察看檔案資料,尤其是很重要的 /etc/ 底下的設定檔,如 /etc/passwd 等等。如果您沒有做好一些檔案權限的管理與保護,那他就有辦法取得系統的某些重要資訊, 用來『入侵』您的系統呢!所以在 chroot 的環境下,當然就比較安全一些咯!
小標題的圖示FTP 的運作流程與使用到的埠口
FTP 的傳輸使用的是較為可靠的 TCP 封包協定,在前幾章的網路基礎當中我們談過, TCP 這種封包格式在建立連線前會先進行三向交握的。不過 FTP 伺服器是比較麻煩一些,因為 FTP 伺服器使用了兩個連線,分別是命令通道與資料流通道 (ftp-data) 。這兩個連線都需要經過三向交握, 因為是 TCP 封包嘛!那麼這兩個連線通道的關係是如何呢?底下我們先以 FTP 預設的主動式 (active) 連線來作個簡略的說明囉:

FTP 伺服器的主動式連線示意圖
圖一、FTP 伺服器的主動式連線示意圖

簡單的連線就如上圖所示,至於連線的步驟是這樣的:

1. 建立命令通道的連線
如上圖一所示,用戶端會隨機取一個大於 1024 以上的埠口 (port AA) 來與 FTP 伺服器端的 port 21 達成連線, 這個過程當然需要三向交握了!達成連線後用戶端便可以透過這個連線來對 FTP 伺服器下達指令, 包括查詢檔名、下載、上傳等等指令都是利用這個通道來下達的;

2. 通知 FTP 伺服器端使用 active 且告知連接的埠號
FTP 伺服器的 21 埠號主要用在命令的下達,但是當牽涉到資料流時,就不是使用這個連線了。 用戶端在需要資料的情況下,會告知伺服器端要用什麼方式來連線,如果是主動式 (active) 連線時, 用戶端會先隨機啟用一個埠口 (圖一當中的 port BB) ,且透過命令通道告知 FTP 伺服器這兩個資訊,並等待 FTP 伺服器的連線;

3. FTP 伺服器『主動』向用戶端連線
FTP 伺服器由命令通道瞭解用戶端的需求後,會主動的由 20 這個埠號向用戶端的 port BB 連線, 這個連線當然也會經過三向交握啦!此時 FTP 的用戶端與伺服器端共會建立兩條連線,分別用在命令的下達與資料的傳遞。 而預設 FTP 伺服器端使用的主動連線埠號就是 port 20 囉!

如此一來則成功的建立起『命令』與『資料傳輸』兩個通道!不過,要注意的是, 『資料傳輸通道』是在有資料傳輸的行為時才會建立的通道喔!並不是一開始連接到 FTP 伺服器就立刻建立的通道呢!留意一下囉!

# 使用到的埠號
利用上述的說明來整理一下 FTP 會使用到的埠號主要有:

* 命令通道的 ftp (預設為 port 21) 與
* 資料傳輸的 ftp-data (預設為port 20)。

再強調一次,這兩個埠口的工作是不一樣的,而且,重要的是兩者的連線方向是不一樣的! 首先, port 21 主要接受來自用戶端的主動連線,至於 port 20 則為 FTP 伺服器主動連線至用戶端呢! 這樣的情況在伺服器與用戶端兩者同時為公共 IP (Public IP) 的網際網路上面通常沒有太大的問題,不過, 萬一你的用戶端端是在防火牆後端,或者是 NAT 主機後端呢?會有什麼問題發生呢?底下我們來談一談這個嚴重的問題!

# 在 FTP 伺服器與用戶端之間具有防火牆的連線問題:
還記得我們的防火牆章節吧?一般來說,很多的區域網路 (LAN) 都會使用防火牆 (iptables) 的 NAT 功能,那麼在 NAT 主機後端的 FTP 用戶如何連接到 FTP 伺服器呢? 我們可以簡單的以下圖來說明:

若 FTP 用戶端與伺服器端連線中間具有防火牆的連線狀態
圖二、若 FTP 用戶端與伺服器端連線中間具有防火牆的連線狀態

1. 命令通道的建立:
因為 NAT 主機會主動的記錄由內部送往外部的連線資訊,而由於命令通道的建立是由用戶端向伺服器端連線的, 因此這一條連線可以順利的建立起來的;

2. 資料通道建立時的通知:
同樣的,用戶端主機會先啟用 port BB ,並透過命令通道告知 FTP 伺服器,且等待主機端的主動連線;

3. 主機的主動連線問題:
但是由於透過 NAT 主機的轉換後,FTP 伺服器只能得知 NAT 主機的 IP 而不是用戶端的 IP , 因此 FTP 伺服器會以 port 20 主動的向 NAT 主機的 port BB 發送主動連線的要求。 但你的 NAT 主機並沒有啟動 port BB 來監聽 FTP 伺服器的連線啊!

瞭解問題的所在了嗎?在 FTP 的主動式連線當中,NAT 主機將會被視為用戶端,但 NAT 主機其實並非用戶端啊, 這就造成問題了。如果你曾經在 IP 分享器後面連接某些 FTP 伺服器時,可能偶爾會發現明明就連接上 FTP 伺服器了 (命令通道已建立),但是就是無法取得檔案名稱的列表,而是在超過一段時間後顯示『 Can't build data connection: Connection refused,無法進行資料傳輸』之類的訊息, 那肯定就是這個原因所造成的困擾了。

那有沒有辦法可以克服這個問題呢?難道真的在 Linux NAT 主機後面就一定無法使用 FTP 嗎?當然不是! 目前有兩個簡易的方法可以克服這個問題:

* 使用 iptables 所提供的 FTP 偵測模組:
其實 iptables 早就提供了許多好用的模組了,這個 FTP 當然不會被錯過! 你可以使用 modprobe 這個指令來載入 ip_conntrack_ftp 及 ip_nat_ftp 等模組,這幾個模組會主動的分析『目標是 port 21 的連線』資訊, 所以可以得到 port BB 的資料,此時若接受到 FTP 伺服器的主動連線,就能夠將該封包導向正確的後端主機了! ^_^

不過,如果你連結的目標 FTP 伺服器他的命令通道預設埠號並非標準的 21 埠號時 (例如某些地下 FTP 伺服器), 那麼這兩個模組就無法順利解析出來了,這樣說,理解嗎?

* 用戶端選擇被動式 (Passive) 連線模式:
除了主動式連線之外,FTP 還提供一種稱為被動式連線的模式,什麼是被動式呢? 既然主動式是由伺服器向用戶端連線,反過來講,被動式就是由用戶端向伺服器端發起連線的囉! 既然是由用戶端發起連線的,那自然就不需要考慮來自 port 20 的連線啦!關於被動式連線模式將在下一小節介紹喔!

小標題的圖示用戶端選擇被動式連線模式
那麼什麼是被動式連線呢?我們可以使用底下的圖示來作個簡略的介紹喔:

被動式連線的方向
圖三、被動式連線的方向

1. 建立命令通道:
同樣的需要建立命令通道,透過三向交握就可以建立起這個通道了。

2. 發出 PASV 的連線要求:
當有使用資料通道的指令時,用戶端可透過命令通道發出 PASV 的被動式連線要求 (Passive 的縮寫), 並等待伺服器的回應;

3. FTP 伺服器啟動資料埠口,並通知用戶端連線:
如果你的 FTP 伺服器是能夠處理被動式連線的,此時 FTP 伺服器會先啟動一個埠口在監聽。 這個埠口號碼可能是隨機的,也可以自訂某一範圍的埠口,端看你的 FTP 伺服器軟體而定。 然後你的 FTP 伺服器會透過命令通道告知用戶端該已經啟動的埠口 (圖中的 port PASV), 並等待用戶端的連線。

4. 用戶端隨機取用大於 1024 的埠口進行連接:
然後你的用戶端會隨機取用一個大於 1024 的埠號來對主機的 port PASV 連線。 如果一切都順利的話,那麼你的 FTP 資料就可以透過 port BB 及 port PASV 來傳送了。

發現上面的不同點了嗎?被動式 FTP 資料通道的連線方向是由用戶端向主機端連線的喔! 如此一來,在 NAT 主機內部的用戶端主機就可以順利的連接上 FTP Server 了!但是,萬一 FTP 主機也是在 NAT 後端那怎麼辦.....呵呵!那可就糗了吧~ @_@這裡就牽涉到更深入的 DMZ 技巧了,我們這裡暫不介紹這些深入的技巧,先理解一下這些特殊的連線方向, 這將有助於您未來伺服器架設時候的考慮因素喔!

此外,不曉得您有無發現,透過 PASV 模式,伺服器在沒有特別設定的情況下,會隨機選取大於 1024 的埠口來提供用戶端連接之用。那麼萬一主機啟用的埠口被搞鬼怎麼辦?而且, 如此一來也很難追蹤來自入侵者攻擊的登錄資訊啊!所以,這個時候我們可以透過 passive ports 的功能來『限定』主機啟用的 port number 喔!

小標題的圖示FTP 的安全性問題與替代方案
事實上,FTP 是一個不太安全的傳輸協定呢!怎麼說呢?因為 FTP 與 Telnet 相似的, 他是以『明碼』的狀態在網際網路上面傳輸的,所以當然就容易被有心人士將你的資料給他抓下來, 並且加以利用啦!因此,他當然不是很安全啊!所以,在網路上大家才會常常告誡說,不要隨意架設 FTP 網站啊!否則主機怎麼被破解的都不曉得哩!此外,由於 FTP 軟體常常會有漏洞的問題,因此也要常常更新套件喔!

另外,其實拜 SSH 所賜,目前我們已經有較為安全的 FTP 了,那就是 ssh 提供的 sftp 這個 server 啊!這個 sftp-server 最大的優點就是:『他是經過加密的資料!』所以在網際網路上面流竄的時候, 嘿嘿!畢竟是比較安全一些啦!所以建議您,除非必要,否則的話使用 SSH 提供的 sftp-server 功能即可~

然而這個功能對於一些習慣了圖形介面,或者是有中文檔名的使用者來說,實在是不怎麼方便, 雖說目前有個圖形介面的 filezilla 用戶端軟體,不過很多時候還是會發生一些莫名的問題說! 所以,有的時候 FTP 網站還是有其存在的需要的。如果真的要架設 FTP 網站,那麼還是得需要注意幾個事項喔:

1. 隨時更新到最新版本的 FTP 軟體,並隨時注意漏洞訊息;
2. 善用 iptables 來規定可以使用 FTP 的網域;
3. 善用 TCP_Wrappers 來規範可以登入的網域;
4. 善用 FTP 軟體的設定來限制使用您 FTP 主機的使用者的不同權限啊;
5. 使用 Super daemon 來進階管理您的 FTP 主機;
6. 隨時注意使用者的家目錄、以及匿名使用者登入的目錄的『檔案權限』;
7. 若不對外公開的話,或許也可以修改 FTP 的 port 。

無論如何,在網路上聽過太多人都是由於開放 FTP 這個伺服器而導致整個主機被入侵的事件,所以, 這裡真的要給他一直不斷的強調,要注意安全啊!

小標題的圖示開放什麼身份的使用者登入
既然 FTP 是以明碼傳輸,並且某些早期的 FTP 伺服器軟體也有不少的安全性漏洞,那又為何需要架設 FTP 伺服器啊? 沒辦法啊,總是有人有需要這個玩意兒的,譬如說各大專院校不就有提供 FTP 網站的服務嗎? 這樣可以讓校內的同學共同分享校內的網路資源嘛!不過,由於 FTP 登入者的身份可以分為三種, 你到底要開放哪一種身份登入呢?這個時候你可以這樣簡單的思考一下囉:

# 開放實體用戶的情況 (Real user):
很多的 FTP 伺服器預設就已經允許實體用戶的登入了。不過,需要瞭解的是,以實體用戶做為 FTP 登入者身份時, 系統預設並沒有針對實體用戶來進行『限制』的,所以他可以針對整個檔案系統進行任何他所具有權限的工作。 因此,如果您的 FTP 使用者沒能好好的保護自己的密碼而導致被入侵,那麼你的整個 Linux 系統將很有可能被毀滅啊! 開放實體用戶時的建議如下:

* 由於實體用戶本來就可以透過網路連接到主機來進行工作 (例如 SSH),因此實在沒有需要特別的開放 FTP 的服務啊! 因為例如 sftp 本來就能達到傳輸檔案的功能囉!

* 如果確定要讓實體用戶利用 FTP 伺服器的話,那麼你可能需要讓某些系統帳號無法登入才行,例如 bin, apache 等等。 最簡單常用的作法是透過 PAM 模組來處理,譬如 vsftpd 這個軟體預設可以透過 /etc/vsftpd.ftpusers 這個檔案來設定不想讓他具有登入權限的帳號。

# 訪客身份 (Guest)
通常會建立 guest 身份的案例當中,多半是由於主機提供了類似『個人 Web 首頁』的功能給一般身份使用者, 那麼這些使用者總是需要管理自己的網頁空間吧?這個時候將使用者的身份壓縮成為 guest ,並且將他的可用目錄設定好,即可提供使用者一個方便的使用環境了!且不需要提供他 real user 的權限喔! 常見的建議如下:

* 僅提供需要登入的帳號即可,不需要提供系統上面所有人均可登入的環境啊!

* 當然,我們在主機的設定當中,需要針對不同的訪客給他們不一樣的『家目錄』, 而這個家目錄與使用者的權限設定需要相符合喔!例如要提供 dmtsai 這個人管理他的網頁空間,而他的網頁空間放置在 /home/dmtsai/www 底下,那我就將 dmtsai 在 FTP 提供的目錄僅有 /home/dmtsai/www 而已,比較安全啦!而且也方便使用者啊!

* 針對這樣的身份者,需要設定較多的限制,包括:上下傳檔案數目與硬碟容量的限制、 連線登入的時間限制、許可使用的指令要減少很多很多,例如 chmod 就不要允許他使用等等!

# 匿名登入使用者 (anonymous)
雖然提供匿名登入給網際網路的使用者進入實在不是個好主意,因為每個人都可以去下載你的資料, 萬一頻寬被吃光光怎麼辦?但如同前面講過的,學校單位需要分享全校同學一些軟體資源時, FTP 伺服器也是一個很不錯的解決方案啊!您說是吧。如果要開放匿名使用者的話,要注意:

* 無論如何,提供匿名登入都是一件相當危險的事情,因為只要您一不小心, 將重要的資料放置到匿名者可以讀取的目錄中時,那麼就很有可能會洩密!與其戰戰兢兢,不如就不要設定啊~

* 果真要開放匿名登入時,很多限制都要進行的,這包括:(1)允許的工作指令要減低很多, 幾乎就不許匿名者使用指令啦、(2)限制檔案傳輸的數量,盡量不要允許『上傳』資料的設定、 (3)限制匿名者同時登入的最大連線數量,可以控制盜連喔!

一般來說,如果你是要放置一些公開的、沒有版權糾紛的資料在網路上供人下載的話, 那麼一個僅提供匿名登入的 FTP 伺服器,並且對整個網際網路開放是 OK 的啦! 不過,如果你預計要提供的的軟體或資料是具有版權的,但是該版權允許你在貴單位內傳輸的情況下, 那麼架設一個『僅針對內部開放的匿名 FTP 伺服器 (利用防火牆處理) 』也是 OK 的啦!

如果你還想要讓使用者反饋的話,那是否要架設一個匿名者可上傳的區域呢?鳥哥對這件事情的看法是.... 『萬萬不可』啊!如果要讓使用者反饋的話,除非該使用者是你信任的,否則不要允許對方上傳! 所以此時一個檔案系統權限管理嚴格的 FTP 伺服器,並提供實體用戶的登入就有點需求啦! 總之,要依照您的需求來思考是否有需要喔!
大標題的圖示vsftpd 伺服器基礎設定
終於要來聊一聊這個簡單的 vsftpd 囉!vsftpd 的全名是『Very Secure FTP Daemon 』的意思, 換句話說,vsftpd 最初發展的理念就是在於建構一個以安全為重的 FTP 伺服器呢!我們先來聊一聊為什麼 vsftpd 號稱『非常安全』呢?然後再來談設定吧!

小標題的圖示為何使用 vsftpd
為了建構一個安全為主的 FTP 伺服器, vsftpd 針對作業系統的『程序的權限 (privilege)』概念來設計, 如果你讀過基礎篇的程序與資源管理章節的話, 你應該會曉得系統上面所執行的程式都會引發一個程序,我們稱他為 PID (Process ID), 這個 PID 在系統上面能進行的任務與他擁有的權限有關。也就是說, PID 擁有的權限等級越高, 他能夠進行的任務就越多。舉例來說,使用 root 身份所觸發的 PID 通常擁有可以進行任何工作的權限等級。

不過,萬一觸發這個 PID 的程式 (program) 有漏洞而導致被網路怪客 (cracker) 所攻擊而取得此 PID 使用權時, 那麼網路怪客將會取得這個 PID 擁有的權限吶!所以,近來發展的套件都會盡量的將服務取得的 PID 權限降低,使得該服務即使不小心被入侵了,入侵者也無法得到有效的系統管理權限,這樣會讓我們的系統較為安全的啦。 vsftpd 就是基於這種想法而設計的。

除了 PID 方面的權限之外, vsftpd 也支援 chroot 這個函式的功能,chroot 顧名思義就是『 change root directory 』的意思,那個 root 指的是『根目錄』而非系統管理員。 他可以將某個特定的目錄變成根目錄,所以與該目錄沒有關係的其他目錄就不會被誤用了。

舉例來說,如果你以匿名身份登入我們的 ftp 服務的話,通常你會被限定在 /var/ftp 目錄下工作, 而你看到的根目錄其實就只是 /var/ftp ,至於系統其他如 /etc, /home, /usr... 等其他目錄你就看不到了! 這樣一來即使這個 ftp 服務被攻破了,沒有關係,入侵者還是僅能在 /var/ftp 裡面跑來跑去而已,而無法使用 Linux 的完整功能。自然我們的系統也就會比較安全啦!

sftpd 是基於上面的說明來設計的一個較為安全的 FTP 伺服器軟體,他具有底下的特點喔:

* vsftpd 這個服務的啟動者身份為一般使用者,所以對於 Linux 系統的使用權限較低,對於 Linux 系統的危害就相對的減低了。此外, vsftpd 亦利用 chroot() 這個函式進行改換根目錄的動作,使得系統工具不會被 vsftpd 這支服務所誤用;

* 任何需要具有較高執行權限的 vsftpd 指令均以一支特殊的上層程序 (parent process) 所控制 ,該上層程序享有的較高執行權限功能已經被限制的相當的低,並以不影響 Linux 本身的系統為準;

* 絕大部分 ftp 會使用到的額外指令功能 (dir, ls, cd ...) 都已經被整合到 vsftpd 主程式當中了, 因此理論上 vsftpd 不需要使用到額外的系統提供的指令,所以在 chroot 的情況下, vsftpd 不但可以順利運作,且不需要額外功能對於系統來說也比較安全。

* 所有來自用戶端且想要使用這支上層程序所提供的較高執行權限之 vsftpd 指令的需求, 均被視為『不可信任的要求』來處理,必需要經過相當程度的身份確認後,方可利用該上層程序的功能。 例如 chown(), Login 的要求等等動作;

* 此外,上面提到的上層程序中,依然使用 chroot() 的功能來限制使用者的執行權限。

由於具有這樣的特點,所以 vsftpd 會變的比較安全一些咯!底下就開始來談如何設定吧!

小標題的圖示所需要的套件以及套件結構
vsftpd 所需要的套件只有一個,那就是 vsftpd 啊!^_^!如果你的 CentOS 沒有安裝, 請利用 yum install vsftpd 來安裝他吧!套件很小,下載連同安裝不需要幾秒鐘就搞定了! 而事實上整個套件提供的設定檔也少的令人高興!簡單易用就是 vsftpd 的特色啊! ^_^! 這些設定資料比較重要的有:

* /etc/vsftpd/vsftpd.conf
嚴格來說,整個 vsftpd 的設定檔就只有這個檔案!這個檔案的設定是以 bash 的變數設定相同的方式來處理的, 也就是『參數=設定值』來設定的,注意, 等號兩邊不能有空白喔!至於詳細的 vsftpd.conf 可以使用 『 man 5 vsftpd.conf 』來詳查。

* /etc/pam.d/vsftpd
這個是 vsftpd 使用 PAM 模組時的相關設定檔。主要用來作為身份認證之用,還有一些使用者身份的抵擋功能, 也是透過這個檔案來達成的。你可以察看一下該檔案:

[root@linux ~]# cat /etc/pam.d/vsftpd
#%PAM-1.0
auth required pam_listfile.so item=user sense=deny
file=/etc/vsftpd.ftpusers onerr=succeed
auth required pam_stack.so service=system-auth
auth required pam_shells.so
account required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth

上面的特殊字體為同一行,那個 file 後面接的檔案是『限制使用者無法使用 vsftpd 』之意, 也就是說,其實你的限制檔案不見得要使用系統預設值,也可以在這個檔案裡面進行修改啦! ^_^

* /etc/vsftpd.ftpusers
與上一個檔案有關係,也就是 PAM 模組 (/etc/pam.d/vsftpd_ 所指定的那個無法登入的使用者設定檔啊! 這個檔案的設定很簡單,你只要將『不想讓他登入的帳號』寫入這個檔案即可。一行一個帳號,看起來像這樣:

[root@linux ~]# cat /etc/vsftpd.ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
....底下省略....

瞧見沒有?絕大部分的系統帳號都在這個檔案內喔,也就是說,系統帳號預設是沒有辦法使用 vsftpd 的啦! 如果你還想要讓某些使用者無法登入,寫在這裡是最快的!

* /etc/vsftpd.user_list
這個檔案是否能夠生效與 vsftpd.conf 內的兩個參數有關,分別是『 userlist_enable, userlist_deny 』。 如果說 /etc/vsftpd.ftpusers 是 PAM 模組的抵擋設定項目,那麼這個 /etc/vsftpd.user_list 則是 vsftpd 自訂的抵擋項目。事實上這個檔案與 /etc/vsftpd.ftpusers 幾乎一模一樣, 在預設的情況下,你可以將不希望可登入 vsftpd 的帳號寫入這裡。不過這個檔案的功能會依據 vsftpd.conf 設定檔內的 userlist_deny={YES/NO} 而不同,這得要特別留意喔!

* /etc/vsftpd.chroot_list
這個檔案預設是不存在的,所以你必須要手動自行建立。這個檔案的主要功能是可以將某些帳號的使用者 chroot 在他們的家目錄下!但這個檔案要生效與 vsftpd.conf 內的『 chroot_list_enable, chroot_list_file 』兩個參數有關。 如果你想要將某些實體用戶限制在他們的家目錄下而不許到其他目錄去,可以啟動這個設定項目喔!

* /usr/sbin/vsftpd
這就是 vsftpd 的主要執行檔咯!不要懷疑, vsftpd 只有這一個執行檔而已啊!

* /var/ftp/
這個是 vsftpd 的預設匿名者登入的根目錄喔!

大致上就只有這幾個檔案需要注意而已,而且每個檔案的設定又都很簡單!真是不錯啊!

小標題的圖示vsftpd.conf 設定值說明
事實上,/etc/vsftpd/vsftpd.conf 本身就是一個挺詳細的設定檔,且使用『 man 5 vsftpd.conf 』則可以得到完整的參數說明。 不過我們這裡依舊先將 vsftpd.conf 內的常用參數給他寫出來,希望對您有幫助:

# 與主機較相關的設定值

* connect_from_port_20=YES (NO)
記得在前一小節提到的主動式連線使用的 FTP 伺服器的埠號嗎?這就是 ftp-data 的埠號;

* listen_port=21
vsftpd 使用的命令通道之埠號,如果您想要使用非正規的埠號,在這個設定項目修改吧! 不過你必須要知道,這個設定值僅適合以 stand alone 的方式來啟動喔!(對於 super daemon 無效)

* dirmessage_enable=YES (NO)
當使用者進入某個目錄時,會顯示該目錄需要注意的內容,顯示的檔案預設是 .message ,你可以使用底下的設定項目來修訂!

* message_file=.message
當 dirmessage_enable=YES 時,可以設定這個項目來讓 vsftpd 尋找該檔案來顯示訊息!

* listen=YES (NO)
若設定為 YES 表示 vsftpd 是以 standalone 的方式來啟動的!

* pasv_enable=YES (NO)
啟動被動式連線模式(passive mode),一定要設定為 YES 的啦!

* use_localtime=YES (NO)
是否使用本地時間?vsftpd 預設使用 GMT 時間(格林威治),所以會比台灣晚 8 小時,建議設定為 YES 吧!

* write_enable=YES (NO)
如果你允許使用者上傳資料時,就要啟動這個設定值;

* connect_timeout=60
單位是秒,在資料連接的主動式連線模式下,我們發出的連接訊號在 60 秒內得不到用戶端的回應,則不等待並強制斷線咯。

* accept_timeout=60
當使用者以被動式 PASV 來進行資料傳輸時,如果主機啟用 passive port 並等待 client 超過 60 秒而無回應, 那麼就給他強制斷線!這個設定值與 connect_timeout 類似,不過一個是管理主動連線,一個管理被動連線。

* data_connection_timeout=300
如果伺服器與用戶端的資料連線已經成功建立 (不論主動還是被動連線),但是可能由於線路問題導致 300 秒內還是無法順利的完成資料的傳送,那用戶端的連線就會被我們的 vsftpd 強制剔除!

* idle_session_timeout=300
如果使用者在 300 秒內都沒有命令動作,強制離線!

* max_clients=0
如果 vsftpd 是以 stand alone 方式啟動的,那麼這個設定項目可以設定同一時間,最多有多少 client 可以同時連上 vsftpd 哩!?

* max_per_ip=0
與上面 max_clients 類似,這裡是同一個 IP 同一時間可允許多少連線?

* pasv_max_port=0, pasv_max_port=0
上面兩個是與 passive mode 使用的 port number 有關,如果您想要使用 65400 到 65410 這 11 個 port 來進行被動式連線模式的連接,可以這樣設定 pasv_max_port=65410 以及 pasv_min_port=65400。 如果是 0 的話,表示隨機取用而不限制。

* ftpd_banner=一些文字說明
當使用者連線進入到 vsftpd 時,在 FTP 用戶端軟體上頭會顯示的說明文字。不過,這個設定值資料比較少啦! 建議你可以使用底下的設定值來取代這個項目;

* banner_file=/path/file
這個項目可以指定某個純文字檔作為使用者登入 vsftpd 伺服器時所顯示的歡迎字眼。

# 與實體用戶較相關的設定值

* guest_enable=YES (NO)
若這個值設定為 YES 時,那麼任何非 anonymous 登入的帳號,均會被假設成為 guest (訪客) 喔! 至於訪客在 vsftpd 當中,預設會取得 ftp 這個使用者的相關權限。但可以透過 guest_username 來修改。

* guest_username=ftp
在 guest_enable=YES 時才會生效,指定訪客的身份而已。

* local_enable=YES (NO)
這個設定值必須要為 YES 時,在 /etc/passwd 內的帳號才能以實體用戶的方式登入我們的 vsftpd 主機喔!

* local_max_rate=0
實體用戶的傳輸速度限制,單位為 bytes/second, 0 為不限制。

* chroot_local_user=YES (NO)
將使用者限制在自己的家目錄之內(chroot)!這個設定在 vsftpd 當中預設是 NO,因為有底下兩個設定項目的輔助喔! 所以不需要啟動他!
* chroot_list_enable=YES (NO)
是否啟用將某些實體用戶限制在他們的家目錄內?預設是 NO ,不過,如果您想要讓某些使用者無法離開他們的家目錄時, 可以考慮將這個設定為 YES ,並且規劃下個設定值

* chroot_list_file=/etc/vsftpd.chroot_list
如果 chroot_list_enable=YES 那麼就可以設定這個項目了! 他裡面可以規定那一個實體用戶會被限制在自己的家目錄內而無法離開!(chroot) 一行一個帳號即可!

* userlist_enable=YES (NO)
是否藉助 vsftpd 的抵擋機制來處理某些不受歡迎的帳號,與底下的設定有關;

* userlist_deny=YES (NO)
當 userlist_enable=YES 時才會生效的設定,若此設定值為 YES 時,則當使用者帳號被列入到某個檔案時, 在該檔案內的使用者將無法登入 vsftpd 伺服器!該檔案檔名與下列設定項目有關。
* userlist_file=/etc/vsftpd.user_list
若上面 userlist_deny=YES 時,則這個檔案就有用處了!在這個檔案內的帳號都無法使用 vsftpd 喔!

# 匿名者登入的設定值

* anonymous_enable=YES (NO)
設定為允許 anonymous 登入我們的 vsftpd 主機!預設是 YES ,底下的所有相關設定都需要將這個設定為 anonymous_enable=YES 之後才會生效!

* anon_world_readable_only=YES (NO)
僅允許 anonymous 具有下載可讀檔案的權限,預設是 YES。

* anon_other_write_enable=YES (NO)
是否允許 anonymous 具有寫入的權限?預設是 NO!如果要設定為 YES, 那麼開放給 anonymous 寫入的目錄亦需要調整權限,讓 vsftpd 的 PID 擁有者可以寫入才行!

* anon_mkdir_write_enable=YES (NO)
是否讓 anonymous 具有建立目錄的權限?預設值是 NO!如果要設定為 YES, 那麼 anony_other_write_enable 必須設定為 YES !

* anon_upload_enable=YES (NO)
是否讓 anonymous 具有上傳資料的功能,預設是 NO,如果要設定為 YES , 則 anon_other_write_enable=YES 必須設定。

* deny_email_enable=YES (NO)
將某些特殊的 email address 抵擋住,不讓那些 anonymous 登入! 如果以 anonymous 登入主機時,不是會要求輸入密碼嗎?密碼不是要您 輸入您的 email address 嗎?如果你很討厭某些 email address , 就可以使用這個設定來將他取消登入的權限!需與下個設定項目配合:

* banned_email_file=/etc/vsftpd.banned_emails
如果 deny_email_enable=YES 時,可以利用這個設定項目來規定哪個 email address 不可登入我們的 vsftpd 喔!在上面設定的檔案內,一行輸入一個 email address 即可!

* no_anon_password=YES (NO)
當設定為 YES 時,表示 anonymous 將會略過密碼檢驗步驟,而直接進入 vsftpd 伺服器內喔!所以一般預設都是 NO 的!

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

* anon_umask=077
限制 anonymous 的權限!如果是 077 則 anonymous 傳送過來的檔案 權限會是 -rw------- 喔!

# 關於系統安全方面的一些設定值

* ascii_download_enable=YES (NO)
如果設定為 YES ,那麼 client 就可以使用 ASCII 格式下載檔案。

* ascii_upload_enable=YES (NO)
與上一個設定類似的,只是這個設定針對上傳而言!預設是 NO

* one_process_model=YES (NO)
這個設定項目比較危險一點~當設定為 YES 時,表示每個建立的連線 都會擁有一支 process 在負責,可以增加 vsftpd 的效能。不過, 除非您的系統比較安全,而且硬體配備比較高,否則容易耗盡系統資源喔!一般建議設定為 NO 的啦!

* tcp_wrappers=YES (NO)
當然我們都習慣支援 TCP Wrappers 的啦!所以設定為 YES 吧!

* xferlog_enable=YES (NO)
當設定為 YES 時,使用者上傳與下載檔案都會被紀錄起來。記錄的檔案與下一個設定項目有關:

* xferlog_file=/var/log/vsftpd.log
如果上一個 xferlog_enable=YES 的話,這裡就可以設定了!這個是登錄檔的檔名啦!

* xferlog_std_format=YES (NO)
是否設定為 wu ftp 相同的登錄檔格式?!預設為 NO ,因為登錄檔會比較容易讀! 不過,如果您有使用 wu ftp 登錄檔的分析軟體,這裡才需要設定為 YES

* nopriv_user=nobody
我們的 vsftpd 預設以 nobody 作為此一服務執行者的權限。因為 nobody 的權限 相當的低,因此即使被入侵,入侵者僅能取得 nobody 的權限喔!

* pam_service_name=vsftpd
這個是 pam 模組的名稱,我們放置在 /etc/pam.d/vsftpd 即是這個咚咚!

上面這些是相當常見的 vsftpd 的設定參數,還有很多參數我沒有列出來,您可以使用 man 5 vsftpd.conf 查閱喔!不過,基本上上面這些參數已經夠我們設定 vsftpd 囉。

小標題的圖示vsftpd 啟動的模式
vsftpd 可以擁有兩種啟動的方式,分別是一直在監聽的 stand alone ,一種則是透過 xinetd 這個 super daemon 來管理的方式,兩種方式所使用的啟動程序不太相同,而我們的 CentOS 則預設是以 stand alone 來啟動的。 那什麼時候應該選擇 stand alone 或者是 super daemon 呢?如果你的 ftp 伺服器是提供給整個網際網路來進行大量下載的任務,例如各大專院校的 FTP 伺服器,那建議你使用 stand alone 的方式, 服務的速度上會比較好。如果僅是提供給內部人員使用的 FTP 伺服器,那使用 super daemon 來管理即可啊。

# 利用系統提供的 script 來啟動 vsftpd
其實 CentOS 不用作任何設定就能夠啟動 vsftpd 囉!是這樣啟動的啦:

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

# 自行設定以 super daemon 來啟動
如果你的 FTP 是很少被使用的,那麼利用 super daemon 來管理不失為一個好主意。 不過若你想要使用 super daemon 管理的話,那就得要自行修改一下設定檔了。其實也不難啦,你應該要這樣處理的:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 找到底下這一行:大約在 109 行左右啦!
listen=YES
# 將他改成這樣啊:
listen=NO

接下來修改一下 super daemon 的設定檔,底下這個檔案你必須要自行建立的,原本是不存在的喔:

[root@linux ~]# vi /etc/xinetd.d/vsftpd
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
disable = no
}

然後嘗試啟動看看呢:

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

有趣吧!兩者啟動的方式可不一樣啊!管理的方式就會差很多的呦! 不管你要使用哪種啟動的方式,切記不要兩者同時啟動,否則會發生錯誤的! 你應該使用 chkconfig --list 檢查一下這兩種啟動的方式,然後依據你的需求來決定用哪一種方式啟動。 鳥哥底下的設定都會以 stand alone 這個 CentOS 預設的啟動模式來處理,所以趕緊將剛剛的動作給他改回來喔!

小標題的圖示CentOS 的 vsftpd 預設值
在 CentOS 的預設值當中,vsftpd 是同時開放實體用戶與匿名使用者的,CentOS 的預設值如下:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 底下鳥哥僅列出有設定的項目,若無設定時,請以您系統的 man 5 vsftpd.conf
# 結果去搜尋預設值即可喔!
# 1. 與匿名者有關的資訊:
anonymous_enable=YES

# 2. 與實體用戶有關的設定
local_enable=YES
write_enable=YES
local_umask=022
userlist_enable=YES

# 3. 與主機有關的設定
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
pam_service_name=vsftpd
listen=YES
tcp_wrappers=YES

上面各項設定值請自行參考前一小節 vsftpd.conf 設定項目的詳細說明吧。 而通過這樣的設定值咱們的 vsftpd 可以達到如下的功能:

* 你可以使用 anonymous 這個匿名帳號或其他實體帳號 (/etc/passwd) 登入;
* anonymous 的家目錄在 /var/ftp ,且無上傳權限,亦已經被 chroot 了;
* 實體用戶的家目錄參考 /etc/passwd ,並沒有被 chroot ,可前往任何有權限可進入的目錄中;
* 任何於 /etc/vsftpd.ftpusers 內存在的帳號均無法使用 vsftpd ;
* 可利用 /etc/hosts.{allow|deny} 來作為基礎防火牆;
* 當用戶端有任何上傳/下載資訊時,該資訊會被紀錄到 /var/log/vsftpd.log 中;
* 主動式連線的埠口為 port 20;
* 使用格林威治時間 (GMT)。

所以當你啟動 vsftpd 後,你的實體用戶就能夠直接利用 vsftpd 這個服務來傳輸他自己的資料了。 不過比較大的問題是,因為 vsftpd 預設使用 GMT 時間,因為你在用戶端使用 ftp 軟體連接到 FTP 伺服器時,會發現每個檔案的時間都慢了八小時了!真是討厭啊! 所以建議你加設一個參數值,就是『 use_localtime=YES 』囉!

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 在這個檔案當中加入這一句即可
use_localtime=YES
.....底下省略.....

[root@linux ~]# /etc/init.d/vsftpd restart

如此一來你的 FTP 伺服器不但可以提供匿名帳號來下載 /var/ftp 的資料,如果使用實體帳號來登入的話, 就能夠進入到該使用者的家目錄底下去了!真是很簡單方便的一個設定啊!且使用本地端時間呢! ^_^

小標題的圖示僅有實體用戶登入的設定
雖然在 CentOS 的預設情況當中實體用戶已經可以使用 FTP 的服務了,不過我們可能還需要一些額外的功能來限制實體用戶, 舉例來說,限制使用者無法離開家目錄 (chroot) 、限制下載速率、限制使用者上傳檔案時的權限 (mask)等等。 底下我們先列出一些希望達到的功能,然後再繼續進行額外功能的處理:

* 希望使用台灣本地時間取代 GMT 時間;
* 使用者登入時顯示一些歡迎訊息的資訊;
* 系統帳號不可登入主機 (亦即 UID 小於 500 以下的帳號);
* 一般實體用戶可以進行上傳、下載、建立目錄及修改檔案等動作;
* 使用者新增的檔案、目錄之 umask 希望設定為 002;
* 其他主機設定值保留預設值即可。

你可以自行處理 vsftpd.conf 這個檔案,以下則是一個範例。注意,如果你的 vsftpd.conf 沒有相關設定值, 請自行補上吧!OK!讓我們開始一步一步來依序處理先:

1. 先建立設定檔,這個設定檔已經包含了主要設定值:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 1. 與匿名者相關的資訊,在這個案例中將匿名登入取消:
anonymous_enable=NO

# 2. 與實體用戶相關的資訊
# 可寫入,且新增目錄、檔案權限為 775,因為 umask 為 002 嘛!
local_enable=YES
write_enable=YES
local_umask=002
# 設定抵擋某些使用者登入的項目設定值!注意,底下的檔案必須存在!
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd.user_list

# 3. 與主機有關的設定
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
pam_service_name=vsftpd
listen=YES
tcp_wrappers=YES
banner_file=/etc/vsftpd/welcome.txt

[root@linux ~]# /etc/init.d/vsftpd restart


2. 建立歡迎訊息:

當我們想讓登入者可查閱咱們系統管理員所下達的『公告』事項時,可以使用這個設定!那就是 banner_file=/etc/vsftpd/welcome.txt 這個參數的用途了!我們可以編輯這個檔案即可。 好了,開始來建立歡迎畫面吧!

[root@linux ~]# vi /etc/vsftpd/welcome.txt
歡迎光臨本小站,本站提供 FTP 的相關服務!
主要的服務是針對本機實體用戶提供的,
若有任何問題,請與鳥哥聯絡!


3. 建立限制系統帳號登入的檔案

再來是針對系統帳號來給予抵擋的機制,其實有兩個檔案啦,一個是 PAM 模組管的,一個是 vsftpd 主動提供的, 在預設的情況下這兩個檔案分別是:

* /etc/vsftpd.ftpusers:就是 /etc/pam.d/vsftpd 這個檔案的設定所影響的;
* /etc/vsftpd.user_list:由 vsftpd.conf 的 userlist_file 所設定。

這兩個檔案的內容是一樣的哩~並且這兩個檔案必須要存在才行。請你參考你的 /etc/passwd 設定檔, 然後將 UID 小於 500 的帳號名稱給他同時寫到這兩個檔案內吧!一行一個帳號!

[root@linux ~]# vi /etc/vsftpd.user_list
root
bin
....底下省略....


4. 測試結果:

你可以使用圖形介面的 FTP 用戶端軟體來處理,也可以透過 Linux 本身提供的 ftp 用戶端功能哩! 關於 ftp 指令我們已經在之前的常用網路指令談過了, 你可以自行前往參考。這裡直接測試一下吧:

1. 測試使用已知使用者登入,例如 dmtsai 這個實體用戶:
[root@linux ~]# ftp localhost
Connected to localhost (127.0.0.1).
220-歡迎光臨本小站,本站提供 FTP 的相關服務! <==剛剛建立的歡迎訊息
220-主要的服務是針對本機實體用戶提供的,
220-若有任何問題,請與鳥哥聯絡!
220
Name (localhost:root): dmtsai <==登入者帳號!
331 Please specify the password.
Password: <==輸入密碼,螢幕不會有任何訊息的顯示
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.

在以上面的方式測試完畢後,你可以在登入者帳號處分別填寫 (1)root (2)anonymous 來嘗試登入看看! 如果不能登入的話,那就是設定 OK 的啦!^_^

# chroot 的使用
假設你的系統當中有許多帳號,但是 dmtsai 以及 bird1 這兩個帳號是開放給一般客戶的, 你不想讓這兩個帳號可以離開他的家目錄,這個時候就得使用 chroot 的設定了。設定的方式很簡單, 你先要修改 vsftpd.conf ,增加這幾個項目:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 增加是否設定針對某些使用者來 chroot 的相關設定呦!
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

[root@linux ~]# /etc/init.d/vsftpd restart

然後建立要被 chroot 的使用者檔案:

[root@linux ~]# vi /etc/vsftpd.chroot_list
dmtsai
bird1

不要懷疑!這樣就能夠將這兩個使用者限制在家目錄內了,有夠簡單吧!

# 更嚴格的 chroot 環境
上面提到的是預設實體用戶沒有 chroot 而特定人士被 chroot 的環境,那如果我想要的是: 所有使用者預設為 chroot ,但某些使用者可不受限制的環境呢? 那你就得要這樣做了:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 預設所有實體用戶被 chroot 而開放某些人可完整存取 (不 chroot) 的情況
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

[root@linux ~]# /etc/init.d/vsftpd restart

由於多了 chroot_list_enable=YES 這個參數,因此寫入 /etc/vsftpd.chroot_list 內的使用者反而是被認為可以不受 chroot 的帳號!假設系統中的 nikky 這個使用者為被信任的,所以你要這樣:

[root@linux ~]# vi /etc/vsftpd.chroot_list
nikky

則未來所有新增的用戶都是預設被 chroot 的,除非該用戶被寫入 /etc/vsftpd.chroot_list 才能夠不會被 chroot 呢!這不是比較嚴格嗎?

# 限制下載頻寬
有的時候你可能不希望頻寬被使用者上傳/下載所耗盡,而影響咱們伺服器的其他工作之運作, 所以限制使用者傳輸頻寬有時也是需要的!假設『我要限制所有使用者的傳輸頻寬最大可達 100KBytes/秒』, 你可以這樣做即可:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 增加底下這一個參數即可:
local_max_rate=100000

[root@linux ~]# /etc/init.d/vsftpd restart

上述的單位是 Bytes/秒,所以你可以依據你自己的網路環境來限制你的頻寬!這樣就給他限制好囉!有夠容易吧!^_^

# 限制最大上線人數與同一 IP 的來源數
如果你有限制最大使用頻寬的話,那麼你可能還需要限制最大線上人數才行!舉例來說, 你希望最多只有 10 個人同時使用你的 FTP 的話,並且每個 IP 來源最多只能建立一條 FTP 的連線時, 那你可以這樣做:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 增加底下的這兩個參數:
max_clients=10
max_per_ip=1

[root@linux ~]# /etc/init.d/vsftpd restart

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

# 建立嚴格的可使用 FTP 的帳號列表
在上述的設定當中,我們將『不許使用 FTP 的帳號寫入 /etc/vsftpd.user_list 檔案中』,所以沒有寫入 /etc/vsftpd.user_list 當中的使用者就能夠使用 FTP 了!如此一來,未來新增的使用者預設都能夠使用 FTP 的服務。 如果換個角度來思考,若我想只讓某些人可以使用 FTP 而已,亦即是新增的使用者預設不可使用 FTP 這個服務的話那麼應該如何作呢?你需要修改設定檔成為這樣:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 這幾個參數必須要修改成這樣:
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.user_list

[root@linux ~]# /etc/init.d/vsftpd restart

則此時『寫入 /etc/vsftpd.user_list 變成可以使用 FTP 的帳號』了! 所以未來新增的使用者如果要能夠使用 FTP 的話,就必須要寫入 /etc/vsftpd.user_list 才行! 使用這個機制請特別小心,否則容易搞混掉~

透過這幾個簡單的設定值,相信 vsftpd 已經可以符合大部分合法 FTP 網站的需求囉! 更多詳細的用法則請參考 man 5 vsftpd.conf 吧!

例題:
假設你因為某些特殊需求,所以必須要開放 root 使用 FTP 傳輸檔案,那麼你應該要如何處理?
答:

由於系統帳號無法使用 FTP 是因為 PAM 模組與 vsftpd 的內建功能所致,亦即是 /etc/vsftpd.ftpusers 及 /etc/vsftpd.user_list 這兩個檔案的影響。所以你只要進入這兩個檔案,並且將 root 那一行註解掉, 那 root 就可以使用 vsftpd這個 FTP 服務了。 不過,不建議如此作喔!


小標題的圖示僅有匿名登入的相關設定
雖然你可以同時開啟實體用戶與匿名用戶,不過建議你主機還是依據需求,針對單一種身份來設定吧! 底下我們將針對匿名用戶,且不開放實體用戶。一般來說,這種設定是給類似大專院校的 FTP 伺服器來使用的哩!

* 使用台灣本地的時間,而非 GMT 時間;
* 提供歡迎訊息,說明可提供下載的資訊;
* 僅開放 anonymous 的登入,且不需要輸入密碼;
* 檔案傳輸的速限為 30 Kbytes/second;
* 資料連接的過程 (不是命令通道!) 只要超過 60 秒沒有回應,就強制 Client 斷線!
* 只要 anonymous 超過十分鐘沒有動作,就予以斷線;
* 最大同時上線人數限制為 50 人,且同一 IP 來源最大連線數量為 5 人;

OK!那如何設定呢?首先我們必須要知道的是匿名使用者的目錄在哪裡? 事實上匿名者預設登入的根目錄是以 ftp 這個使用者的家目錄為主,所以你可以使用『 finger ftp 』來查閱。 咱們的 CentOS 預設的匿名者根目錄在 /var/ftp/ 中。且匿名登入者在使用 FTP 服務時,他預設可以使用『 ftp 』 這個使用者身份的權限喔,只是被 chroot 到 /var/ftp/ 目錄中就是了。

因為匿名者只會在 /var/ftp/ 當中瀏覽,所以你必須將要提供給使用者下載的資料通通給放置到 /var/ftp/ 去。 假設你已經放置了 linux 的相關目錄以及 gnu 的相關軟體到該目錄中了,那我們可以這樣做個假設:

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

然後將 vsftpd.conf 的資料清空,重新這樣處理他吧:

1. 建立 vsftpd.conf 的設定資料

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 將這個檔案改成這樣:
# 1. 與匿名者相關的資訊:
anonymous_enable=YES
# 不必提供密碼啦!可直接登入哩!
no_anon_password=YES
# 限制流速啦!
anon_max_rate=30000
# 與連線時間有關的設定項目
data_connection_timeout=60
idle_session_timeout=600
# 限制連線人數
max_clients=50
max_per_ip=5

# 2. 與實體用戶相關的資訊,本案例中為關閉他的情況!
local_enable=NO

# 3. 與主機有關的設定
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
pam_service_name=vsftpd
listen=YES
tcp_wrappers=YES
banner_file=/etc/vsftpd/anon_welcome.txt

[root@linux ~]# /etc/init.d/vsftpd restart


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

各位親愛的觀眾朋友!要注意~在這個案例當中,我們將歡迎訊息設定在 /etc/vsftpd/anon_welcome.txt 這個檔案中, 至於這個檔案的內容你可以這樣寫:

[root@linux ~]# vi /etc/vsftpd/anon_welcome.txt
歡迎光臨本站所提供的 FTP 服務!
本站主要提供 Linux 作業系統相關檔案以及 GNU 自由軟體喔!
有問題請與站長聯絡!謝謝大家!
主要的目錄為:

linux 提供 Linux 作業系統相關軟體
gnu 提供 GNU 的自由軟體

看到囉!主要寫的資料都是針對一些公告事項就是了!

3. 測試

同樣的,我們使用 ftp 這個軟體來給他測試一下吧!

[root@linux ~]# ftp localhost
Connected to localhost (127.0.0.1).
220-歡迎光臨本站所提供的 FTP 服務! <==同樣的,一些歡迎訊息
220-本站主要提供 Linux 作業系統相關檔案以及 GNU 自由軟體喔!
220-有問題請與站長聯絡!謝謝大家!
220-主要的目錄為:
220-
220-linux 提供 Linux 作業系統相關軟體
220-gnu 提供 GNU 的自由軟體
220
Name (localhost:root): anonymous <==一定得是這個匿名帳號
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (127,0,0,1,94,56)
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Dec 18 17:37 gnu
drwxr-xr-x 2 0 0 4096 Dec 18 17:37 linux
drwxr-xr-x 2 0 0 4096 Aug 13 03:25 pub
226 Directory send OK.
ftp> bye
221 Goodbye.

看到否?這次可就不需要輸入任何密碼了,因為是匿名登入嘛!而且,如果你輸入任何其他的帳號, 那麼 vsftpd 會立刻回應斷線的狀態喔!OK 的啦!

# 建立上傳/下載目錄
在上列的資料當中,實際上匿名使用者僅可進行下載的動作而已。如果你還想讓匿名者可以上傳檔案或者是建立目錄的話, 那你還需要額外增加一些設定才行:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 新增底下這幾行啊!
write_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES

[root@linux ~]# /etc/init.d/vsftpd restart

如果你設定上面四項參數,則會允許匿名者擁有完整的建立、刪除、修改檔案與目錄的權限。 不過,實際要生效還需要 Linux 的檔案系統權限正確才行! 我們知道匿名者取得的身份是 ftp ,所以如果想讓匿名者上傳資料到 /var/ftp/upload 中, 則需要這樣做:

[root@linux ~]# mkdir /var/ftp/upload
[root@linux ~]# chown ftp /var/ftp/upload

然後你以匿名者身份登入後,就會發現匿名者的根目錄多了一個 /upload 的目錄存在了, 並且你可以在該目錄中上傳檔案/目錄喔! 如此一來系統的權限大開!很要命喔!所以,請仔細的控制好你的上傳目錄才行!

# 建立僅可上傳目錄
一般來說,使用者上傳的資料在管理員尚未查閱過是否合乎版權等相關事宜前,是不應該讓其他人下載的! 然而前一小節的設定當中,使用者上傳的資料是可以被其他人所瀏覽與下載的! 如此一來實在是很危險!所以如果你要設定 /var/ftp/upload 僅能上傳不能被下載時, 那麼被上傳的資料的權限就得要被修改一下才行!請將前一小節所設定的四個參數簡化成為:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 將這幾行給他改一改先!
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
chown_uploads=YES
chown_username=root

[root@linux ~]# /etc/init.d/vsftpd restart

當然啦,那個 /var/ftp/upload 還是需要可以被 ftp 這個使用者寫入才行! 如此一來被上傳的檔案將會被修改檔案擁有者成為 root 這個使用者, 而 ftp (匿名者取得的身份) 是無法讀取 root 的資料的,所以也就無法被下載囉! ^_^

# 被動式連線埠口的限制
FTP 的連線分為主動式與被動式,主動式連線比較好處理,因為都是透過伺服器的 port 20 對外主動連線, 所以防火牆的處理比較簡單。被動式連線就比較麻煩~因為預設 FTP 伺服器會隨機取幾個沒有在使用當中的埠口來建立被動式連線,那防火牆的設定就麻煩啦!

沒關係,我們可以透過指定幾個固定範圍內的埠口來作為 FTP 的被動式資料連接之用即可, 這樣我們就能夠預先知道 FTP 資料連結的埠口啦!舉例來說,我們假設被動式連接的埠口為 65400 到 65410 這幾個埠口時,可以這樣設定:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 增加底下這幾行即可啊!
pasv_min_port=65400
pasv_max_port=65410

[root@linux ~]# /etc/init.d/vsftpd restart

匿名使用者的設定大致上這樣就能符合你的需求囉!自己看著辦吧! ^_^
大標題的圖示用戶端的 FTP 連線軟體
用戶端的連線軟體主要有文字介面的 ftp 及 lftp 這兩支指令,詳細的使用方式請參考常用網路指令章節的說明。至於 Linux 底下的圖形介面軟體,可以參考 gftp 這支程式喔!圖形介面的啦!很簡單啊!

上述的軟體都是自由軟體啊,那麼 Windows 作業系統有沒有自由軟體啊?有的, 你可以使用 filezilla 這個好東西!這個玩意兒的詳細說明與下載點可以在底下的連結找到:

* 說明網站:http://filezilla.sourceforge.net/
* 下載網站:http://sourceforge.net/project/showfiles.php?group_id=21558

目前 (2006/12) 最新的穩定版本是 2.2.29 版,所以底下鳥哥就以這個版本來跟大家說明。 為什麼要選擇 Filezilla 呢?除了他是自由軟體之外,這傢伙竟然可以連結到 SSH 的 sftp 呢! 真是很不錯的一個傢伙啊!^_^!另外要注意的是,底下鳥哥是以 Windows 版本來說明的, 不要拿來在 X server 上面安裝喔! ^_^

因為這個程式是給 Windows 安裝用的,所以安裝的過程就是.....(下一步)^n 就好了! 並且這個程式支援多國語系,所以你可以選擇繁體中文呢!實在是很棒! 安裝完畢之後,請你執行他,就會出現如下的畫面了:

Filezilla 的操作方式
圖四、Filezilla 的操作方式

圖四的 1, 2, 3, 4, 5 分別代表的資料是:

1. 代表 FTP 伺服器的輸出資訊,例如歡迎訊息等資訊;
2. 代表本機的檔案,與 3 有關;
3. 代表本機的磁碟機所在處,與 2 有關;
4. 代表遠端 FTP 伺服器的目錄與檔案;
5. 代表傳輸時的佇列資訊

而另外 a, b, c 則代表的是:

1. 站台管理員,你可以將一些常用的 FTP 伺服器的 IP 與使用者資訊記錄在此;
2. 更新,如果你的資料有更新,可使用這個按鈕來同步 filezilla 的螢幕顯示;
3. 位址、使用者、密碼與連接埠這四個玩意兒可以即時連線,不記錄資訊。

好,接下來我們連接到 FTP 伺服器上面去,所以你可按下圖四的 a 部分,會出現如下畫面:

Filezilla 的操作方式
圖五、Filezilla 的操作方式

上圖五的箭頭與相關的內容是這樣的:

1. 先按下『新站台』的按鈕,然後在箭頭 2 的地方就會出現可輸入的方框;
2. 在該方框當中填寫一個你容易記錄的名字,隨便填寫也沒有關係的;
3. 在這個方框當中填寫主機的 IP 就好了,連接埠如果不是標準的 port 21 ,請填寫其他埠口。
4. 這個地方可以挑選不同的連線機制,包括幾個常見的機制為:
* 標準 FTP
* FTP + SSL/TLS 加密機制
* FTP + SSL 加密機制
* SFTP (透過 SSH)
* FTP + TLS 加密機制
如果你預計要利用 filezilla 連接到 sftp 的話,這個地方可以挑選 sftp 喔!不然的話就用 FTP 即可;
5. 在這裡選擇匿名登入或者是一般登入,所謂一般登入即是利用實體帳號來登入;
6. 在這裡如果使用一般登入時,則你可以填寫使用者及密碼欄位,否則就會主動以 anonymous 來匿名登入呢!

基本上這樣設定完就能夠連上主機了,不過,如果你還想要更詳細的規範資料連接的方式 (主動式與被動式) 以及其他資料時, 可以按下圖五的『進階設定』按鈕,就會出現如下畫面了:

Filezilla 的操作方式
圖六、Filezilla 的操作方式

在這個畫面當中你可以選擇是否使用被動式傳輸機制,還可以調整時區的顯示呢! 如果 FTP 伺服器的時間設定錯誤,導致出現 8 小時的誤差時 (台北時間與 GMT 時間),就能夠利用這個設定項目來調整了! 此外,也能夠進行語系的調整,呵呵!絕大部分的 FTP 連線項目都考慮到了,這樣就 OK 啦!然後按下圖六的確定, 並到圖五畫面當中按下『連線』後,就能夠得到如下的畫面了:

Filezilla 的操作方式
圖七、Filezilla 的操作方式

更多的用法就請您自行研究囉!

# 利用瀏覽器功能
我們在 Apache 這個 WWW 伺服器的章節當中曾經談過瀏覽器所支援的協定,其中一個就是 ftp 這個協定囉! 這個協定的處理方式可以在網址列的地方這樣輸入的:

* ftp://username@your_ip

要記得,如果你沒有輸入那個 username@ 的字樣時,系統預設會以匿名登入來處理這次的連線。因此如果你想要使用實體用戶連線時, 就在在 IP 或主機名稱之前填寫你的帳號。舉例來說,鳥哥的主機 (192.168.1.254) 若有 dmtsai 這個使用者, 那我啟動瀏覽器後,可以這樣做:

* ftp://dmtsai@192.168.1.254

然後在出現的對話視窗當中輸入 dmtsai 的密碼,就能夠使用瀏覽器來管理我在 FTP 伺服器內的檔案系統囉! 是否很容易啊! ^_^
大標題的圖示其他 FTP 伺服器相關設定
除了基礎設定之外,我們針對 FTP 還有哪些需要考慮的地方呢?底下就來談一談:

小標題的圖示防火牆設定
防火牆設定有什麼難的?將防火牆那一章裡面的 script 拿出來, 加入底下這一段在內:

iptables -A INPUT -p TCP -i $EXTIF --dport 21 -j ACCEPT

這樣就好了嗎?當然不是啦!要記得我們還可能會有被動式連線的狀態啊,所以某些特殊情況底下, 或許你還需要啟動被動式連線的監聽的埠口哩!以上面我們談過的 port 65400 ~ 65410 這幾個當作範例好了, 你應該還需要加入這一段呢:

iptables -A INPUT -p TCP -i $EXTIF --dport 65400:65410 -j ACCEPT

另外,如果你想要使用 tcp wrappers 的方式來處理 FTP 的連線時,例如僅允許內部 (192.168.1.0/24) 來連線,那應該可以這樣做:

[root@linux ~]# vi /etc/hosts.allow
vsftpd: 192.168.1.0/255.255.255.0

[root@linux ~]# vi /etc/hosts.deny
vsftpd: ALL

小標題的圖示Super daemon 的額外管理項目
關於使用 xinetd 這個 super daemon 來管理服務的方法還記得吧? 要記得基礎篇談到的認識系統服務喔! 如果忘記的話,也要記得使用『 man xinetd.conf 』這個好用的查詢功能吶!

我們知道 stand alone 的啟動方法可以透過 max_clients 及 max_per_ip 這兩個參數來處理同時上線的最大人數。 但是如果是 super dae


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-10-11 17:57 

注册: 2007-09-26 17:17
帖子: 13
送出感谢: 0 次
接收感谢: 0 次
我帮你把它变成简体,如下:

http://linux.vbird.org/

本章的行前准备工作
架设 FTP 是个很难的任务,因为 FTP 服务同时启用两个连线通道,分别是命令通道与资料流通道, 这两条通道的连线建立方式不太一样,结果就造成了防火墙设定方面的困扰。 所以在学习 FTP 之前,请先确认您已经具有网路基础概念,而且对防火墙也需要有一定程度的概念了喔!

* 必须要熟悉网路基础,尤其是网路连线的建立是双向的这个概念;
* 必须要了解防火墙的机制,尤其当防火墙架设在路由器上的网路架构时。
* 必须要了解 stand alone 与 super daemon 的启动方式。

大标题的图示FTP 的资料连结原理
FTP 是相当古老的传输协定之一,他最主要的功能是在伺服器与用户端之间进行档案的传输。 FTP 其实是以 TCP 封包的模式进行伺服器与用户端电脑之间的连线,当连线建立后,使用者可以在用户端端连上 FTP 伺服器来进行档案的下载与上传,此外,也可以直接管理用户在 FTP 伺服器上面的档案呢,相当的方便! 而这个古老的协定是使用明码传输,且过去有相当多的安全危机历史。为了更安全的使用 FTP 协定, 我们主要介绍较为安全但功能较少的 vsftpd 这个软体呐。

小标题的图示FTP 功能简介
FTP 伺服器的功能除了单纯的进行档案的传输与管理之外,依据伺服器软体的设定架构, 他还可以提供几个主要的功能,底下我们约略的来谈一谈:

# 不同等级的使用者身份:
FTP 伺服器在预设的情况下,依据使用者登入的情况而分为三种不同的身份,分别是 (1)实体帐号,real user;(2)访客, guest;(3)匿名登入者, anonymous 这三种。这三种身份的使用者在系统上面的使用权限差异很大喔! 例如实体用户取得系统的权限比较完整,所以可以进行比较多的动作;至于匿名登入者, 大概我们就仅提供他下载一下资源而已,并不许匿名者使用太多主机的资源啊! 当然,这三种人物能够使用的‘线上指令’自然也就不相同啰! ^_^

# 命令记录与登录档记录:
FTP 可以利用系统的 syslogd 这个 daemon 来进行资料的纪录, 而记录的资料包括了使用者曾经下达过的命令与使用者传输资料(传输时间、档案大小等等)的纪录呢! 所以你可以很轻松的在 /var/log/ 里面找到各项登录资讯喔!

# 限制或解除使用者家目录所在(change root, 简称 chroot):
为了避免使用者在您的 Linux 系统当中随意逛大街 (意指离开使用者自己的家目录而进入到 Linux 系统的其他目录去), 所以将使用者的工作范围‘局限’在使用者的家目录底下,嗯!实在是个不错的好主意!FTP 可以限制使用者仅能在自己的家目录当中活动喔!如此一来,由于使用者无法离开自己的家目录,而且登入 FTP 后,显示的‘根目录’就是自己家目录的内容,这种环境称之为 change root ,简称 chroot ,改变根目录的意思啦!

这有什么好处呢?当一个恶意的使用者以 FTP 登入您的系统当中,如果没有 chroot 的环境下,他可以到 /etc, /usr/local, /home 等其他重要目录底下去察看档案资料,尤其是很重要的 /etc/ 底下的设定档,如 /etc/passwd 等等。如果您没有做好一些档案权限的管理与保护,那他就有办法取得系统的某些重要资讯, 用来‘入侵’您的系统呢!所以在 chroot 的环境下,当然就比较安全一些咯!
小标题的图示FTP 的运作流程与使用到的埠口
FTP 的传输使用的是较为可靠的 TCP 封包协定,在前几章的网路基础当中我们谈过, TCP 这种封包格式在建立连线前会先进行三向交握的。不过 FTP 伺服器是比较麻烦一些,因为 FTP 伺服器使用了两个连线,分别是命令通道与资料流通道 (ftp-data) 。这两个连线都需要经过三向交握, 因为是 TCP 封包嘛!那么这两个连线通道的关系是如何呢?底下我们先以 FTP 预设的主动式 (active) 连线来作个简略的说明啰:

FTP 伺服器的主动式连线示意图
图一、FTP 伺服器的主动式连线示意图

简单的连线就如上图所示,至于连线的步骤是这样的:

1. 建立命令通道的连线
如上图一所示,用户端会随机取一个大于 1024 以上的埠口 (port AA) 来与 FTP 伺服器端的 port 21 达成连线, 这个过程当然需要三向交握了!达成连线后用户端便可以透过这个连线来对 FTP 伺服器下达指令, 包括查询档名、下载、上传等等指令都是利用这个通道来下达的;

2. 通知 FTP 伺服器端使用 active 且告知连接的埠号
FTP 伺服器的 21 埠号主要用在命令的下达,但是当牵涉到资料流时,就不是使用这个连线了。 用户端在需要资料的情况下,会告知伺服器端要用什么方式来连线,如果是主动式 (active) 连线时, 用户端会先随机启用一个埠口 (图一当中的 port BB) ,且透过命令通道告知 FTP 伺服器这两个资讯,并等待 FTP 伺服器的连线;

3. FTP 伺服器‘主动’向用户端连线
FTP 伺服器由命令通道了解用户端的需求后,会主动的由 20 这个埠号向用户端的 port BB 连线, 这个连线当然也会经过三向交握啦!此时 FTP 的用户端与伺服器端共会建立两条连线,分别用在命令的下达与资料的传递。 而预设 FTP 伺服器端使用的主动连线埠号就是 port 20 啰!

如此一来则成功的建立起‘命令’与‘资料传输’两个通道!不过,要注意的是, ‘资料传输通道’是在有资料传输的行为时才会建立的通道喔!并不是一开始连接到 FTP 伺服器就立刻建立的通道呢!留意一下啰!

# 使用到的埠号
利用上述的说明来整理一下 FTP 会使用到的埠号主要有:

* 命令通道的 ftp (预设为 port 21) 与
* 资料传输的 ftp-data (预设为port 20)。

再强调一次,这两个埠口的工作是不一样的,而且,重要的是两者的连线方向是不一样的! 首先, port 21 主要接受来自用户端的主动连线,至于 port 20 则为 FTP 伺服器主动连线至用户端呢! 这样的情况在伺服器与用户端两者同时为公共 IP (Public IP) 的网际网路上面通常没有太大的问题,不过, 万一你的用户端端是在防火墙后端,或者是 NAT 主机后端呢?会有什么问题发生呢?底下我们来谈一谈这个严重的问题!

# 在 FTP 伺服器与用户端之间具有防火墙的连线问题:
还记得我们的防火墙章节吧?一般来说,很多的区域网路 (LAN) 都会使用防火墙 (iptables) 的 NAT 功能,那么在 NAT 主机后端的 FTP 用户如何连接到 FTP 伺服器呢? 我们可以简单的以下图来说明:

若 FTP 用户端与伺服器端连线中间具有防火墙的连线状态
图二、若 FTP 用户端与伺服器端连线中间具有防火墙的连线状态

1. 命令通道的建立:
因为 NAT 主机会主动的记录由内部送往外部的连线资讯,而由于命令通道的建立是由用户端向伺服器端连线的, 因此这一条连线可以顺利的建立起来的;

2. 资料通道建立时的通知:
同样的,用户端主机会先启用 port BB ,并透过命令通道告知 FTP 伺服器,且等待主机端的主动连线;

3. 主机的主动连线问题:
但是由于透过 NAT 主机的转换后,FTP 伺服器只能得知 NAT 主机的 IP 而不是用户端的 IP , 因此 FTP 伺服器会以 port 20 主动的向 NAT 主机的 port BB 发送主动连线的要求。 但你的 NAT 主机并没有启动 port BB 来监听 FTP 伺服器的连线啊!

了解问题的所在了吗?在 FTP 的主动式连线当中,NAT 主机将会被视为用户端,但 NAT 主机其实并非用户端啊, 这就造成问题了。如果你曾经在 IP 分享器后面连接某些 FTP 伺服器时,可能偶尔会发现明明就连接上 FTP 伺服器了 (命令通道已建立),但是就是无法取得档案名称的列表,而是在超过一段时间后显示‘ Can't build data connection: Connection refused,无法进行资料传输’之类的讯息, 那肯定就是这个原因所造成的困扰了。

那有没有办法可以克服这个问题呢?难道真的在 Linux NAT 主机后面就一定无法使用 FTP 吗?当然不是! 目前有两个简易的方法可以克服这个问题:

* 使用 iptables 所提供的 FTP 侦测模组:
其实 iptables 早就提供了许多好用的模组了,这个 FTP 当然不会被错过! 你可以使用 modprobe 这个指令来载入 ip_conntrack_ftp 及 ip_nat_ftp 等模组,这几个模组会主动的分析‘目标是 port 21 的连线’资讯, 所以可以得到 port BB 的资料,此时若接受到 FTP 伺服器的主动连线,就能够将该封包导向正确的后端主机了! ^_^

不过,如果你连结的目标 FTP 伺服器他的命令通道预设埠号并非标准的 21 埠号时 (例如某些地下 FTP 伺服器), 那么这两个模组就无法顺利解析出来了,这样说,理解吗?

* 用户端选择被动式 (Passive) 连线模式:
除了主动式连线之外,FTP 还提供一种称为被动式连线的模式,什么是被动式呢? 既然主动式是由伺服器向用户端连线,反过来讲,被动式就是由用户端向伺服器端发起连线的啰! 既然是由用户端发起连线的,那自然就不需要考虑来自 port 20 的连线啦!关于被动式连线模式将在下一小节介绍喔!

小标题的图示用户端选择被动式连线模式
那么什么是被动式连线呢?我们可以使用底下的图示来作个简略的介绍喔:

被动式连线的方向
图三、被动式连线的方向

1. 建立命令通道:
同样的需要建立命令通道,透过三向交握就可以建立起这个通道了。

2. 发出 PASV 的连线要求:
当有使用资料通道的指令时,用户端可透过命令通道发出 PASV 的被动式连线要求 (Passive 的缩写), 并等待伺服器的回应;

3. FTP 伺服器启动资料埠口,并通知用户端连线:
如果你的 FTP 伺服器是能够处理被动式连线的,此时 FTP 伺服器会先启动一个埠口在监听。 这个埠口号码可能是随机的,也可以自订某一范围的埠口,端看你的 FTP 伺服器软体而定。 然后你的 FTP 伺服器会透过命令通道告知用户端该已经启动的埠口 (图中的 port PASV), 并等待用户端的连线。

4. 用户端随机取用大于 1024 的埠口进行连接:
然后你的用户端会随机取用一个大于 1024 的埠号来对主机的 port PASV 连线。 如果一切都顺利的话,那么你的 FTP 资料就可以透过 port BB 及 port PASV 来传送了。

发现上面的不同点了吗?被动式 FTP 资料通道的连线方向是由用户端向主机端连线的喔! 如此一来,在 NAT 主机内部的用户端主机就可以顺利的连接上 FTP Server 了!但是,万一 FTP 主机也是在 NAT 后端那怎么办.....呵呵!那可就糗了吧~ @_@这里就牵涉到更深入的 DMZ 技巧了,我们这里暂不介绍这些深入的技巧,先理解一下这些特殊的连线方向, 这将有助于您未来伺服器架设时候的考虑因素喔!

此外,不晓得您有无发现,透过 PASV 模式,伺服器在没有特别设定的情况下,会随机选取大于 1024 的埠口来提供用户端连接之用。那么万一主机启用的埠口被搞鬼怎么办?而且, 如此一来也很难追踪来自入侵者攻击的登录资讯啊!所以,这个时候我们可以透过 passive ports 的功能来‘限定’主机启用的 port number 喔!

小标题的图示FTP 的安全性问题与替代方案
事实上,FTP 是一个不太安全的传输协定呢!怎么说呢?因为 FTP 与 Telnet 相似的, 他是以‘明码’的状态在网际网路上面传输的,所以当然就容易被有心人士将你的资料给他抓下来, 并且加以利用啦!因此,他当然不是很安全啊!所以,在网路上大家才会常常告诫说,不要随意架设 FTP 网站啊!否则主机怎么被破解的都不晓得哩!此外,由于 FTP 软体常常会有漏洞的问题,因此也要常常更新套件喔!

另外,其实拜 SSH 所赐,目前我们已经有较为安全的 FTP 了,那就是 ssh 提供的 sftp 这个 server 啊!这个 sftp-server 最大的优点就是:‘他是经过加密的资料!’所以在网际网路上面流窜的时候, 嘿嘿!毕竟是比较安全一些啦!所以建议您,除非必要,否则的话使用 SSH 提供的 sftp-server 功能即可~

然而这个功能对于一些习惯了图形介面,或者是有中文档名的使用者来说,实在是不怎么方便, 虽说目前有个图形介面的 filezilla 用户端软体,不过很多时候还是会发生一些莫名的问题说! 所以,有的时候 FTP 网站还是有其存在的需要的。如果真的要架设 FTP 网站,那么还是得需要注意几个事项喔:

1. 随时更新到最新版本的 FTP 软体,并随时注意漏洞讯息;
2. 善用 iptables 来规定可以使用 FTP 的网域;
3. 善用 TCP_Wrappers 来规范可以登入的网域;
4. 善用 FTP 软体的设定来限制使用您 FTP 主机的使用者的不同权限啊;
5. 使用 Super daemon 来进阶管理您的 FTP 主机;
6. 随时注意使用者的家目录、以及匿名使用者登入的目录的‘档案权限’;
7. 若不对外公开的话,或许也可以修改 FTP 的 port 。

无论如何,在网路上听过太多人都是由于开放 FTP 这个伺服器而导致整个主机被入侵的事件,所以, 这里真的要给他一直不断的强调,要注意安全啊!

小标题的图示开放什么身份的使用者登入
既然 FTP 是以明码传输,并且某些早期的 FTP 伺服器软体也有不少的安全性漏洞,那又为何需要架设 FTP 伺服器啊? 没办法啊,总是有人有需要这个玩意儿的,譬如说各大专院校不就有提供 FTP 网站的服务吗? 这样可以让校内的同学共同分享校内的网路资源嘛!不过,由于 FTP 登入者的身份可以分为三种, 你到底要开放哪一种身份登入呢?这个时候你可以这样简单的思考一下啰:

# 开放实体用户的情况 (Real user):
很多的 FTP 伺服器预设就已经允许实体用户的登入了。不过,需要了解的是,以实体用户做为 FTP 登入者身份时, 系统预设并没有针对实体用户来进行‘限制’的,所以他可以针对整个档案系统进行任何他所具有权限的工作。 因此,如果您的 FTP 使用者没能好好的保护自己的密码而导致被入侵,那么你的整个 Linux 系统将很有可能被毁灭啊! 开放实体用户时的建议如下:

* 由于实体用户本来就可以透过网路连接到主机来进行工作 (例如 SSH),因此实在没有需要特别的开放 FTP 的服务啊! 因为例如 sftp 本来就能达到传输档案的功能啰!

* 如果确定要让实体用户利用 FTP 伺服器的话,那么你可能需要让某些系统帐号无法登入才行,例如 bin, apache 等等。 最简单常用的作法是透过 PAM 模组来处理,譬如 vsftpd 这个软体预设可以透过 /etc/vsftpd.ftpusers 这个档案来设定不想让他具有登入权限的帐号。

# 访客身份 (Guest)
通常会建立 guest 身份的案例当中,多半是由于主机提供了类似‘个人 Web 首页’的功能给一般身份使用者, 那么这些使用者总是需要管理自己的网页空间吧?这个时候将使用者的身份压缩成为 guest ,并且将他的可用目录设定好,即可提供使用者一个方便的使用环境了!且不需要提供他 real user 的权限喔! 常见的建议如下:

* 仅提供需要登入的帐号即可,不需要提供系统上面所有人均可登入的环境啊!

* 当然,我们在主机的设定当中,需要针对不同的访客给他们不一样的‘家目录’, 而这个家目录与使用者的权限设定需要相符合喔!例如要提供 dmtsai 这个人管理他的网页空间,而他的网页空间放置在 /home/dmtsai/www 底下,那我就将 dmtsai 在 FTP 提供的目录仅有 /home/dmtsai/www 而已,比较安全啦!而且也方便使用者啊!

* 针对这样的身份者,需要设定较多的限制,包括:上下传档案数目与硬碟容量的限制、 连线登入的时间限制、许可使用的指令要减少很多很多,例如 chmod 就不要允许他使用等等!

# 匿名登入使用者 (anonymous)
虽然提供匿名登入给网际网路的使用者进入实在不是个好主意,因为每个人都可以去下载你的资料, 万一频宽被吃光光怎么办?但如同前面讲过的,学校单位需要分享全校同学一些软体资源时, FTP 伺服器也是一个很不错的解决方案啊!您说是吧。如果要开放匿名使用者的话,要注意:

* 无论如何,提供匿名登入都是一件相当危险的事情,因为只要您一不小心, 将重要的资料放置到匿名者可以读取的目录中时,那么就很有可能会泄密!与其战战兢兢,不如就不要设定啊~

* 果真要开放匿名登入时,很多限制都要进行的,这包括:(1)允许的工作指令要减低很多, 几乎就不许匿名者使用指令啦、(2)限制档案传输的数量,尽量不要允许‘上传’资料的设定、 (3)限制匿名者同时登入的最大连线数量,可以控制盗连喔!

一般来说,如果你是要放置一些公开的、没有版权纠纷的资料在网路上供人下载的话, 那么一个仅提供匿名登入的 FTP 伺服器,并且对整个网际网路开放是 OK 的啦! 不过,如果你预计要提供的的软体或资料是具有版权的,但是该版权允许你在贵单位内传输的情况下, 那么架设一个‘仅针对内部开放的匿名 FTP 伺服器 (利用防火墙处理) ’也是 OK 的啦!

如果你还想要让使用者反馈的话,那是否要架设一个匿名者可上传的区域呢?鸟哥对这件事情的看法是.... ‘万万不可’啊!如果要让使用者反馈的话,除非该使用者是你信任的,否则不要允许对方上传! 所以此时一个档案系统权限管理严格的 FTP 伺服器,并提供实体用户的登入就有点需求啦! 总之,要依照您的需求来思考是否有需要喔!
大标题的图示vsftpd 伺服器基础设定
终于要来聊一聊这个简单的 vsftpd 啰!vsftpd 的全名是‘Very Secure FTP Daemon ’的意思, 换句话说,vsftpd 最初发展的理念就是在于建构一个以安全为重的 FTP 伺服器呢!我们先来聊一聊为什么 vsftpd 号称‘非常安全’呢?然后再来谈设定吧!

小标题的图示为何使用 vsftpd
为了建构一个安全为主的 FTP 伺服器, vsftpd 针对作业系统的‘程序的权限 (privilege)’概念来设计, 如果你读过基础篇的程序与资源管理章节的话, 你应该会晓得系统上面所执行的程式都会引发一个程序,我们称他为 PID (Process ID), 这个 PID 在系统上面能进行的任务与他拥有的权限有关。也就是说, PID 拥有的权限等级越高, 他能够进行的任务就越多。举例来说,使用 root 身份所触发的 PID 通常拥有可以进行任何工作的权限等级。

不过,万一触发这个 PID 的程式 (program) 有漏洞而导致被网路怪客 (cracker) 所攻击而取得此 PID 使用权时, 那么网路怪客将会取得这个 PID 拥有的权限呐!所以,近来发展的套件都会尽量的将服务取得的 PID 权限降低,使得该服务即使不小心被入侵了,入侵者也无法得到有效的系统管理权限,这样会让我们的系统较为安全的啦。 vsftpd 就是基于这种想法而设计的。

除了 PID 方面的权限之外, vsftpd 也支援 chroot 这个函式的功能,chroot 顾名思义就是‘ change root directory ’的意思,那个 root 指的是‘根目录’而非系统管理员。 他可以将某个特定的目录变成根目录,所以与该目录没有关系的其他目录就不会被误用了。

举例来说,如果你以匿名身份登入我们的 ftp 服务的话,通常你会被限定在 /var/ftp 目录下工作, 而你看到的根目录其实就只是 /var/ftp ,至于系统其他如 /etc, /home, /usr... 等其他目录你就看不到了! 这样一来即使这个 ftp 服务被攻破了,没有关系,入侵者还是仅能在 /var/ftp 里面跑来跑去而已,而无法使用 Linux 的完整功能。自然我们的系统也就会比较安全啦!

sftpd 是基于上面的说明来设计的一个较为安全的 FTP 伺服器软体,他具有底下的特点喔:

* vsftpd 这个服务的启动者身份为一般使用者,所以对于 Linux 系统的使用权限较低,对于 Linux 系统的危害就相对的减低了。此外, vsftpd 亦利用 chroot() 这个函式进行改换根目录的动作,使得系统工具不会被 vsftpd 这支服务所误用;

* 任何需要具有较高执行权限的 vsftpd 指令均以一支特殊的上层程序 (parent process) 所控制 ,该上层程序享有的较高执行权限功能已经被限制的相当的低,并以不影响 Linux 本身的系统为准;

* 绝大部分 ftp 会使用到的额外指令功能 (dir, ls, cd ...) 都已经被整合到 vsftpd 主程式当中了, 因此理论上 vsftpd 不需要使用到额外的系统提供的指令,所以在 chroot 的情况下, vsftpd 不但可以顺利运作,且不需要额外功能对于系统来说也比较安全。

* 所有来自用户端且想要使用这支上层程序所提供的较高执行权限之 vsftpd 指令的需求, 均被视为‘不可信任的要求’来处理,必需要经过相当程度的身份确认后,方可利用该上层程序的功能。 例如 chown(), Login 的要求等等动作;

* 此外,上面提到的上层程序中,依然使用 chroot() 的功能来限制使用者的执行权限。

由于具有这样的特点,所以 vsftpd 会变的比较安全一些咯!底下就开始来谈如何设定吧!

小标题的图示所需要的套件以及套件结构
vsftpd 所需要的套件只有一个,那就是 vsftpd 啊!^_^!如果你的 CentOS 没有安装, 请利用 yum install vsftpd 来安装他吧!套件很小,下载连同安装不需要几秒钟就搞定了! 而事实上整个套件提供的设定档也少的令人高兴!简单易用就是 vsftpd 的特色啊! ^_^! 这些设定资料比较重要的有:

* /etc/vsftpd/vsftpd.conf
严格来说,整个 vsftpd 的设定档就只有这个档案!这个档案的设定是以 bash 的变数设定相同的方式来处理的, 也就是‘参数=设定值’来设定的,注意, 等号两边不能有空白喔!至于详细的 vsftpd.conf 可以使用 ‘ man 5 vsftpd.conf ’来详查。

* /etc/pam.d/vsftpd
这个是 vsftpd 使用 PAM 模组时的相关设定档。主要用来作为身份认证之用,还有一些使用者身份的抵挡功能, 也是透过这个档案来达成的。你可以察看一下该档案:

[root@linux ~]# cat /etc/pam.d/vsftpd
#%PAM-1.0
auth required pam_listfile.so item=user sense=deny
file=/etc/vsftpd.ftpusers onerr=succeed
auth required pam_stack.so service=system-auth
auth required pam_shells.so
account required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth

上面的特殊字体为同一行,那个 file 后面接的档案是‘限制使用者无法使用 vsftpd ’之意, 也就是说,其实你的限制档案不见得要使用系统预设值,也可以在这个档案里面进行修改啦! ^_^

* /etc/vsftpd.ftpusers
与上一个档案有关系,也就是 PAM 模组 (/etc/pam.d/vsftpd_ 所指定的那个无法登入的使用者设定档啊! 这个档案的设定很简单,你只要将‘不想让他登入的帐号’写入这个档案即可。一行一个帐号,看起来像这样:

[root@linux ~]# cat /etc/vsftpd.ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
....底下省略....

瞧见没有?绝大部分的系统帐号都在这个档案内喔,也就是说,系统帐号预设是没有办法使用 vsftpd 的啦! 如果你还想要让某些使用者无法登入,写在这里是最快的!

* /etc/vsftpd.user_list
这个档案是否能够生效与 vsftpd.conf 内的两个参数有关,分别是‘ userlist_enable, userlist_deny ’。 如果说 /etc/vsftpd.ftpusers 是 PAM 模组的抵挡设定项目,那么这个 /etc/vsftpd.user_list 则是 vsftpd 自订的抵挡项目。事实上这个档案与 /etc/vsftpd.ftpusers 几乎一模一样, 在预设的情况下,你可以将不希望可登入 vsftpd 的帐号写入这里。不过这个档案的功能会依据 vsftpd.conf 设定档内的 userlist_deny={YES/NO} 而不同,这得要特别留意喔!

* /etc/vsftpd.chroot_list
这个档案预设是不存在的,所以你必须要手动自行建立。这个档案的主要功能是可以将某些帐号的使用者 chroot 在他们的家目录下!但这个档案要生效与 vsftpd.conf 内的‘ chroot_list_enable, chroot_list_file ’两个参数有关。 如果你想要将某些实体用户限制在他们的家目录下而不许到其他目录去,可以启动这个设定项目喔!

* /usr/sbin/vsftpd
这就是 vsftpd 的主要执行档咯!不要怀疑, vsftpd 只有这一个执行档而已啊!

* /var/ftp/
这个是 vsftpd 的预设匿名者登入的根目录喔!

大致上就只有这几个档案需要注意而已,而且每个档案的设定又都很简单!真是不错啊!

小标题的图示vsftpd.conf 设定值说明
事实上,/etc/vsftpd/vsftpd.conf 本身就是一个挺详细的设定档,且使用‘ man 5 vsftpd.conf ’则可以得到完整的参数说明。 不过我们这里依旧先将 vsftpd.conf 内的常用参数给他写出来,希望对您有帮助:

# 与主机较相关的设定值

* connect_from_port_20=YES (NO)
记得在前一小节提到的主动式连线使用的 FTP 伺服器的埠号吗?这就是 ftp-data 的埠号;

* listen_port=21
vsftpd 使用的命令通道之埠号,如果您想要使用非正规的埠号,在这个设定项目修改吧! 不过你必须要知道,这个设定值仅适合以 stand alone 的方式来启动喔!(对于 super daemon 无效)

* dirmessage_enable=YES (NO)
当使用者进入某个目录时,会显示该目录需要注意的内容,显示的档案预设是 .message ,你可以使用底下的设定项目来修订!

* message_file=.message
当 dirmessage_enable=YES 时,可以设定这个项目来让 vsftpd 寻找该档案来显示讯息!

* listen=YES (NO)
若设定为 YES 表示 vsftpd 是以 standalone 的方式来启动的!

* pasv_enable=YES (NO)
启动被动式连线模式(passive mode),一定要设定为 YES 的啦!

* use_localtime=YES (NO)
是否使用本地时间?vsftpd 预设使用 GMT 时间(格林威治),所以会比台湾晚 8 小时,建议设定为 YES 吧!

* write_enable=YES (NO)
如果你允许使用者上传资料时,就要启动这个设定值;

* connect_timeout=60
单位是秒,在资料连接的主动式连线模式下,我们发出的连接讯号在 60 秒内得不到用户端的回应,则不等待并强制断线咯。

* accept_timeout=60
当使用者以被动式 PASV 来进行资料传输时,如果主机启用 passive port 并等待 client 超过 60 秒而无回应, 那么就给他强制断线!这个设定值与 connect_timeout 类似,不过一个是管理主动连线,一个管理被动连线。

* data_connection_timeout=300
如果伺服器与用户端的资料连线已经成功建立 (不论主动还是被动连线),但是可能由于线路问题导致 300 秒内还是无法顺利的完成资料的传送,那用户端的连线就会被我们的 vsftpd 强制剔除!

* idle_session_timeout=300
如果使用者在 300 秒内都没有命令动作,强制离线!

* max_clients=0
如果 vsftpd 是以 stand alone 方式启动的,那么这个设定项目可以设定同一时间,最多有多少 client 可以同时连上 vsftpd 哩!?

* max_per_ip=0
与上面 max_clients 类似,这里是同一个 IP 同一时间可允许多少连线?

* pasv_max_port=0, pasv_max_port=0
上面两个是与 passive mode 使用的 port number 有关,如果您想要使用 65400 到 65410 这 11 个 port 来进行被动式连线模式的连接,可以这样设定 pasv_max_port=65410 以及 pasv_min_port=65400。 如果是 0 的话,表示随机取用而不限制。

* ftpd_banner=一些文字说明
当使用者连线进入到 vsftpd 时,在 FTP 用户端软体上头会显示的说明文字。不过,这个设定值资料比较少啦! 建议你可以使用底下的设定值来取代这个项目;

* banner_file=/path/file
这个项目可以指定某个纯文字档作为使用者登入 vsftpd 伺服器时所显示的欢迎字眼。

# 与实体用户较相关的设定值

* guest_enable=YES (NO)
若这个值设定为 YES 时,那么任何非 anonymous 登入的帐号,均会被假设成为 guest (访客) 喔! 至于访客在 vsftpd 当中,预设会取得 ftp 这个使用者的相关权限。但可以透过 guest_username 来修改。

* guest_username=ftp
在 guest_enable=YES 时才会生效,指定访客的身份而已。

* local_enable=YES (NO)
这个设定值必须要为 YES 时,在 /etc/passwd 内的帐号才能以实体用户的方式登入我们的 vsftpd 主机喔!

* local_max_rate=0
实体用户的传输速度限制,单位为 bytes/second, 0 为不限制。

* chroot_local_user=YES (NO)
将使用者限制在自己的家目录之内(chroot)!这个设定在 vsftpd 当中预设是 NO,因为有底下两个设定项目的辅助喔! 所以不需要启动他!
* chroot_list_enable=YES (NO)
是否启用将某些实体用户限制在他们的家目录内?预设是 NO ,不过,如果您想要让某些使用者无法离开他们的家目录时, 可以考虑将这个设定为 YES ,并且规划下个设定值

* chroot_list_file=/etc/vsftpd.chroot_list
如果 chroot_list_enable=YES 那么就可以设定这个项目了! 他里面可以规定那一个实体用户会被限制在自己的家目录内而无法离开!(chroot) 一行一个帐号即可!

* userlist_enable=YES (NO)
是否藉助 vsftpd 的抵挡机制来处理某些不受欢迎的帐号,与底下的设定有关;

* userlist_deny=YES (NO)
当 userlist_enable=YES 时才会生效的设定,若此设定值为 YES 时,则当使用者帐号被列入到某个档案时, 在该档案内的使用者将无法登入 vsftpd 伺服器!该档案档名与下列设定项目有关。
* userlist_file=/etc/vsftpd.user_list
若上面 userlist_deny=YES 时,则这个档案就有用处了!在这个档案内的帐号都无法使用 vsftpd 喔!

# 匿名者登入的设定值

* anonymous_enable=YES (NO)
设定为允许 anonymous 登入我们的 vsftpd 主机!预设是 YES ,底下的所有相关设定都需要将这个设定为 anonymous_enable=YES 之后才会生效!

* anon_world_readable_only=YES (NO)
仅允许 anonymous 具有下载可读档案的权限,预设是 YES。

* anon_other_write_enable=YES (NO)
是否允许 anonymous 具有写入的权限?预设是 NO!如果要设定为 YES, 那么开放给 anonymous 写入的目录亦需要调整权限,让 vsftpd 的 PID 拥有者可以写入才行!

* anon_mkdir_write_enable=YES (NO)
是否让 anonymous 具有建立目录的权限?预设值是 NO!如果要设定为 YES, 那么 anony_other_write_enable 必须设定为 YES !

* anon_upload_enable=YES (NO)
是否让 anonymous 具有上传资料的功能,预设是 NO,如果要设定为 YES , 则 anon_other_write_enable=YES 必须设定。

* deny_email_enable=YES (NO)
将某些特殊的 email address 抵挡住,不让那些 anonymous 登入! 如果以 anonymous 登入主机时,不是会要求输入密码吗?密码不是要您 输入您的 email address 吗?如果你很讨厌某些 email address , 就可以使用这个设定来将他取消登入的权限!需与下个设定项目配合:

* banned_email_file=/etc/vsftpd.banned_emails
如果 deny_email_enable=YES 时,可以利用这个设定项目来规定哪个 email address 不可登入我们的 vsftpd 喔!在上面设定的档案内,一行输入一个 email address 即可!

* no_anon_password=YES (NO)
当设定为 YES 时,表示 anonymous 将会略过密码检验步骤,而直接进入 vsftpd 伺服器内喔!所以一般预设都是 NO 的!

* anon_max_rate=0
这个设定值后面接的数值单位为 bytes/秒 ,限制 anonymous 的传输速度,如果是 0 则不限制(由最大频宽所限制),如果您想让 anonymous 仅有 30 KB/s 的速度,可以设定‘anon_max_rate=30000’

* anon_umask=077
限制 anonymous 的权限!如果是 077 则 anonymous 传送过来的档案 权限会是 -rw------- 喔!

# 关于系统安全方面的一些设定值

* ascii_download_enable=YES (NO)
如果设定为 YES ,那么 client 就可以使用 ASCII 格式下载档案。

* ascii_upload_enable=YES (NO)
与上一个设定类似的,只是这个设定针对上传而言!预设是 NO

* one_process_model=YES (NO)
这个设定项目比较危险一点~当设定为 YES 时,表示每个建立的连线 都会拥有一支 process 在负责,可以增加 vsftpd 的效能。不过, 除非您的系统比较安全,而且硬体配备比较高,否则容易耗尽系统资源喔!一般建议设定为 NO 的啦!

* tcp_wrappers=YES (NO)
当然我们都习惯支援 TCP Wrappers 的啦!所以设定为 YES 吧!

* xferlog_enable=YES (NO)
当设定为 YES 时,使用者上传与下载档案都会被纪录起来。记录的档案与下一个设定项目有关:

* xferlog_file=/var/log/vsftpd.log
如果上一个 xferlog_enable=YES 的话,这里就可以设定了!这个是登录档的档名啦!

* xferlog_std_format=YES (NO)
是否设定为 wu ftp 相同的登录档格式?!预设为 NO ,因为登录档会比较容易读! 不过,如果您有使用 wu ftp 登录档的分析软体,这里才需要设定为 YES

* nopriv_user=nobody
我们的 vsftpd 预设以 nobody 作为此一服务执行者的权限。因为 nobody 的权限 相当的低,因此即使被入侵,入侵者仅能取得 nobody 的权限喔!

* pam_service_name=vsftpd
这个是 pam 模组的名称,我们放置在 /etc/pam.d/vsftpd 即是这个咚咚!

上面这些是相当常见的 vsftpd 的设定参数,还有很多参数我没有列出来,您可以使用 man 5 vsftpd.conf 查阅喔!不过,基本上上面这些参数已经够我们设定 vsftpd 啰。

小标题的图示vsftpd 启动的模式
vsftpd 可以拥有两种启动的方式,分别是一直在监听的 stand alone ,一种则是透过 xinetd 这个 super daemon 来管理的方式,两种方式所使用的启动程序不太相同,而我们的 CentOS 则预设是以 stand alone 来启动的。 那什么时候应该选择 stand alone 或者是 super daemon 呢?如果你的 ftp 伺服器是提供给整个网际网路来进行大量下载的任务,例如各大专院校的 FTP 伺服器,那建议你使用 stand alone 的方式, 服务的速度上会比较好。如果仅是提供给内部人员使用的 FTP 伺服器,那使用 super daemon 来管理即可啊。

# 利用系统提供的 script 来启动 vsftpd
其实 CentOS 不用作任何设定就能够启动 vsftpd 啰!是这样启动的啦:

[root@linux ~]# /etc/init.d/vsftpd start
[root@linux ~]# netstat -tulnp| grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 11689/vsftpd
# 看到啰,是由 vsftpd 所启动的呢!

# 自行设定以 super daemon 来启动
如果你的 FTP 是很少被使用的,那么利用 super daemon 来管理不失为一个好主意。 不过若你想要使用 super daemon 管理的话,那就得要自行修改一下设定档了。其实也不难啦,你应该要这样处理的:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 找到底下这一行:大约在 109 行左右啦!
listen=YES
# 将他改成这样啊:
listen=NO

接下来修改一下 super daemon 的设定档,底下这个档案你必须要自行建立的,原本是不存在的喔:

[root@linux ~]# vi /etc/xinetd.d/vsftpd
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
disable = no
}

然后尝试启动看看呢:

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

有趣吧!两者启动的方式可不一样啊!管理的方式就会差很多的呦! 不管你要使用哪种启动的方式,切记不要两者同时启动,否则会发生错误的! 你应该使用 chkconfig --list 检查一下这两种启动的方式,然后依据你的需求来决定用哪一种方式启动。 鸟哥底下的设定都会以 stand alone 这个 CentOS 预设的启动模式来处理,所以赶紧将刚刚的动作给他改回来喔!

小标题的图示CentOS 的 vsftpd 预设值
在 CentOS 的预设值当中,vsftpd 是同时开放实体用户与匿名使用者的,CentOS 的预设值如下:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 底下鸟哥仅列出有设定的项目,若无设定时,请以您系统的 man 5 vsftpd.conf
# 结果去搜寻预设值即可喔!
# 1. 与匿名者有关的资讯:
anonymous_enable=YES

# 2. 与实体用户有关的设定
local_enable=YES
write_enable=YES
local_umask=022
userlist_enable=YES

# 3. 与主机有关的设定
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
pam_service_name=vsftpd
listen=YES
tcp_wrappers=YES

上面各项设定值请自行参考前一小节 vsftpd.conf 设定项目的详细说明吧。 而通过这样的设定值咱们的 vsftpd 可以达到如下的功能:

* 你可以使用 anonymous 这个匿名帐号或其他实体帐号 (/etc/passwd) 登入;
* anonymous 的家目录在 /var/ftp ,且无上传权限,亦已经被 chroot 了;
* 实体用户的家目录参考 /etc/passwd ,并没有被 chroot ,可前往任何有权限可进入的目录中;
* 任何于 /etc/vsftpd.ftpusers 内存在的帐号均无法使用 vsftpd ;
* 可利用 /etc/hosts.{allow|deny} 来作为基础防火墙;
* 当用户端有任何上传/下载资讯时,该资讯会被纪录到 /var/log/vsftpd.log 中;
* 主动式连线的埠口为 port 20;
* 使用格林威治时间 (GMT)。

所以当你启动 vsftpd 后,你的实体用户就能够直接利用 vsftpd 这个服务来传输他自己的资料了。 不过比较大的问题是,因为 vsftpd 预设使用 GMT 时间,因为你在用户端使用 ftp 软体连接到 FTP 伺服器时,会发现每个档案的时间都慢了八小时了!真是讨厌啊! 所以建议你加设一个参数值,就是‘ use_localtime=YES ’啰!

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 在这个档案当中加入这一句即可
use_localtime=YES
.....底下省略.....

[root@linux ~]# /etc/init.d/vsftpd restart

如此一来你的 FTP 伺服器不但可以提供匿名帐号来下载 /var/ftp 的资料,如果使用实体帐号来登入的话, 就能够进入到该使用者的家目录底下去了!真是很简单方便的一个设定啊!且使用本地端时间呢! ^_^

小标题的图示仅有实体用户登入的设定
虽然在 CentOS 的预设情况当中实体用户已经可以使用 FTP 的服务了,不过我们可能还需要一些额外的功能来限制实体用户, 举例来说,限制使用者无法离开家目录 (chroot) 、限制下载速率、限制使用者上传档案时的权限 (mask)等等。 底下我们先列出一些希望达到的功能,然后再继续进行额外功能的处理:

* 希望使用台湾本地时间取代 GMT 时间;
* 使用者登入时显示一些欢迎讯息的资讯;
* 系统帐号不可登入主机 (亦即 UID 小于 500 以下的帐号);
* 一般实体用户可以进行上传、下载、建立目录及修改档案等动作;
* 使用者新增的档案、目录之 umask 希望设定为 002;
* 其他主机设定值保留预设值即可。

你可以自行处理 vsftpd.conf 这个档案,以下则是一个范例。注意,如果你的 vsftpd.conf 没有相关设定值, 请自行补上吧!OK!让我们开始一步一步来依序处理先:

1. 先建立设定档,这个设定档已经包含了主要设定值:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 1. 与匿名者相关的资讯,在这个案例中将匿名登入取消:
anonymous_enable=NO

# 2. 与实体用户相关的资讯
# 可写入,且新增目录、档案权限为 775,因为 umask 为 002 嘛!
local_enable=YES
write_enable=YES
local_umask=002
# 设定抵挡某些使用者登入的项目设定值!注意,底下的档案必须存在!
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd.user_list

# 3. 与主机有关的设定
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
pam_service_name=vsftpd
listen=YES
tcp_wrappers=YES
banner_file=/etc/vsftpd/welcome.txt

[root@linux ~]# /etc/init.d/vsftpd restart


2. 建立欢迎讯息:

当我们想让登入者可查阅咱们系统管理员所下达的‘公告’事项时,可以使用这个设定!那就是 banner_file=/etc/vsftpd/welcome.txt 这个参数的用途了!我们可以编辑这个档案即可。 好了,开始来建立欢迎画面吧!

[root@linux ~]# vi /etc/vsftpd/welcome.txt
欢迎光临本小站,本站提供 FTP 的相关服务!
主要的服务是针对本机实体用户提供的,
若有任何问题,请与鸟哥联络!


3. 建立限制系统帐号登入的档案

再来是针对系统帐号来给予抵挡的机制,其实有两个档案啦,一个是 PAM 模组管的,一个是 vsftpd 主动提供的, 在预设的情况下这两个档案分别是:

* /etc/vsftpd.ftpusers:就是 /etc/pam.d/vsftpd 这个档案的设定所影响的;
* /etc/vsftpd.user_list:由 vsftpd.conf 的 userlist_file 所设定。

这两个档案的内容是一样的哩~并且这两个档案必须要存在才行。请你参考你的 /etc/passwd 设定档, 然后将 UID 小于 500 的帐号名称给他同时写到这两个档案内吧!一行一个帐号!

[root@linux ~]# vi /etc/vsftpd.user_list
root
bin
....底下省略....


4. 测试结果:

你可以使用图形介面的 FTP 用户端软体来处理,也可以透过 Linux 本身提供的 ftp 用户端功能哩! 关于 ftp 指令我们已经在之前的常用网路指令谈过了, 你可以自行前往参考。这里直接测试一下吧:

1. 测试使用已知使用者登入,例如 dmtsai 这个实体用户:
[root@linux ~]# ftp localhost
Connected to localhost (127.0.0.1).
220-欢迎光临本小站,本站提供 FTP 的相关服务! <==刚刚建立的欢迎讯息
220-主要的服务是针对本机实体用户提供的,
220-若有任何问题,请与鸟哥联络!
220
Name (localhost:root): dmtsai <==登入者帐号!
331 Please specify the password.
Password: <==输入密码,荧幕不会有任何讯息的显示
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.

在以上面的方式测试完毕后,你可以在登入者帐号处分别填写 (1)root (2)anonymous 来尝试登入看看! 如果不能登入的话,那就是设定 OK 的啦!^_^

# chroot 的使用
假设你的系统当中有许多帐号,但是 dmtsai 以及 bird1 这两个帐号是开放给一般客户的, 你不想让这两个帐号可以离开他的家目录,这个时候就得使用 chroot 的设定了。设定的方式很简单, 你先要修改 vsftpd.conf ,增加这几个项目:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 增加是否设定针对某些使用者来 chroot 的相关设定呦!
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

[root@linux ~]# /etc/init.d/vsftpd restart

然后建立要被 chroot 的使用者档案:

[root@linux ~]# vi /etc/vsftpd.chroot_list
dmtsai
bird1

不要怀疑!这样就能够将这两个使用者限制在家目录内了,有够简单吧!

# 更严格的 chroot 环境
上面提到的是预设实体用户没有 chroot 而特定人士被 chroot 的环境,那如果我想要的是: 所有使用者预设为 chroot ,但某些使用者可不受限制的环境呢? 那你就得要这样做了:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 预设所有实体用户被 chroot 而开放某些人可完整存取 (不 chroot) 的情况
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

[root@linux ~]# /etc/init.d/vsftpd restart

由于多了 chroot_list_enable=YES 这个参数,因此写入 /etc/vsftpd.chroot_list 内的使用者反而是被认为可以不受 chroot 的帐号!假设系统中的 nikky 这个使用者为被信任的,所以你要这样:

[root@linux ~]# vi /etc/vsftpd.chroot_list
nikky

则未来所有新增的用户都是预设被 chroot 的,除非该用户被写入 /etc/vsftpd.chroot_list 才能够不会被 chroot 呢!这不是比较严格吗?

# 限制下载频宽
有的时候你可能不希望频宽被使用者上传/下载所耗尽,而影响咱们伺服器的其他工作之运作, 所以限制使用者传输频宽有时也是需要的!假设‘我要限制所有使用者的传输频宽最大可达 100KBytes/秒’, 你可以这样做即可:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 增加底下这一个参数即可:
local_max_rate=100000

[root@linux ~]# /etc/init.d/vsftpd restart

上述的单位是 Bytes/秒,所以你可以依据你自己的网路环境来限制你的频宽!这样就给他限制好啰!有够容易吧!^_^

# 限制最大上线人数与同一 IP 的来源数
如果你有限制最大使用频宽的话,那么你可能还需要限制最大线上人数才行!举例来说, 你希望最多只有 10 个人同时使用你的 FTP 的话,并且每个 IP 来源最多只能建立一条 FTP 的连线时, 那你可以这样做:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 增加底下的这两个参数:
max_clients=10
max_per_ip=1

[root@linux ~]# /etc/init.d/vsftpd restart

这样就搞定了!让你的 FTP 不会人满为患呐!

# 建立严格的可使用 FTP 的帐号列表
在上述的设定当中,我们将‘不许使用 FTP 的帐号写入 /etc/vsftpd.user_list 档案中’,所以没有写入 /etc/vsftpd.user_list 当中的使用者就能够使用 FTP 了!如此一来,未来新增的使用者预设都能够使用 FTP 的服务。 如果换个角度来思考,若我想只让某些人可以使用 FTP 而已,亦即是新增的使用者预设不可使用 FTP 这个服务的话那么应该如何作呢?你需要修改设定档成为这样:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 这几个参数必须要修改成这样:
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.user_list

[root@linux ~]# /etc/init.d/vsftpd restart

则此时‘写入 /etc/vsftpd.user_list 变成可以使用 FTP 的帐号’了! 所以未来新增的使用者如果要能够使用 FTP 的话,就必须要写入 /etc/vsftpd.user_list 才行! 使用这个机制请特别小心,否则容易搞混掉~

透过这几个简单的设定值,相信 vsftpd 已经可以符合大部分合法 FTP 网站的需求啰! 更多详细的用法则请参考 man 5 vsftpd.conf 吧!

例题:
假设你因为某些特殊需求,所以必须要开放 root 使用 FTP 传输档案,那么你应该要如何处理?
答:

由于系统帐号无法使用 FTP 是因为 PAM 模组与 vsftpd 的内建功能所致,亦即是 /etc/vsftpd.ftpusers 及 /etc/vsftpd.user_list 这两个档案的影响。所以你只要进入这两个档案,并且将 root 那一行注解掉, 那 root 就可以使用 vsftpd这个 FTP 服务了。 不过,不建议如此作喔!


小标题的图示仅有匿名登入的相关设定
虽然你可以同时开启实体用户与匿名用户,不过建议你主机还是依据需求,针对单一种身份来设定吧! 底下我们将针对匿名用户,且不开放实体用户。一般来说,这种设定是给类似大专院校的 FTP 伺服器来使用的哩!

* 使用台湾本地的时间,而非 GMT 时间;
* 提供欢迎讯息,说明可提供下载的资讯;
* 仅开放 anonymous 的登入,且不需要输入密码;
* 档案传输的速限为 30 Kbytes/second;
* 资料连接的过程 (不是命令通道!) 只要超过 60 秒没有回应,就强制 Client 断线!
* 只要 anonymous 超过十分钟没有动作,就予以断线;
* 最大同时上线人数限制为 50 人,且同一 IP 来源最大连线数量为 5 人;

OK!那如何设定呢?首先我们必须要知道的是匿名使用者的目录在哪里? 事实上匿名者预设登入的根目录是以 ftp 这个使用者的家目录为主,所以你可以使用‘ finger ftp ’来查阅。 咱们的 CentOS 预设的匿名者根目录在 /var/ftp/ 中。且匿名登入者在使用 FTP 服务时,他预设可以使用‘ ftp ’ 这个使用者身份的权限喔,只是被 chroot 到 /var/ftp/ 目录中就是了。

因为匿名者只会在 /var/ftp/ 当中浏览,所以你必须将要提供给使用者下载的资料通通给放置到 /var/ftp/ 去。 假设你已经放置了 linux 的相关目录以及 gnu 的相关软体到该目录中了,那我们可以这样做个假设:

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

然后将 vsftpd.conf 的资料清空,重新这样处理他吧:

1. 建立 vsftpd.conf 的设定资料

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 将这个档案改成这样:
# 1. 与匿名者相关的资讯:
anonymous_enable=YES
# 不必提供密码啦!可直接登入哩!
no_anon_password=YES
# 限制流速啦!
anon_max_rate=30000
# 与连线时间有关的设定项目
data_connection_timeout=60
idle_session_timeout=600
# 限制连线人数
max_clients=50
max_per_ip=5

# 2. 与实体用户相关的资讯,本案例中为关闭他的情况!
local_enable=NO

# 3. 与主机有关的设定
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
pam_service_name=vsftpd
listen=YES
tcp_wrappers=YES
banner_file=/etc/vsftpd/anon_welcome.txt

[root@linux ~]# /etc/init.d/vsftpd restart


2. 建立欢迎画面与下载提示讯息

各位亲爱的观众朋友!要注意~在这个案例当中,我们将欢迎讯息设定在 /etc/vsftpd/anon_welcome.txt 这个档案中, 至于这个档案的内容你可以这样写:

[root@linux ~]# vi /etc/vsftpd/anon_welcome.txt
欢迎光临本站所提供的 FTP 服务!
本站主要提供 Linux 作业系统相关档案以及 GNU 自由软体喔!
有问题请与站长联络!谢谢大家!
主要的目录为:

linux 提供 Linux 作业系统相关软体
gnu 提供 GNU 的自由软体

看到啰!主要写的资料都是针对一些公告事项就是了!

3. 测试

同样的,我们使用 ftp 这个软体来给他测试一下吧!

[root@linux ~]# ftp localhost
Connected to localhost (127.0.0.1).
220-欢迎光临本站所提供的 FTP 服务! <==同样的,一些欢迎讯息
220-本站主要提供 Linux 作业系统相关档案以及 GNU 自由软体喔!
220-有问题请与站长联络!谢谢大家!
220-主要的目录为:
220-
220-linux 提供 Linux 作业系统相关软体
220-gnu 提供 GNU 的自由软体
220
Name (localhost:root): anonymous <==一定得是这个匿名帐号
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (127,0,0,1,94,56)
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Dec 18 17:37 gnu
drwxr-xr-x 2 0 0 4096 Dec 18 17:37 linux
drwxr-xr-x 2 0 0 4096 Aug 13 03:25 pub
226 Directory send OK.
ftp> bye
221 Goodbye.

看到否?这次可就不需要输入任何密码了,因为是匿名登入嘛!而且,如果你输入任何其他的帐号, 那么 vsftpd 会立刻回应断线的状态喔!OK 的啦!

# 建立上传/下载目录
在上列的资料当中,实际上匿名使用者仅可进行下载的动作而已。如果你还想让匿名者可以上传档案或者是建立目录的话, 那你还需要额外增加一些设定才行:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 新增底下这几行啊!
write_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES

[root@linux ~]# /etc/init.d/vsftpd restart

如果你设定上面四项参数,则会允许匿名者拥有完整的建立、删除、修改档案与目录的权限。 不过,实际要生效还需要 Linux 的档案系统权限正确才行! 我们知道匿名者取得的身份是 ftp ,所以如果想让匿名者上传资料到 /var/ftp/upload 中, 则需要这样做:

[root@linux ~]# mkdir /var/ftp/upload
[root@linux ~]# chown ftp /var/ftp/upload

然后你以匿名者身份登入后,就会发现匿名者的根目录多了一个 /upload 的目录存在了, 并且你可以在该目录中上传档案/目录喔! 如此一来系统的权限大开!很要命喔!所以,请仔细的控制好你的上传目录才行!

# 建立仅可上传目录
一般来说,使用者上传的资料在管理员尚未查阅过是否合乎版权等相关事宜前,是不应该让其他人下载的! 然而前一小节的设定当中,使用者上传的资料是可以被其他人所浏览与下载的! 如此一来实在是很危险!所以如果你要设定 /var/ftp/upload 仅能上传不能被下载时, 那么被上传的资料的权限就得要被修改一下才行!请将前一小节所设定的四个参数简化成为:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 将这几行给他改一改先!
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
chown_uploads=YES
chown_username=root

[root@linux ~]# /etc/init.d/vsftpd restart

当然啦,那个 /var/ftp/upload 还是需要可以被 ftp 这个使用者写入才行! 如此一来被上传的档案将会被修改档案拥有者成为 root 这个使用者, 而 ftp (匿名者取得的身份) 是无法读取 root 的资料的,所以也就无法被下载啰! ^_^

# 被动式连线埠口的限制
FTP 的连线分为主动式与被动式,主动式连线比较好处理,因为都是透过伺服器的 port 20 对外主动连线, 所以防火墙的处理比较简单。被动式连线就比较麻烦~因为预设 FTP 伺服器会随机取几个没有在使用当中的埠口来建立被动式连线,那防火墙的设定就麻烦啦!

没关系,我们可以透过指定几个固定范围内的埠口来作为 FTP 的被动式资料连接之用即可, 这样我们就能够预先知道 FTP 资料连结的埠口啦!举例来说,我们假设被动式连接的埠口为 65400 到 65410 这几个埠口时,可以这样设定:

[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 增加底下这几行即可啊!
pasv_min_port=65400
pasv_max_port=65410

[root@linux ~]# /etc/init.d/vsftpd restart

匿名使用者的设定大致上这样就能符合你的需求啰!自己看着办吧! ^_^
大标题的图示用户端的 FTP 连线软体
用户端的连线软体主要有文字介面的 ftp 及 lftp 这两支指令,详细的使用方式请参考常用网路指令章节的说明。至于 Linux 底下的图形介面软体,可以参考 gftp 这支程式喔!图形介面的啦!很简单啊!

上述的软体都是自由软体啊,那么 Windows 作业系统有没有自由软体啊?有的, 你可以使用 filezilla 这个好东西!这个玩意儿的详细说明与下载点可以在底下的连结找到:

* 说明网站:http://filezilla.sourceforge.net/
* 下载网站:http://sourceforge.net/project/showfiles.php?group_id=21558

目前 (2006/12) 最新的稳定版本是 2.2.29 版,所以底下鸟哥就以这个版本来跟大家说明。 为什么要选择 Filezilla 呢?除了他是自由软体之外,这家伙竟然可以连结到 SSH 的 sftp 呢! 真是很不错的一个家伙啊!^_^!另外要注意的是,底下鸟哥是以 Windows 版本来说明的, 不要拿来在 X server 上面安装喔! ^_^

因为这个程式是给 Windows 安装用的,所以安装的过程就是.....(下一步)^n 就好了! 并且这个程式支援多国语系,所以你可以选择繁体中文呢!实在是很棒! 安装完毕之后,请你执行他,就会出现如下的画面了:

Filezilla 的操作方式
图四、Filezilla 的操作方式

图四的 1, 2, 3, 4, 5 分别代表的资料是:

1. 代表 FTP 伺服器的输出资讯,例如欢迎讯息等资讯;
2. 代表本机的档案,与 3 有关;
3. 代表本机的磁碟机所在处,与 2 有关;
4. 代表远端 FTP 伺服器的目录与档案;
5. 代表传输时的伫列资讯

而另外 a, b, c 则代表的是:

1. 站台管理员,你可以将一些常用的 FTP 伺服器的 IP 与使用者资讯记录在此;
2. 更新,如果你的资料有更新,可使用这个按钮来同步 filezilla 的荧幕显示;
3. 位址、使用者、密码与连接埠这四个玩意儿可以即时连线,不记录资讯。

好,接下来我们连接到 FTP 伺服器上面去,所以你可按下图四的 a 部分,会出现如下画面:

Filezilla 的操作方式
图五、Filezilla 的操作方式

上图五的箭头与相关的内容是这样的:

1. 先按下‘新站台’的按钮,然后在箭头 2 的地方就会出现可输入的方框;
2. 在该方框当中填写一个你容易记录的名字,随便填写也没有关系的;
3. 在这个方框当中填写主机的 IP 就好了,连接埠如果不是标准的 port 21 ,请填写其他埠口。
4. 这个地方可以挑选不同的连线机制,包括几个常见的机制为:
* 标准 FTP
* FTP + SSL/TLS 加密机制
* FTP + SSL 加密机制
* SFTP (透过 SSH)
* FTP + TLS 加密机制
如果你预计要利用 filezilla 连接到 sftp 的话,这个地方可以挑选 sftp 喔!不然的话就用 FTP 即可;
5. 在这里选择匿名登入或者是一般登入,所谓一般登入即是利用实体帐号来登入;
6. 在这里如果使用一般登入时,则你可以填写使用者及密码栏位,否则就会主动以 anonymous 来匿名登入呢!

基本上这样设定完就能够连上主机了,不过,如果你还想要更详细的规范资料连接的方式 (主动式与被动式) 以及其他资料时, 可以按下图五的‘进阶设定’按钮,就会出现如下画面了:

Filezilla 的操作方式
图六、Filezilla 的操作方式

在这个画面当中你可以选择是否使用被动式传输机制,还可以调整时区的显示呢! 如果 FTP 伺服器的时间设定错误,导致出现 8 小时的误差时 (台北时间与 GMT 时间),就能够利用这个设定项目来调整了! 此外,也能够进行语系的调整,呵呵!绝大部分的 FTP 连线项目都考虑到了,这样就 OK 啦!然后按下图六的确定, 并到图五画面当中按下‘连线’后,就能够得到如下的画面了:

Filezilla 的操作方式
图七、Filezilla 的操作方式

更多的用法就请您自行研究啰!

# 利用浏览器功能
我们在 Apache 这个 WWW 伺服器的章节当中曾经谈过浏览器所支援的协定,其中一个就是 ftp 这个协定啰! 这个协定的处理方式可以在网址列的地方这样输入的:

* ftp://username@your_ip

要记得,如果你没有输入那个 username@ 的字样时,系统预设会以匿名登入来处理这次的连线。因此如果你想要使用实体用户连线时, 就在在 IP 或主机名称之前填写你的帐号。举例来说,鸟哥的主机 (192.168.1.254) 若有 dmtsai 这个使用者, 那我启动浏览器后,可以这样做:

* ftp://dmtsai@192.168.1.254

然后在出现的对话视窗当中输入 dmtsai 的密码,就能够使用浏览器来管理我在 FTP 伺服器内的档案系统啰! 是否很容易啊! ^_^
大标题的图示其他 FTP 伺服器相关设定
除了基础设定之外,我们针对 FTP 还有哪些需要考虑的地方呢?底下就来谈一谈:

小标题的图示防火墙设定
防火墙设定有什么难的?将防火墙那一章里面的 script 拿出来, 加入底下这一段在内:

iptables -A INPUT -p TCP -i $EXTIF --dport 21 -j ACCEPT

这样就好了吗?当然不是啦!要记得我们还可能会有被动式连线的状态啊,所以某些特殊情况底下, 或许你还需要启动被动式连线的监听的埠口哩!以上面我们谈过的 port 65400 ~ 65410 这几个当作范例好了, 你应该还需要加入这一段呢:

iptables -A INPUT -p TCP -i $EXTIF --dport 65400:65410 -j ACCEPT

另外,如果你想要使用 tcp wrappers 的方式来处理 FTP 的连线时,例如仅允许内部 (192.168.1.0/24) 来连线,那应该可以这样做:

[root@linux ~]# vi /etc/hosts.allow
vsftpd: 192.168.1.0/255.255.255.0

[root@linux ~]# vi /etc/hosts.deny
vsftpd: ALL

小标题的图示Super daemon 的额外管理项目
关于使用 xinetd 这个 super daemon 来管理服务的方法还记得吧? 要记得基础篇谈到的认识系统服务喔! 如果忘记的话,也要记得使用‘ man xinetd.conf ’这个好用的查询功能呐!

我们知道 stand alone 的启动方法可以透过 max_clients 及 max_per_ip 这两个参数来处理同时上线的最大人数。 但是如果是 super dae


页首
 用户资料  
 
3 楼 
 文章标题 : Re: vsftpd 的详细配置方法(转)(版主请给加精)
帖子发表于 : 2011-11-01 14:07 

注册: 2011-10-26 18:26
帖子: 5
送出感谢: 0 次
接收感谢: 0 次
:em11 :em11 :em11 好帖! 讲的真详细!


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 3 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译