兼顧安全性與使用需求
全方位的檔案伺服器—Pure-FTPd

2009-04-29
在網路伺服器的架設需求上,FTP一直不像網頁伺服器那麼受人重視。畢竟網頁介面可以直接與使用者互動,在操作上比較吸引人。但這並不代表FTP伺服器的架設可以輕率進行,如果沒有選擇聲譽良好的FTP伺服器軟體,架設FTP之後,多半便會面臨許多網路安全性的問題。
長久以來,大多數系統管理員都會選擇ProFTPd或vsftpd作為Linux、UNIX作業系統上的FTP伺服器架設軟體,但這兩套FTP伺服器軟體或多或少都有缺點,例如ProFTPd的功能雖然相當強大,但架設時使用者必須隨時參考設定文件,才能將設定檔修改到足以滿足使用需求的地步。

ProFTPd的說明文件相當完善是它的優點,但換個角度來說,也是它的缺點。因為設定文件多,表示系統參數相當繁雜,不容易在第一時間找到自己所需要的設定選項,以決定伺服器的運作模式。有這類困擾的FTP伺服器管理員,或許可以考慮改用Pure-FTPd這一套FTP伺服器架設軟體來解決相關的問題。

Pure-FTPd是一套完全符合FTP標準且反應速度相當快的FTP伺服器架設軟體,本身是從Troll-FTPd這套FTP伺服器軟體所衍生的下一代產品。由於運作穩定加上設定相當方便,所以在網路上也有不少提供FTP服務的網站採用此軟體來架設FTP伺服器。

目前Pure-FTPd已經成功地移植到許多作業系統平台上,例如Linux、FreeBSD、NetBSD、OpenBSD、Solaris、AIX與HP-UX等等。至於Windows,雖然可以透過Cygwin的支援,成功編譯與執行Pure-FTPd,但因為這樣的做法並不是Pure-FTPd原先的設計構想,所以並不保證所有的功能都能在Windows平台下執行。

Pure-FTPd也是一套相當重視系統安全性問題的軟體,截至目前為止,並沒有任何關於軟體的弱點被發現。而為了避免初次安裝Pure-FTPd的使用者,因為不諳設定方式而產生意料之外的問題,Pure-FTPd本身在安裝後所採用的預設執行模式,都會採用較為安全的運作狀態,以免系統在尚未調整至最佳狀態之前,便因為設定不夠周全而遭人入侵。

Pure-FTPd主要特色

PureFTPD在設計上具有許多特色,以下將從編譯選項、安全機制、執行模式、匿名伺服器、標題與登入訊息、上下傳比例、頻寬限制、虛擬主機、虛擬使用者、虛擬配額、使用狀況查詢等等各個面向進行介紹。

編譯選項

在實際使用Pure-FTPd,之前必須先了解,Pure-FTPd雖然提供許多功能讓使用者自行在執行階段決定是否使用,但這些功能並不一定被最後編譯出來的執行檔支援。這是因為Pure-FTPd可以在編譯前先指定參數決定是否啟用特定功能,以便讓使用者在編譯階段便直接關閉不需要使用的功能,減少執行檔所佔用的空間並加快處理速度。

如果需要伺服器顯示訊息時改用非英文訊息,也可以在編譯時加上「--with-language」選項,決定伺服器所產生的訊息要採用何種語言。

安全機制

Pure-FTPd本身提供了一些機制,以避免或降低系統產生安全性問題。例如chroot功能可以限制使用者只能在自己的目錄下活動,無法進入其他使用者的目錄甚至是系統目錄。

如果沒有這樣的設計,任何人只要擁有系統上任何一個可以登入FTP伺服器的帳號,即可進入系統目錄中取得重要的設定檔或資料,下載後再進行研究與破解。如此一來,即使系統在其他方面的防護措施做得再好,也無法避免系統遭人攻陷的命運。

Pure-FTPd的chroot功能有兩種設定方式,一種是所有人都只能存取自己的目錄而無法切換至其他系統目錄,另一種是只針對特定群組設定chroot功能。若針對所有使用者啟用chroot功能,則無論登入的帳號與所屬群組為何,一律只能在自己的目錄中活動。針對群組所設定的chroot,則該群組的人將只能在自己的目錄內活動,而其他使用者仍然可以切換至系統目錄。

