在 Internet 上面的傳輸協定當中, FTP ( File Transfer Protocol ) 算是一個最古老的協定之一了!早期還沒有這麼多好用的協定之前( 例如 SAMBA ),都是使用 FTP 來進行資料的傳遞的呢!另外,一般來說,資料的傳輸以 FTP 這個協定來傳送是相當的快速的,而且某些場合當中其實也相當的方便。不過,值得注意的是,使用 FTP 來傳輸時,其實是具有一定程度的『危險性』,因為資料在 Internet 上面是完全沒有受到保護的『明碼』機制!所以,其實鳥哥不太建議大家使用這個伺服器的啦!尤其當你建置好了 FTP 之後,如果經常進行資料的傳遞,對於您的網路頻寬『真的有很大的損害』啊!不過,無論如何, FTP 仍然有其存在的必要!例如中山大學的 FTP 站就作的相當的棒啊!所以,底下我們就來談一談用在這個古老的協定上面,最古老的伺服器之一: Wu 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
其中:如果沒有安裝,請馬上安裝吧!如果不曉得怎麼安裝,那麼請拿出『鳥哥的 Linux 私房菜 -- 基礎學習篇』好好的將 mount CD 的指令、搜尋的指令,以及 RPM 的指令瞧一瞧先!
- wu-ftpd :這就是主要的 FTP 伺服器套件啦!
- ftp :提供 ftp 指令,就是 client 端的工具啦!
- ncftp :提供匿名登入的 FTP 網站的 client 端相當棒的另一套連線 FTP 軟體!
[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 # 通過密碼的確認,而僅想讓類似一般的 FTP client 來連線,那麼這個 # 限制項目就有用的很了!因為他可以將 IE 之類的 browsers 擋下來啊! # 10. 設定允許與不許登入 FTP 伺服器的使用者與群組 deny-uid %-99 %65534- deny-gid %-99 %65534- allow-uid ftp allow-gid ftp # 這個是在 Red Hat 系統上面新增出來的設定啦!在一般正常的系統當中, # UID 小於 100 通常是系統帳號,而 UID 大於 65534 可能有安全上的問題, # 所以,我們就直接將這兩段 UID 與 GID 切掉啊!讓他們無法登入,也就可以 # 拒絕某些不當的入侵攻擊了!那就是 deny-uid 與 deny-gid 的功效! # 所以,上面的意義是,小於99與大於65534 的UID/GID都予以抵擋連線; # 而開放的 UID 與 GID 則僅有 ftp 這個群組與使用者喔! # deny-uid 後面除了接數字外,也可以直接接帳號名稱,例如要擋住 testing # 與 testqq 這個用戶時,可以設定: # deny-uid testing testqq # 後面可以接多個 UID 或帳號或者使用範圍,例如抵擋 100 到 1000 之間的 UID # deny-uid 100-1000 # 至於 allow-uid 則恰好相反啊!就是允許的意思∼ |
[root@test
root]# vi /etc/xinetd.d/wu-ftpd
service ftp { disable = yes <==就是他,將他改為 no 即可! socket_type = stream wait = no user = root server = /usr/sbin/in.ftpd server_args = -l -a log_on_success += DURATION USERID log_on_failure += USERID nice = 10 } |
[root@test
root]# /etc/rc.d/init.d/xinetd restart
[root@test root]#
netstat
-tl
[root@test root]#
ftp
localhost
|
%T 本地端的主機時間(格式為
Fri Mar 21 11:28:50 2003)
%F 使用者目前所在目錄之 partition 所剩空間(不一定支援所有系統) %C 使用者目前所在的目錄 %E 系統管理員的 email ,這個就是剛剛設定 ftpaccess 內的 email 值 %R 遠端主機的 IP 或 hostname ! %L 本地端主機的名稱或 IP %U 使用者的登入帳號名稱 %M FTP 主機所能允許的使用者最大連線數量 %N FTP 主機目前已經連線的使用者數量 %B 關於硬碟容量的限額 %Q 目前的 block 數量 %I 最大的可用 inodes %i 針對 inodes 的限額 %H 當過度使用硬碟空間時的時間限制 %h 當使用過度檔案時的時間限制 %s 預計關閉 FTP 的時間(與 /etc/shutmsg 有關) %r 預計關閉 FTP 前禁止再連線的時間(與 /etc/shutmsg 有關) %d 預計關閉 FTP 前已連線的中斷時間(與 /etc/shutmsg 有關) |
[root@test
root]# vi /welcome.msg
Welcome to my FTP site. Now is the time ==> %T The host name is %L You are %U and from %R There are %N person in my site, now. If you have any problem please call me %E 是的!內容只要上面這樣即可!,馬上來測試一下設定的結果 [root@test root]# ftp localhost Connected to localhost (127.0.0.1). 220 vbird.adsldns.org FTP server (Version wu-2.6.1-20) ready. Name (192.168.1.100:test): test 331 Password required for test. Password: <==輸入密碼 230-Welcome to my FTP site. 230-Now is the time ==> Fri Mar 21 12:03:49 2003 230-The host name is vbird.adsldns.org 230-You are vbird and from 192.168.1.100 230-There are 1 person in my site, now. 230-If you have any problem please call me 230-root@localhost 230- 230 User test logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> bye |
[root@test
root]# vi /etc/shutmsg
2003 2 30 12 00 0100 0030 我將要關閉連線、請不要再進行連線啦! 即將關機的時間:%s 新連線失敗的時間:%r 已連線關閉的時間:%d 註:上面的內容格式為兩段,第一段就是時間的參數,分別是:
|
[root@test
root]# vi /etc/ftpaccess
# 規範的格式為: # <limit> <人物群組名稱> <最大連線數> <時間> <被拒絕時顯示的文件檔案> limit all 20 Any /etc/ftpmaxnumber limit guest 10 Any /etc/ftpmaxnumber limit anonymous 5 Any0800-2000 /etc/ftpmaxnumber 由上面的限制當中,我們知道,在 all 這個人物群組當中,最大的同時上線 人數為 20 人,並且,這個設定是任何時刻均有效(Any),如果你是第 21 個 連線進來我的 FTP 的人,那麼您的螢幕將會出現 /etc/ftpmaxnumber 這個檔案 的內容,並且『無法連線進入我的 FTP 』!請特別留意 Any 的大小寫,若 寫錯時,這個設定將不會生效! [root@test root]# vi /etc/ftpmaxnumber 這裡已經太多人啦!請您等一下再進入! ^_^ [root@test root]# /etc/rc.d/init.d/xinetd restart |
[root@test
root]# vi /etc/ftpaccess
restricted-uid * restricted-uid 200-400 test testing [root@test root]# /etc/rc.d/init.d/xinetd restart |
[root@test
root]# vi /etc/ftpaccess
unrestricted-uid test testing |
[root@test
root]# vi /etc/ftpaccess
# 時間參數預設都是以 秒 為單位的! timeout accept
120
timeout connect
120
timeout data
2400
timeout idle
1800
timeout maxidle
1800
limit-time anonymous
30
|
[root@test
root]# vi /etc/ftpaccess
# 給予的限制情況: # <file-limit> <in|out|total> <數目或 bytes 數> <身份群組> file-limit out 32 alltwo data-limit in 10240 alltwo # 上面的設定說明是這樣的, alltwo 是一個 class 群組,這個在最前頭 # 規定出來的啦!而 in 代表上傳、out 代表下載, total 則代表總量! # 第一個範例是說, alltwo 這個群組當中的任何使用者,在一次登入當中, # 可以下載的檔案總數,這是以檔案數量來計算的!至於第二個範例,則是說 # 在 alltwo 這個群組中的任何使用者,均僅可『上傳 10KB 的容量』! # 注意喔!那個數字代表的是 Bytes 的,要換算成 KBytes 則需要除以 1024 |
[root@test
root]# vi /etc/ftpaccess
# 給予的限制情況: # <throughput> <根目錄> <次目錄> <檔名> <bytes/s> <倍數> <位址> throughput /var/ftp * * 10240 - * throughput /home/test /public_html * 51200 - * throughput /home/test /realdown * oo - *.vbird.org # 上面我設定了兩個有被限制的下載目錄,分別是 /var/ftp 這個目錄,以及 # /home/test/public_html 這個目錄,需要注意的是, 10240 代表 10Kbytes # 喔!設定錯誤會讓使用者下載到瘋掉啊!此外,那個 /home/test/realdown # 則是『全速』開放給使用者下載喔! |
[root@test
root]# vi /etc/ftpaccess
# 給予的限制情況: # ud-dl-rate <數字> <使用者身份群組> ul-dl-rate 2 all # 這表示 所有的人物 可以上傳 1M 下載 2M 的意思! |
%xu 可上傳的 bytes 數
%xd 可下載的 bytes 數 %xR 上傳與下載的比例 (1:n) %xc 剩下的可用 bytes 數 %xT 時間限制 (分鐘) %xE 由開始登入到目前的時間預估(分鐘) %xU 上傳限制 (與 file-limit 及 data-limit 的 in 有關) %xD 下載限制 (與 file-limit 及 data-limit 的 out 有關) |
[root@test
root]# vi .message
您可以上傳/下載的比例為 1:%xR 您此次登入至目前剩下的時間:%xT 由登入到目前為止使用的時間:%xE 您可以上傳的最大容量(KBytes):%xU 您可以下載的最大容量(KBytes):%xD |
[root@test
root]# vi /etc/passwd
.... 略 .... test:x:511:100:testacount:/home/test:/sbin/nologin .... 略 .... |
[root@test
root]# vi /etc/shells
/bin/sh /bin/bash /bin/tcsh /bin/csh /bin/zsh /sbin/nologin |
[root@test
root]# vi /etc/ftpaccess
# 幾乎就是新增兩行即可: guestuser 與 guest-root guestuser test guest-root /home/test/public_html test # 第一行說的是要將 test 這個使用者變成 guest 啦! # 第二行則是說, test 這個使用者的家目錄是在 /home/test/public_html |
[root@test
root]# vi /etc/ftpaccess
guestuser * realuser test1 test2 # test1 與 test2 中間用空格隔開!這樣就成功啦! |
[root@test
root]# vi /etc/ftpaccess
anonymous-root /home/ftp/public |
[root@test
root]# vi /etc/ftpaccess
# 格式很簡單,就是: # upload <家目錄> <次目錄> <yes|no> <檔案所屬人> <群組> <權限> <目錄> anonymous-root /home/ftp/public upload /home/ftp/public /upload yes ftp sys 0666 upload /home/ftp/public /upfiles yes ftp sys 0666 nodirs # 第二行顯示的是,我的
/home/ftp/public/upload 可以允許匿名者上傳資料,
|
[root@test
root]# vi /etc/ftpaccess
# nice <數值> <使用者群組或身份> # defumask <數值> <使用者群組或身份> nice 10 anonymous nice -5 real defumask 022 real defumask 002 anonymous # 請務必搞懂什麼是 nice 與 umask 喔!上面的 defumask 就是 default umask # 的意思!不難理解吧?! |
[root@test
root]# vi /etc/ftpaccess
# 準備抵擋囉!就以 <deny> <位址或主機名稱> <回覆給使用者訊息的文件> deny 192.168.0.100 /etc/ftpdeny.msg deny *.adsldns.org /etc/ftpdeny.msg # 上面的設定當中,當 192.168.0.100 這個 IP 來的 FTP 要求封包時, # 不僅不提供其 FTP 的連線,並且會顯示 /etc/ftpdeny.msg 這個檔案的內容! # 同樣的,只要來自 .adsldns.org 的網域的電腦也都會被抵擋啊! [root@test root]#
vi
/etc/ftpdeny.msg
|
[root@test
root]# vi /etc/ftpaccess
# 就直接使用最初的設定 deny-uid <帳號、UID或範圍> deny-uid %-499 %65000- deny-gid %-499 %65000- allow-uid ftp allow-gid ftp |
[root@test
root]# vi /etc/ftphosts
# 格式為 <deny> <使用者帳號> <不許連線的IP或主機名稱> # 格式為<allow> <使用者帳號> <不許連線的IP或主機名稱> deny test 192.168.0.0/24 allow testing 192.168.1.0:255.255.255.0 # 注意上面這兩種書寫方式的不同的! deny test2 192.168.5.10 allow test2 * |
[root@test
root]# vi /etc/pam.d/ftp
#%PAM-1.0 auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed <==此行與上行為同一行 auth required /lib/security/pam_stack.so service=system-auth auth required /lib/security/pam_shells.so account required /lib/security/pam_stack.so service=system-auth session required /lib/security/pam_stack.so service=system-auth |
[root@test
root]# vi /etc/ftpaccess
# alias <你想要給這個目錄起的名字> <實際 Linux 系統的目錄> alias anonymousdir /var/ftp |
[root@test
root]# vi /etc/ftpaccess
# path-filter <群組> <訊息檔案> <允許字元> <不許字元1> <不許字元2> ... paht-filter anonymous /etc/pathmsg ^[-A-Za-Z0-9._]*$ ^\. ^- [root@test root]# vi /etc/pathmsg 請注意,您的檔案名稱不符合本站的限制,請檢查: 1. 檔名起始字元需為英文或數字或底線; 2. 檔名起始字元不可為 . 或者減號 - |
[root@test
root]# vi /etc/ftpaccess
# passive ports <CIDR 位址> <最小 port> <最大 port> # pasv-allow <人員身份> <位址> passive ports 0.0.0.0/0 65501 65505 pasv-allow all * # 這代表來自任何地方的 IP 在要求 passive 連線模式時,將以 65501 ~ 65505 # 之間的 port 來做為他們 PASV 連線的要求啦!如此一來,則 passive ports # 將僅會隨機選取 65501 ~ 65505 之間的 5 個 port 來做為 PASV 之用, # 其他的 port 將不會使用到 FTP 的 passive 模式!如此一來還可以建置 # 防火牆上面的 port mapping 呢!很不錯吧! ^_^ |
[root@test
root]# vi /etc/xinetd.d/wu-ftpd
service ftp { disable = no socket_type = stream wait = no user = root server = /usr/sbin/in.ftpd server_args = -l -a log_on_success += DURATION USERID log_on_failure += USERID nice = 10 } |
1. 修改 wu-ftpd
這個裡面關於 daemon 的名稱:
[root@test root]# vi /etc/xinetd.d/wu-ftpd service vbftp <==修改這裡就對啦! { disable = no socket_type = stream wait = no user = root server = /usr/sbin/in.ftpd server_args = -l -a log_on_success += DURATION USERID log_on_failure += USERID nice = 10 } 2. 修改 /etc/services 的 daemon 相關設定內容 [root@test root]# vi /etc/services vbftp 3366/tcp # 上面這一行可以加在這個 /etc/services 裡面的最後一行!自己設定的啦! 3. 重新啟動
xinetd
|
[root@test
root]# groupadd myftpusers
[root@test root]# useradd -m -g myftpusers -s /sbin/nologin wwwuser1 [root@test root]# useradd -m -g myftpusers -s /sbin/nologin wwwuser2 [root@test root]# useradd -m -g myftpusers -s /sbin/nologin ftpuser [root@test root]# passwd wwwuser1 <==不要忘記給三個人密碼! |
[root@test
root]# vi /etc/ftpaccess
# 底下的資料為 VBird 的 FTP 主機設定範例 # ######################################################################## # 1. 針對 Server 的設定項目: ######################################################################## # 1.1 針對群組的設定項目 class all real,guest,anonymous 140.116.0.0/16 class allreal real 140.116.0.0/16 class allguest guest !61.141.0.0/16 * class allanonymous anonymous !61.141.0.0/16 * # 1.2 其他主機相關的設定項目
# 1.3 訊息管理
# 1.4 指令管理
# 1.5 人物登入管理
# 1.6 時間相關的設定值
# 1.7 主機最大連線人數設定
# 1.8 被動的
port 設定
########################################################################
########################################################################
# 3.1 www users
# 3.2 FTP users
########################################################################
|
[root@test
root]# mkdir /var/ftp/upload
[root@test root]# chown ftp:sys /var/ftp/upload [root@test root]# mkdir /home/wwwuser1/public_html [root@test root]# mkdir /home/wwwuser2/public_html [root@tset root]# chown wwwuser1:myftpusers /home/wwwuser1/public_html [root@tset root]# chown wwwuser2:myftpusers /home/wwwuser2/public_html |
[root@test
root]# vi /etc/shells
/bin/bash ....(略)... /sbin/nologin |
事實上,我們在網路常用指令那個章節當中已經介紹過了 ftp 與 ncftp 這兩個很好用的 client 端軟體了,在這裡我們再次的強調一下這兩個軟體,其中,比較重要的是強調傳輸的模式。在 Server 與 Client 傳輸的過程中,資料的流動主要分為 binary 與 ascii 兩種模式,需要注意的是:底下我們就來介紹兩個軟體吧!
- Binary 的傳送方式當中,FTP Server 並不會去改變檔案的內容,所以資料得以完整的呈現;
- 但在 ASCII 傳輸模式當中,主要將資料視為一般的純文字檔,例如:原始碼或者是設定檔等等,在這種傳輸模式當中,Server 會將檔案以一行一行來傳送,所以如果您以 ASCII 傳送經過編譯過的 binary program 時,將可能導致無法執行的問題(因為被轉成文字檔啦!)
ftp
遠端傳送資料當中,速度最快的協定之一
語法:
[root @test /root]# ftp [-p] host [port]
參數說明:
-p :啟動 PASSIVE 模式!
範例:
[root @test /root]# ftp localhost <==預設是以 port 21 來進行連線
[root @test /root]# ftp localhost 1354
如果你設定的 ftp 的 port 非正規的 21 ,則可以這樣![root @test /root]# ftp localhost <==連接到遠端主機
Connected to localhost (127.0.0.1).
220 localhost FTP server (Version wu-2.6.1-20) ready.
Name (127.0.0.1:test): test
331 Password required for test.
Password: <==輸入密碼
230 User test logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir <==顯示遠方主機的內容
ftp> cd <==變換遠端主機的目錄
ftp> close or bye or exit <==離開遠端主機
ftp> get file <==取得遠端主機的檔案
ftp> mget file <==取得所有的檔案,例如 mget .bash* !
ftp> put file <==將本地端檔案 file 丟到遠端主機上
ftp> mput file <==與 mget 差不多意思啦!
ftp> delete file <==殺掉遠端主機的 file 檔案
ftp> help <==顯示求救指令!
ftp> mkdir dir <==在遠端主機上面建立目錄
ftp> lcd <==變換本地端路徑!
ftp> ascii or binary <==重要的很!上面提過的!
ncftp
登入匿名主機最好用的文字介面 FTP 軟體!
語法:
[root @test /root]# ncftp [host]
[root @test /root]# ncftp [ftp://domain.name/path]
參數說明:
可以直接連接到 host 主機,也可以直接連接到主機的某個路徑之下,相當的方便
範例:
[root @test /root]# ncftp ftp.nsysu.edu.tw <==連接到中山大學 FTP 站
[root @test /root]# ncftp ftp://ftp.nsysu.edu.tw/Linux
直接連接到 Linux 底下的 Linux 目錄下!遠端主機的一些服務指令:
ncftp /pub/Linux > cd Redhat <==變換目錄
ncftp /pub/Linux > dir <==顯示目前目錄下的檔案與目錄資訊
ncftp /pub/Linux > get file1 <==將 file1 的資料存到本地端
ncftp /pub/Linux > get -z file1 file2 <==將 file1 存到本地改檔名為 fill2
ncftp /pub/Linux > get -A file1 file2
將 file1 以累積的方式(append)增加到 file2 這個檔案
ncftp /pub/Linux > pub file <==將檔案由本地端上傳至遠端!
ncftp /pub/Linux > rename file1 file2 <==將遠端的主機之 file1 更名為 file2
ncftp /pub/Linux > rm file <==刪除檔案
ncftp /pub/Linux > rmdir directory <==刪除目錄
ncftp /pub/Linux > mget directory <==可以下載『整個目錄』的資料!很棒吧!本地端主機的一些指令功能:
ncftp /pub/Linux > lcd <==變更本地端目前所在的目錄
ncftp /pub/Linux > lls <==顯示目前本地端所在目錄的檔案與目錄資訊
ncftp /pub/Linux > lmkdir <==在本地端建立目錄
ncftp /pub/Linux > lpwd <==顯示目前本地端主機的所在目錄
ncftp /pub/Linux > lrm <==刪除本地端的檔案
ncftp /pub/Linux > lrmdir <==刪除本地端的『目錄』
/sbin/iptables
-A INPUT -p TCP -i eth0 -s 140.116.0.0/16 --dport 20:21 \
-j ACCEPT /sbin/iptables -A INPUT -p TCP -i eth0 -s 140.116.0.0/16 --dport 65501:65505\ -j ACCEPT |
[root@test
/root]# vi /etc/hosts.allow
in.ftpd : 140.116.0.0/255.255.0.0 [root@test /root]#
vi
/etc/hosts.deny
|