簡易
FTP Server 架設
-- Wu FTP
本文已不再維護,更新文章請參考 vsftpd的介紹
在 Internet 上面的傳輸協定當中, FTP ( File Transfer Protocol ) 算是一個最古老的協定之一了!早期還沒有這麼多好用的協定之前( 例如 SAMBA ),都是使用 FTP 來進行資料的傳遞的呢!另外,一般來說,資料的傳輸以 FTP 這個協定來傳送是相當的快速的,而且某些場合當中其實也相當的方便。不過,值得注意的是,使用 FTP 來傳輸時,其實是具有一定程度的『危險性』,因為資料在 Internet 上面是完全沒有受到保護的『明碼』機制!所以,其實鳥哥不太建議大家使用這個伺服器的啦!尤其當你建置好了 FTP 之後,如果經常進行資料的傳遞,對於您的網路頻寬『真的有很大的損害』啊!不過,無論如何, FTP 仍然有其存在的必要!例如中山大學的 FTP 站就作的相當的棒啊!所以,底下我們就來談一談用在這個古老的協定上面,最古老的伺服器之一: Wu FTP |
原理:
:FTP 的功能簡介
:FTP 的運作流程與使用到的 Port
:什麼是『被動, passive』的連線?
:FTP 的替代方案與安全性問題
:什麼時候才要設定 FTP 啊!開放誰人連進來?
套件安裝:
Server 端設定:
:Wu FTP 的結構
:最簡單的 ftpaccess 設定檔
:使用 Super daemon 管理 FTP 的情況
:歡迎畫面的建立、 Readme 檔案與關閉 FTP 訊息內容
:限制最大線上人數
:限制與取消使用者的家目錄規範
:時間相關的設定項目
:流量與上傳下載總量的限制項目
:創造 guest user 與 guest user 的家目錄問題
:anonymous 的根目錄與建立可上傳目錄
:針對人物(real, guest, anonymous)的限制設定項目
:拒絕某些使用者與開放某些使用者的登入(/etc/ftphosts,
deny-uid, allow-uid)
:目錄與連結檔的問題
:建立 passive port 提供 client 端登入
:修改 FTP 預設的 port 21 的連線
:一個多樣化的實例
Client 端的使用 FTP 軟體:
:ftp
:ncftp
Server 端的安全設定項目:
:iptables
:TCP_Wrappers
:pam 模組與 /etc/ftpusers 的關係
:FTP 本身提供的抵擋 username 或 host 的控制項目
重點回顧
參考資源
本章習題練習
原理:File Transfer Protocol ( FTP )
- 是相當古老的網路協定之一,他最主要的功能就是進行 Server 端與 Client 端之間的檔案傳送的功能啦!FTP 其實是以 TCP 封包的模式進行 Server 與 Client 之間的連線,當連線建立之後,使用者可以在 Client 端連上 Server 端進行檔案的下載與上傳,此外,還可以直接管理用戶在 Server 上面的檔案呢,相當的方便!而這個最古老的 FTP 伺服器軟體,大概要算是 Wu FTP 了,所以,底下我們將針對 Wu FTP 進行設定的說明喔!
- FTP 主機除了單純的進行檔案的傳輸與管理之外,其實他還提供了幾個主要的功能,底下我們約略的來談一談:
- 不同等級的使用者身份:FTP 預設的情況下可以提供三種主要的身份,分別是(1)實體帳號,real
user;(2)訪客, guest;(3)匿名登入者, anonymous 這三種。分成三種身份主要可以做為主機的控管上面的便利性,而且也可以將使用者作一個有效的管理呢!例如實體用戶可以進行的動作可能會比較多一些,至於匿 名登入者,大概我們就僅提供他下載一下資源而已,並不許匿名者使用太多主機的資源啊!當然,這三種人物能夠使用的『線上指令』自然也就不相同囉! ^_^
- 命令記錄與登錄檔記錄:FTP 可以利用系統的 syslogd 這個 daemon 來進行資料的紀錄,而記錄的資料包括了使用者曾經下達過的命令與使用者傳輸資料(傳輸時間、檔案大小等等)的紀錄呢!
- 限制或解除使用者家目錄所在(change root, 簡稱 chroot):為了避免使用者在您的 Linux 系統當中隨意逛大街,意指離開使用者家目錄而進入到 Linux 系統的其他目錄去,所以將使用者的工作範圍『侷限』在使用者的家目錄底下,嗯!實在是個不錯的好主意!FTP 可以限制使用者僅能在自己的家目錄當中活動喔!如此一來,由於使用者無法離開自己的家目錄,而且登入 FTP 後,顯示的『根目錄』就是自己家目錄的內容,這種環境稱之為 change root ,簡稱 chroot ,改變根目錄的意思啦!這有什麼好處呢?當一個惡意的使用者以 FTP 登入您的系統當中,如果沒有 chroot 的環境下,他可以到 /etc, /usr/local, /home 等其他重要目錄底下去察看檔案資料,尤其是很重要的 /etc/ 底下的設定檔,如 /etc/passwd 等等。這樣他就有辦法取得系統的某些重要資訊,用來『入侵』您的系統呢!所以在 chroot 的環境下,當然就比較安全一些咯!
FTP 正常情況下的連線方向:
- 我們在
- 當中得知,TCP 這種封包由於需要經過 Server 端與 Client 端兩邊的『三向交握』之後,才能確定連線,因此,他可以說是一個比較『可靠』的連線模式,因為雙邊都已經經過確認(ACK)的動作,所以,當然會較為『可靠了』!那麼既然 FTP 主要的工作是讓 Client 與 Server 端可以進行檔案的傳輸,自然需要較為可靠的連線囉,不然檔案資料傳到一半竟然損毀時,怎麼辦?!因此,FTP 當然就是以 TCP 這種封包來進行連線的。在這裡,我們不厭其煩的,再次說明一下 FTP 在正常模式情況(或者稱為主動模式, active)下,主機與 client 端到底是如何建立連線的呢(在不考慮防火牆與其他不知名因素的情況下)?
- Client 端主動向 Server 端發送連線需求:由於是用戶端想要連上 FTP 主機,所以呢,當然連線的方向首先會由 Client 發起!此時,Client 端隨機選取一個大於 1024 以上的 port 來主動的連線到 FTP 主機提供的 FTP 埠口(通常為port 21),而由於是主動的連線封包,所以這個連線會帶有 SYN 的標誌在;
- Server 端接受後,回應給 Client 端:當 Server 接收到 Client 的要求之後,會回應 Client 端的需求,此時 Server 端會建立等待連線的資源,並且將一帶有 SYN 與確認 (ACK) 的封包送回 Client 端;
- Client 端回應確認封包:在 Client 端接收到來自 Server 端告知的封包後,會再次的發送一個確認封包給主機,此時,兩邊才會正式的建立起連線的通道,這個步驟 1 ~ 3 就是 Three-Way Handshake(三向交握的啦!)。需要注意的是,這個已經建立連線的通道(通常是
port 21)僅能進行 FTP 的『指令』而已,如果該指令涉及到資料的傳送(data transfer)時,例如上傳或下載等等,那麼就需要額外建立一條資料傳輸的通道才行
( ftp-data )!而資料傳輸的通道建立則需要繼續底下的步驟;
- Client 端發送資料傳輸要求的命令給 Server:當需要進行資料的傳輸時,Client 端會啟用另一個高於 1024 的埠口來做為連線的準備(這個高於
1024 的埠口與步驟 1 那個埠口不是同一個!),並且 Client 端會主動的利用剛剛已經建立的指令通道(通常是 port 21)發送一個命令告訴 Server 說:『我已經準備好一個資料傳輸的埠口了,請準備進行傳輸吧』!特別留意喔,這個時候
Client 是透過『命令通道』來對 Server 下達命令的,而且已經通知 Server 我(client)要啟用的埠口了喔!
- Server 端以 ftp-data 埠口主動連線到 Client :收到命令之後的 Server 會『主動』的以 ftp-data 埠口(一般為 port 20)向 Client 端通知的那個高於 1024 的埠口進行連線,特別需要留意的是,此時是『Server
端主動向 Client 端的連線』喔,所以該連線的 TCP
封包會帶有一個 SYN 的標誌在;
- Client 端回應主機端,並繼續完成三向交握:在接到 Server 來的封包之後, Client 會回應一個帶有 ACK 確認的封包,並繼續來完成另一個三向交握的程序,此時,資料傳輸的通道才正式的建立。
- 如此一來則成功的建立起『命令』與『資料傳輸』兩個通道!不過,要注意的是,『資料傳輸通道』是在有資料傳輸的行為時才會建立的通道喔!並不是一開始連接到 Server 就立刻建立的通道呢!留意一下囉!
使用到的 port:
- 由上面的連線資料來看,其實我們會用到的主機的兩個埠口分別是:
(1)命令通道的 ftp (預設為 port 21 ) 與
(2)資料傳輸的 ftp-data (預設為port 20)
- 。
- 這兩個埠口的工作是不一樣的,首先,那個 port 21 主要是用在接收 Client 端下達的命令之用,例如顯示目錄內的檔案內容 dir 以及上傳下載 (put, get) 等等的指令的;至於 port 20 剛剛上頭約略提過了,就是用在資料傳輸的時候才會建立的一個連線呢!而且,重要的是,兩者的連線方向是不一樣的!首先, port 21 主要接受來自 Client 端的主動連線,至於 port 20 則為主動連線至 Client 端呢!這樣的情況在 Server 與 Client 兩者同時為公共 IP (Public IP) 的 Internet 上面,通常沒有太大的問題,不過,萬一你的 Client 端是在防火牆後端,或者是
- 主機後端呢?會有什麼問題發生呢?底下我們來談一談這個嚴重的問題!
在 NAT 或者防火牆後端的 FTP Client 連線問題:
- 萬一你的 FTP client 是在 NAT 主機的後端,那由於我們的 NAT 主機會自動的紀錄 client 端向外連線的資訊,所以在 Client 依上面步驟 1 送出要求封包後,步驟 2 的 FTP 回傳的封包可以透過 NAT 轉交給 client ,這沒有問題!所以, Client 連接到 Server 的命令通道 ( port 21 )可以正確的被建立起來的。不過,萬一 Client 端在建立起了命令通道之後,對 Server 下達資料傳輸的命令呢?連線會是如何?我們以底下的圖示來說明好了:
- 由於目前的 NAT 主機可以記錄由內部電腦連線出去的資訊,因此,藉由
port 21 的連線可以順利的被建立起來; - 當 Client 端由 port 21 下達資料傳輸的命令時,此時『個人PC』會告訴
FTP Server 說:『我開了一個 >1024 的埠口等你來連線喔』! - 這個時候要特別留意的是,『個人PC』經過NAT主機連線後,在
FTP Server 看到的『個人PC』的 IP 其實是 NAT 那部主機的!所以,這個時候
FTP Server 會主動的由 port 20 向 NAT 主機的 >1024 那個 port 要求建立連線!(請翻閱NAT主機一章)
- 瞭解問題的所在了嗎?原本我們的 FTP 主機要連線的其實是『個人PC』這部電腦的 >1024 那個 port ,不過,由於 NAT 的關係,所以卻造成了連線是向 NAT 主機的 >1024 那個 port 進行主動連線的!如此一來,想當然爾,NAT 主機並沒有啟動 >1024 那個 port 等 FTP 主機來連線,所以自然無法成功的建立起連線,這個時候你就會看到『Can't build data connection: Connection refused, 無法進行資料傳輸』之類的訊息了!啊!真是慘啊! @_@
- 那有沒有辦法可以克服這個問題呢?難道真的在 NAT 主機後面就一定無法使用 FTP 嗎?當然不是!目前有兩個簡易的方法可以克服這個問題:
- 使用 Linux NAT 主機的 iptables 預設模組,亦即 ip_conntrack_ftp
與 ip_nat_ftp 這兩個核心模組!應用 modprobe
這個指令就可以將這兩個模組載入了!我們剛剛說過,既然 iptables (NAT 主機)可以記錄
client 端向外連線的資訊,而 client 端向 server 端要求資料傳輸時,會主動告知
Server 我(client) 要等你來連線的 port ,因此,這兩個聰明的模組可以透過檢查
NAT 主機內的資訊而加以應用,那就可以讓 Server 與 Client 端建立 ftp-data
的連線啦!不過,這兩個模組並不是萬能的,因為這兩個模組目前僅能針對預設的
ftp-data(port 20) 進行檢驗的工作,萬一您連線的是一個使用非 port 20 為 ftp-data
傳輸的主機時,那這兩個模組就沒有辦法發揮其效能了!
- 另一個方法就是使用被動式連線 (passive)!什麼是被動式連線呢?想一想,既然『主機主動』連線到我的
NAT 後面的 client 不能成功,那麼我反其道而行,如果以 client 來連到 server
呢?是否就變成如同 port 21 相似的連線方向,如此一來不就可以成功的建立連線了嗎?呵呵!沒錯,而且也不需要啟動上面兩個模組了,並且也不擔心
FTP Server 是否啟用非 port 20 的 ftp-data port 啦!這部份我們底下說明喔。
- 既然在 NAT (或防火牆) 後端的 client 無法讓主機主動的來建立連線,那麼我就讓主機『被動的等我 client 去連線』啊!果真如此的話,那麼我的連線狀態變成如何了呢?
- Client 端主動向 Server 端發送連線需求:
- Server 端接受後,回應給 Client 端:
- Client 端回應確認封包:上面這三個步驟與主動式連線一樣,同樣的完成三向交握後,建立命令通道了!底下說明被動式資料傳輸通道的建立。
- Client 端發送資料傳輸要求的命令給 Server:與主動式連線不一樣的是,在被動式連線時,Client 端在下達命令之後,並告訴 FTP Server 說『我要使用
PASV 模式(就是 passive 啦!)的方式來進行資料傳輸』;
- Server 端挑選 > 1024 的埠口等待連線:在接受 client 的 PASV 要求之後,如果沒有特別的設定時 (目前的 FTP 伺服器版本已經可以指定 passive port 來規定被動式連接的埠口號碼 ) ,Server 會隨機選取一個大於 1024 的埠口,並經由命令通道告訴 client 端說:『我已經開了一個 ftp-data 的埠口等妳連線喔!』並開始等待 client 端的連線;
- Client 端主動向 Server 端建立連線並繼續完成三向交握:經由命令通道得知 Server 的埠口之後, Client 端會隨機挑選另一個大於 1024 的埠口,並主動向 Server 端的等待連線的埠口進行連線動作,所以此連線封包是帶有 SYN 的標誌的喔!然後 Server 會回應一個帶有 ACK 確認的封包,並繼續來完成另一個三向交握的程序,此時,資料傳輸的通道就正式的建立。
- 發現上面的不同點了嗎?呵呵!如此一來,在 NAT 主機內部的 Client 就可以順利的連接上 FTP Server 了!這就是在 FTP 連線裡面的所謂被動式連線囉!但是,萬一 FTP 主機是在 NAT 後端那怎麼辦.....呵呵!那可就糗了吧~ @_@這裡就牽涉到更深入的 DMZ 技巧了,我們這裡暫不介紹這些深入的技巧,先理解一下這些特殊的連線方向,這將有助於您未來伺服器架設時候的考慮因素喔!
- 此外,不曉得您有無發現,呵呵!透過 PASV 模式,Server 在沒有特別設定的情況下,會隨機選取大於 1024 的 port 來提供 Client 端連接之用。那麼萬一主機啟用的 port 被搞鬼怎麼辦?而且,如此一來也很難追蹤來自入侵者攻擊的登錄資訊啊!所以,這個時候我們可以透過 passive ports 的功能來『限定』主機取用的 port number 喔!
- 事實上,FTP 是一個不太安全的協定呢!怎麼說呢?很簡單啊!因為 FTP 與
- 相似的,他是以『明碼』的狀態在 Internet 上面流竄的,所以當然就容易被有心人士將你的資料給他抓下來,並且加以利用啦!因此,他當然不是很安全啊!所以,在網路上大家才會常常告誡說,不要隨意架設 FTP 網站啊!否則主機怎麼被破解的都不曉得哩!此外,由於 FTP 軟體常常會有漏洞的問題,因此也要常常更新套件喔!另外,其實拜
- 所賜,目前我們已經有較為安全的 FTP 了,那就是 ssh 提供的 sftp 這個 server 啊!這個 sftp-server 最大的優點就是:『他是經過加密的資料!』所以在 Internet 上面流竄的時候,嘿嘿!畢竟是比較安全一些啦!所以,建議您,除非必要,否則的話,使用 SSH 提供的 sftp-server 功能即可~然而這個功能對於一些習慣了圖形介面,或者是有中文檔名的使用者來說,實在是不怎麼方便,因為目前還沒有很棒的 sftp-server 的圖形介面軟體說~所以,有的時候,FTP 站還是有其存在的需要的。如果真的要架設 FTP 網站,那麼還是得需要注意幾個事項喔:
- 隨時更新到最新版本的 FTP 軟體,並隨時注意漏洞訊息;
- 善用 iptables 來規定可以使用 FTP 的網域;
- 善用 TCP_Wrappers 來規範可以登入的網域;
- 善用 FTP 軟體的設定來限制使用您 FTP 主機的使用者的不同權限啊;
- 使用 Super daemon 來進階管理您的 FTP 主機;
- 隨時注意使用者的家目錄、以及匿名使用者登入的目錄的『檔案權限』;
- 若不對外公開的話,或許也可以修改 FTP 的 port 。
- 無論如何,在網路上聽過太多人都是由於開放 FTP 這個伺服器而導致整個主機被入侵的事件,所以,這裡真的要給他一直不斷的強調,要注意安全啊!
- 既然(1)FTP 不怎麼安全(2)FTP 的使用者身份至少有三種,那麼在設定 FTP 伺服器之前就需要針對這些不同身份者的登入限制來做規劃囉!以達成較為安全的管理啊!底下我們談一些大致的概念性問題,這些真的是蠻概念的~看看即可!
實體用戶(Real user)
|
|
訪客(Guest)
|
|
匿名者(anonymoust)
|
|
事實上,使用 Wu ftp 來架設你的 FTP 伺服器時,還是以 RPM 的方式來安裝比較好啦!另外,如果您的 Linux distribution 提供其他版本的 FTP 伺服器,呵呵!那麼就不要使用 wu ftp 也沒有關係啊!這是因為 wu ftp 實在是太古老了,所以很多的駭客軟體都是針對他來設計的,也因為如此啊,所以才會產生『Wu FTP 伺服器比較不安全』的情況啊!好了,底下我們以 Red Hat 7.x 的版本來進行說明吧。基本上,一個 FTP 伺服器包含 Server 與 Client 用途的套件至少要有:
[root@test
root]# rpm -qa | grep ftp
ncftp-3.0.3-6
ftp-0.17-12
wu-ftpd-2.6.1-20
其中:
- wu-ftpd :這就是主要的 FTP 伺服器套件啦!
- ftp :提供 ftp 指令,就是 client 端的工具啦!
- ncftp :提供匿名登入的 FTP 網站的 client 端相當棒的另一套連線
FTP 軟體!如果沒有安裝,請馬上安裝吧!如果不曉得怎麼安裝,那麼請拿出『鳥哥的 Linux 私房菜 -- 基礎學習篇』好好的將 mount CD 的指令、搜尋的指令,以及 RPM 的指令瞧一瞧先!
- 其實 Server 端的設定最主要的就僅有 /etc/ftpaccess 這個主要設定檔啦!幾乎只要他搞定了,FTP 就不會有問題說~不過,由於 FTP 的高危險性,所以其他幾個跟安全較有相關的檔案我們也得來瞧一瞧才行啊!因此上,我們首先就需要來瞭解一下 wu ftp 到底有哪些設定檔案與執行檔呢?
- Wu FTP 的檔案結構先來瞭解一下,才好繼續進行說明啊!底下主要粗分為設定檔與執行檔進行說明喔!
設定檔
- /etc/ftpaccess:這是最主要的設定檔了!所有跟 Wu FTP 有關的設定內容,都可以在這個檔案做修訂;
- /etc/pam.d/ftp, 與 /etc/ftpusers:這兩個檔案與 PAM 模組關係較大!在預設的情況中,只要在 /etc/ftpusers 這個檔案內的使用者『都不能使用
FTP 的服務』 - /etc/ftphosts:用來允許或拒絕(allow/deny)某部主機或者某位使用者是否能夠登入 FTP 主機的設定檔案,基本上,這檔案裡面的設定也可以直接在 /etc/ftpaccess 當中設定喔!
- /etc/xinetd.d/wu-ftpd:這個是用來啟動 FTP 的 daemon 設定檔案~當然啦,主要是掛在 xinetd 這個 daemon 下的,如果是掛在 inetd 這個 daemon 時,就有可能是 /etc/inet.d 底下的檔案囉!
- : Wu FTP 的設定檔主要有底下這幾個:
執行檔
- ftpcount :主要用來計算『目前連線的人數』,可以計算出各種身份的連線人數啊!
- ftpwho:可以顯示出『目前連線的使用者是那個
User ?使用那個 PID?動作多久了?』等等的資訊呢! - ftprestart:重新啟動 ftp 啊!
- ftpshut:指定時候關閉 FTP 的一個指令喔!
- in.ftpd:這個就是主要的 Wu FTP 的 daemon 囉!我們啟動的 wu ftp 就是他的工作呢!
- :除了上面提到的這些設定檔之外,還有一些執行檔也需要瞭解一下:
用戶端的使用執行檔
- ftp:就是最陽春的 client 端軟體囉!
- ncftp:可以使用在匿名 FTP 網站喔!相當棒的軟體!可以支援整個目錄的下載呢!
- :這個部分的指令並不是 wu ftp 所提供的,但是粉重要,所以先提出說明喔!
- 呵呵!接下來就是那個主要的 FTP 設定檔的設定部分啦!
- 事實上,與 Wu FTP 關係最大的就是 /etc/ftpaccess 這個檔案啦!只要他設定好,其他的地方相對都不成問題的!而其實 Wu FTP 一開始已經幫我們設定好一個最簡單的 ftpaccess 檔案,我們先來談一談這個檔案的幾個主要的設定項目,然後再來繼續其他的設定項目呢!
[root@test root]# vi /etc/ftpaccess # 1. 設定人物群組名稱 # 設定這個 FTP 伺服器的人物身份設定,使用 class 來設定的!他的語法是: # class <人物群組名稱> <用戶身份1,用戶身份2,..> <允許連線的來源> class all real,guest,anonymous * # 上面的意思是說,我設定一個類別群組為 all ,這個 all 裡面就包含了 # 三種身份的使用者,就是 FTP 預設的 real, guest 與 anonymous 這三個, # 需要注意的是,這三個類別的使用者之間是以逗號『,』隔開的,並沒有空白字元 # 而這個 class 允許的來源來自任何地方『*』。 # 這個 class 可以多重設定,並且,萬一重複設定時,以第一個出現的 class 類別 # 為準!舉個例子,假如我的 FTP 裡面的 real 僅允許學術網路登入,至於其他 # 的 guest 與 anonymous 則雖然可以由任何地方登入,但是不可以由 chinait.com # 這個網域以及 61.141.0.0/16 這個網域登入時,那我可以這樣設定兩個 class 喔: # class allone real,guest,anonymous *.edu.tw # class alltwo guest,anonymous !*.chinait.com !61.141.0.0/16 * # 請注意到,驚嘆號『!』有代表『否,不允許』的意思存在,而星號『*』則代表 # 任何地方的意思,則如上面所設定時,如此一來,學術單位可以連到我的 FTP , # 至於 guest 與 anonymous 則可以任何地方連進,當然,除了上面的兩個網域之外 # 所以說,經由這個 class 的設定,就可以輕易的將三種身份是否可以登入主機的 # 狀態搞定了! ^_^ # 2. 設定系統的 FTP 管理員的 e-mail 信箱位址,與主機名稱! # 單純的就是顯示出系統當中 FTP 伺服器管理員的網址啦!預設的設定如下: email root@localhost hostname vbird.adsldns.org # 一般來說,我會將這個 e-mail 後面的位址寫上可以被使用者發信的信箱,例如: # email testing@test.adsldns.org # 這樣的格式!這個 email 可能會出現在進出網站時的歡迎畫面當中! # 最大的任務是:當使用者發現問題的時候,可以跟系統的管理員聯絡啊! # 所以當然要寫下『可以收信』的正常 email 囉! # 至於那個 hostname 則僅與歡迎畫面時的變數有關! # 3. 允許同一次連線當中,錯誤登入的次數 # 為了避免被不明攻擊者的『暴力攻擊』法,所以在一次連線當中, # 僅允許對方最多有 5 次的登入機會,如果密碼或 ID 一直發生錯誤, # 則會將該連線『踢』掉的啦! loginfails 5 # 當然囉!如果您想將登入的次數改小一點的話,也可以使用『loginfails 3』 # 4. 向使用者顯示『README, 讀我』檔案的內容訊息! # 當使用者登入或者變換目錄時,若目的端目錄有 README 這個檔案時 # (可以附加檔名),則向使用者顯示該檔案的內容!語法為: # <readme> <README*> <動作> # 一般來說,動作有『登入』與『變換目錄』,代號為 login 與 cwd=* readme README* login readme README* cwd=* # 舉個例子來說,我是 testing 這個身份的使用者,在我的家目錄內有個檔案: # /home/testing/data/README.important # 那麼當我使用 FTP 軟體連進我的家目錄 (/home/testing) 然後切換目錄到 # /home/testing/data 後,我的螢幕就會出現『請讀取 README.important』 # 的字樣囉!以提醒使用者之用! # 5. 與 readme 的意義蠻相同的!不過這個 message 卻會將後面所接的檔案的 # 內容直接顯示在螢幕上面,而不僅是告知使用者去讀取而已~ message /welcome.msg login message .message cwd=* # 上面的意思是說,當我 login 或者切換到任何有檔名為 .message 的目錄時, # 該檔案的內容就會顯示到螢幕上面!一般來說,那個 /welcome.msg 就是 # 『進站歡迎畫面』囉!這個等一下我們在底下會獨立出一小節來介紹他! # 6. 是否提供使用者線上立即執行的指令! # 一般的格式為: # <指令名稱> <是否允許/yes/no> <針對的對象是誰> compress yes all tar yes all chmod no guest,anonymous delete no anonymous overwrite no anonymous rename no anonymous umask no all # 以上面的例子來說,我允許任何成功登入我主機的使用者(all)使用我的 # FTP 主機來執行壓縮這個指令的動作!但是我不許匿名者(anonymous) # 使用我的 FTP 主機進行刪除(delete)以及改名(rename)的動作! # 你當然還可以增加自己所想要提供,或者減少提供使用者使用的指令! # 當然啦,既然 FTP 主要是針對『檔案』,所以指令以檔案的刪除、移動、 # 更改與壓縮為主! # 7. 將使用者執行的部分指令歷程記錄到 /var/log/xferlog 這個檔案 # FTP 進行上傳、下載或者其他使用者動作時,可以將過程訊息記錄下來, # 記錄的檔案就是 /var/log/xferlog 這個檔案囉!語法為: # <log> <欲登錄的項目> <記錄的使用者身份> <何種動作> log transfers anonymous,guest,real inbound,outbound # 上面說明的是『針對檔案傳輸(transfers)進行記錄,而針對所有人均紀錄, # 分別記錄上傳與下載(inbound,outbound)』,請注意,身份如果有多種,要以 # 逗號『,』隔開,不要加空白喔!所以,當你的 FTP 使用者連上主機, # 並且有任何檔案傳輸的動作時,則檔案大小以及檔案數等資訊,就會被紀錄 # 到 /var/log/xferlog 裡面去啦!而除了檔案傳輸之外,還有什麼可以紀錄的呢? # 基本上,那個『欲登錄的項目』內容就包含了下面幾項資料: # a. log commands <身份> :例如『log commands real,anonymous』,表示 # real 與 anonymous 這兩種身份的人,在 FTP 上面所下達的任何指令君會 # 被紀錄在 /var/log/xferlog 裡面 # b. log security <typelist> :例如『log security guest,anonymous』 # 表示當 guest 與 anonymous 使用者『違反安全機制』時,則會將當時 # 使用者所下達的指令或者其他動作紀錄下來! # 8. 關閉 FTP 的設定檔! # 我們可以設定關閉 FTP 這個服務的時間,就利用 shutdown 後面接的檔案! shutdown /etc/shutmsg # 如果 /etc/shutmsg 不存在,則 FTP 服務就不會被關閉!所以不存在沒關係! # 而如果 /etc/shutmsg 存在的話,他的內容包含有底下這些資料(注意: # 第一行為時間參數,共有七個時間參數,用空白鍵分隔,而提示文字可以隨便 # 編寫內容喔!也可以使用變數啊!): # <年> <月> <日> <時> <分> <抵擋新連線> <刪除已連線> # <提示文字> # 年:任何大於 1970 年的年份;月:0-11!請注意啊!是由 0-11 喔! # 0 代表 1 月、 1 代表 2 月! # 日:當然就是 1-31 囉! ;時:由 0-23 ;分:0-59 # 抵擋新連線與刪除已連線:格式是 HHMM 例如 90 分鐘則是 0130 ,在關機前的 # 設定時內,會拒絕新連線與將以連線之通道切除喔!例如: # 『2003 5 30 12 0 0230 0030 # I will shutdown my FTP server !sorry!』 # 在 2003/6/30 的 12:00 要關閉 FTP ,而 12:00 之前的兩小時30分內(09:30) # 就不許新的嘗試登入的連線,而在 30 分鐘前(11:30)就切掉已經已經連線之 # 使用者連線!事實上,這個 shutdown 蠻有趣的!因為實際上,您的 FTP # 服務並沒有關掉,僅只是讓他人無法使用 FTP 而已啊!那麼如何重新啟動呢? # 很簡單啊!將 /etc/shutmsg 殺掉,或者裡面的時間更動一下即可! # 9. 匿名者的密碼驗證: # 如果您的 FTP 允許 anonymous 的話,那麼還是需要讓匿名者輸入密碼的, # 不過就是密碼的設定比較鬆散就是了!目前的密碼格式為: # <passwd-check> <no|trivial|rfc822> <動作> passwd-check rfc822 warn # 上面說的是,以匿名者登入的使用者也需要輸入密碼,而密碼的格式為 rfc822, # 如果使用者的密碼不合格,那麼就警告(warn)使用者,但仍允許使用者登入! # 密碼的格式方面目前有兩種(no是不需要密碼確認,所以不討論!) # trivial:密碼當中必須含有 @ 這個 e-mail 的字元; # rfc822 :密碼必須符合 frc822 的規範! # 通常我們使用的是 rfc822 即可!至於動作主要有兩種動作: # warn :使用者輸入錯誤的密碼時,僅顯示警告訊息,仍允許其登入; # enforce:使用者若輸入錯誤密碼,儲顯示警告訊息,並中斷連線喔! # 注意: # 如果你不想讓某個 email 的型態通過認證時,可以使用 deny-email 這個 # 項目來抵擋!舉個例子來說,你不想讓 IE 的預設郵件地址通過認證,可使用 # deny-email IE?0User@ # deny-email mozilla@ # 上面這兩個項目可以同時存在,如果還有不想讓他通過的 email address # 可以持續上面的設定多行!這有什麼用途呢?如果您不想讓 web browsers # 通過密碼的確認,而僅想讓 |