如果登入的使用者是root,則上述兩種chroot功能都會自動停止套用,因為root本來便設計成可以在任何目錄中存取檔案。只是為了系統安全起見,最好將root列入禁止使用FTP方式登入的帳號列表中,以免發生問題。

如果這兩種chroot模式都無法滿足使用上的需求,可以改用另一種設定方式——針對單一使用者進行chroot設定。假設系統上有名為「user1」的使用者,在「/etc/passwd」檔案中原先的設定是:

user1:x:501:100:User1:/home/user1:/bin/bash

現在,在此使用者的家目錄設定後方加上「./」:

user1:x:501:100:User1:/home/user1/./:/bin/bash

這麼一來,系統上所有需要參考家目錄設定值的軟體,並不會因為這樣的修改而產生問題。但對Pure-FTPd來說,多加了這樣的設定表示要限制此使用者的存取範圍。所以,當user1以FTP方式登入系統時,看到的根目錄就會是自己的家目錄,而且無法切換到其他目錄之下。

除了chroot功能可以避免系統安全性問題之外,Pure-FTPd也針對俗稱為warez的行為進行限制。warez指的是一些地下組織為了散佈盜版軟體,會以程式掃描網路上的FTP主機。如果偵測到FTP主機開放上傳功能,便會利用這部主機的磁碟空間擺放一些非法檔案。

Pure-FTPd在這方面的設計理念相當簡單,匿名使用者上傳的檔案,如果沒有經過系統管理員檢查並變更檔案擁有者或群組,便不能被任何人下載。如此一來,即使上傳目錄被人利用而擺放了非法檔案,也會因為禁止下載而無法達到散佈檔案的目的,有效阻止warez對FTP伺服器的非法使用。

執行模式

Pure-FTPd本身可以獨立運作,也可以在超級伺服器(即Super-Server,如inetd、xinetd等服務管理程式)的管理下進行運作。要特別注意的是,若在編譯Pure-FTPd的時候使用「--without-standalone」參數,Pure-FTPd將只能在超級伺服器的管理下執行。

獨立模式下執行Pure-FTPd非常簡單,直接執行「/usr/local/sbin/pure-ftpd &」(或「/usr/sbin/pure-ftpd &」,視Pure-FTPd的安裝路徑而定)即可讓Pure-FTPd在背景運作。

要注意的是,此時Pure-FTPd是以預設模式執行,如果要修改預設執行模式,則必須加上其他參數指定Pure-FTPd的運作模式。例如,「/usr/local/sbin/pure-ftpd -S 50 &」即表示讓Pure-FTPd監聽Port 50,而非FTP預設的Port 22。

以超級伺服器執行Pure-FTPd,需要修改超級伺服器的設定檔,並將Pure-FTPd的路徑與執行檔新增至設定檔中。如果希望以自訂參數的方式執行Pure-FTPd,也可以在執行檔名稱後方直接加入參數與設定值。設定檔修改完成並存檔後,務必重新啟動超級伺服器,以便讓設定檔的變更生效。

匿名伺服器

FTP伺服器除了提供系統使用者一個傳輸檔案的管道之外,另一個重要的用途是提供匿名使用者下載檔案的管道。無論是公司的文宣資料,或是驅動程式與應用軟體的更新,都可以利用匿名FTP伺服器讓使用者自行下載所需要的檔案。

Pure-FTPd當然也支援匿名伺服器的功能,但在設定上與其他FTP伺服器有些不同。如果系統上有名為「ftp」的使用者,且該使用者的家目錄可以被所有人存取,Pure-FTPd便會開啟匿名登入功能。

必須注意的是,因為Pure-FTPd是透過檔案擁有者來判斷該檔案可否被下載,所有屬於「ftp」帳號的檔案都不能被使用者下載(為了避免warez攻擊問題),所以公用下載目錄或檔案的所有者應設定為非「ftp」的使用者,且只有開放上傳的目錄才開放寫入權限,以提供使用者上傳檔案之用。

標題與登入訊息

如果在「ftp」使用者帳號的家目錄中(或是虛擬主機下的根目錄)有名為「.banner」的檔案存在,則在FTP客戶端程式連接至伺服器時,Pure-FTPd將會傳送此檔案的內容至客戶端。此功能即為標題功能,可以將主機本身希望傳送給使用者知道的訊息放置於此,也可以使用ASCII文字所製作的圖形。但標題檔有檔案大小限制,最多不能超過4000Bytes。如果標題檔超過這個大小,則此檔案的內容將不會顯示。

傳統FTP伺服器所支援的訊息檔「.message」,Pure-FTPd也可以支援,其用途主要是放置在各個目錄之中,當使用者切換至此目錄時才會顯示訊息檔的內容。通常訊息檔是作為提醒使用者之用,例如告知此目錄中最新版本的檔案為何。

如果覺得一成不變的訊息有些無聊,或許也可以嘗試Pure-FTPd所提供的幸運餅乾功能。依照標準的「fortune」格式在系統上準備好訊息文字檔,當使用者登入FTP伺服器時,Pure-FTPd便會隨機挑選此文字檔的其中一則訊息,並將此訊息傳送至使用者端。

▲Pure-FTPd支援標題檔與訊息檔二種檔案,以傳送需要使用者注意的訊息。

上下傳比例

如果希望使用者在下載檔案之前可以先上傳一些新檔案至主機端,即可利用上下傳比例的設定功能。這樣的功能通常只會在以檔案交換為主的FTP主機上啟用,對於一般商業應用場合而言並不實用。作者本身並不喜歡這樣的限制功能,但為了讓Pure-FTPd可以滿足所有的使用需求,最後還是決定加入此功能的支援。

上下傳比例可以只針對匿名使用者進行限制,也可以要求所有使用者都遵循此設定。但root帳號不受此設定項目的限制。

頻寬限制

為了確保FTP傳輸過程不會佔用過多的網路頻寬造成問題,Pure-FTPd也提供頻寬限制功能,讓使用者決定上下傳檔案時,系統最大可允許的傳輸速度為何。此功能的設定相當簡單,也提供多種模式供使用者自行決定採用何種的方式。

最簡單的設定方式是,限制所有人的上下傳頻寬,且上下傳的最大速度都一樣。此種設定模式可以在執行Pure-FTPd時以「-T」參數指定,或是在設定檔中修改「UserRatio」的設定值。

如果希望限制匿名使用者的傳輸速度,但不影響到一般使用者,則以「-t」參數進行設定,或是修改設定檔中的「AnonymousRatio」設定值。

上下傳的速度限制不一定要一樣,可以依照實際需求,針對上傳或下載進行不同的速度限制。如果這樣的設定方式還是無法滿足在頻寬管理上的需求,只能透過Kernel本身的QOS功能進行設定,因為這已經超出Pure-FTPd的能力範圍。

虛擬主機

虛擬主機功能可以讓數個不同的FTP站台同時運作於一部實際主機中,每一部虛擬主機的設定檔與檔案可以完全不同,以滿足特定情況下的FTP架設需求。

但由於FTP通訊協定並不允許以不同的網域名稱作為FTP主機的識別關鍵字,所以如果需要在同一部主機上執行兩部以上的虛擬主機且通訊埠都設在相同的埠號,這樣的設定方式並不能在FTP伺服器上實現,即使有提供虛擬主機支援功能亦然。

除了改用HTTP通訊協定之外,唯一的解決辦法便是在電腦上安裝兩張以上的網路上,並指定不同的IP位址。經由正確的設定,Pure-FTPd可以依照FTP連線要求中的目的IP位址,判斷該處理的FTP伺服器為何,並進行後續的處理動作。

虛擬使用者

如果希望開放FTP主機,但不想以匿名方式架設,傳統上會以直接建立新帳號的方式來解決這樣的問題。但如此一來,系統上會多出許多不必要的帳號,對系統安全也不是件好事。

Pure-FTPd以虛擬使用者的功能解決這個難題,只要啟用虛擬使用者的支援並進行相關設定,即可讓使用者使用非匿名的方式進行FTP傳輸,但系統上並不需要開啟真實帳號。這樣的功能非常適合需要經常開啟新FTP帳號的應用環境,因為只需要修改設定檔,而不必在系統上建立相關的資料與目錄。

虛擬配額

Pure-FTPd可以限制使用者目錄中最大的檔案數量,以及該使用者可以使用的磁碟空間上限。這樣的功能其實可以利用作業系統本身的「quota」指令進行設定,但是「quota」指令有個缺點,無法針對單一使用者進行限制。Pure-FTPd的配額設定之所以稱為虛擬配額,是因為這樣的限制功能並不是使用核心中的配額功能,而是由FTP伺服器本身進行處理。

虛擬配額本身有許多優點,例如配額限制只針對FTP伺服器本身,所以系統管理員可以針對其他檔案進行配額限制與管理。 此外,配額設定可以依照不同的使用者進行設定,每一個使用者可以擁有不同的設定上限值。

因為Pure-FTPd的配額功能為虛擬化設計,所以即使檔案系統本身並不支援Quota功能,一樣可以進行設定。但虛擬配額本身也有缺點,例如執行速度上較為緩慢,且穩定性也不如核心所提供的真實配額功能。

使用狀況查詢

FTP伺服器運行時可能有查詢目前系統使用現況的需求,此時可以使用Pure-FTPd所提供的「pure-ftpwho」指令進行查詢。須注意的是,此指令只能被root執行,所以一般使用者無法看到Pure-FTPd的運作情況。

「pure-ftpwho」指令可以查詢使用者登入的名稱、來源IP與目前狀態。如果正在傳輸檔案中,也能看到相關的訊息。雖然使用者介面有些陽春,但也不失為一個監控FTP伺服器的好方法。

▲pure-ftpwho指令可查詢目前使用者登入狀況。

PureAdmin圖形管理介面

Pure-FTPd的另外一大特色是可以使用圖形介面進行管理,即「PureAdmin」。此介面需要額外安裝,適合不習慣以文字介面操作系統的人使用。

PureAdmin除了可以查詢FTP伺服器的運作狀態之外,也可以用來設定虛擬使用者。有了這樣的工具輔助,對Pure-FTPd而言,又多了一個有力的幫手。

▲Pure-FTPd的圖形管理介面即為PureAdmin,可用來監控目前FTP伺服器的運作情況。

安裝Pure-FTPd

安裝Pure-FTPd的過程相當簡單,系統本身也會提供設定檔的範例供使用者參考。其安裝方法如下所示:

tar jxpf pure-ftpd-1.0.21.tar.bz2
cd pure-ftpd-1.0.21
./configure make
sudo make install

除了手動編譯安裝的方式之外,目前已經有不少Linux發行版本將Pure-FTPd列入套件管理系統中,例如Fedora的yum或Ubuntu的APT等等。以這兩種套件管理方式為例,其Pure-FTPd的安裝指令為「sudo yum install pure-ftpd」或「sudo ap-get install pure-ftpd」。

請注意,每一種發行版本的預設安裝路徑與設定檔的使用方式都有點不同。例如,Fedora會將Pure-FTPd的設定檔放在「/etc/pure-ftpd」目錄中,取名為「pure-ftpd.conf」。修改這個檔案再重新啟動Pure-FTPd,即可使用新的設定值執行Pure-FTPd。

但在Ubuntu上,Pure-FTPd的設定方式並非採用單一設定檔的方式,而是將參數設定以一個檔案負責一個參數的方式放置於「/etc/pure-ftpd/conf」目錄之中。例如執行「echo yes > NoAnonymous」命令,即表示不開啟匿名伺服器的功能,以此類推。

▲Pure-FTPd亦可直接使用Ubuntu的APT套件管理系統進行安裝。

結語

世界上可能很難有一套軟體可以滿足所有人的需求,不過Pure-FTPd似乎有這樣的潛力,成為所有FTP伺服器管理員的首選。

畢竟,直覺的設定方式,加上作業上有許多彈性措施讓系統管理員選擇,可以解決不少FTP伺服器架設上的困擾。再加上支援MySQL、UNIX帳號等認證方式,對初學或進階的管理員都有很大的幫助。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!