歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix基礎知識

Unix系統:FreeBSDFTP的架設教程

  當你的 FreeBSD 安裝好後就內建 FTP ,只是預設不啟動它而已, 有人覺得 FreeBSD 內建的 ftpd 太陽春,會另外用別的 ftpd 來取代, 常見的替代方案有:proftpd , pureftp ......等,不過要隨時注意更新,因為 FTP 程式常常被找到有安全漏洞。

  1 以 FreeBSD 內建的 ftpd 提供服務

  一般說來,當你安裝好 FreeBSD ,FTP 的服務程式 /usr/libexec/ftpd 就有了

  只要修改一下 /etc/inetd.conf , FTP 服務就已經可以提供給有本機帳號的人使用

  1-1 打開 FTP 服務

  FreeBSD 系統的預設 ftpd 提供 daemon 模式(stand alone)和由 inetd 啟動 ftpd 兩種方式

  兩種方式比較起來,daemon 的方式適合對同一時間連線使用多,負載較大的主機

  1-1-1 方法一:daemon 模式 (stand alone)

  1-1-1-1 立即啟動 ftpd daemon

  如果只是要馬上啟動服務只要執行:

  /usr/libexec/ftpd -D -l -l

  參數說明:

  -D :讓 ftpd 以 daemon 的方式啟動。

  -l :叫 syslogd 記錄每次的連線,用兩次 -l 則可以連使用的動作都記錄

  -l 要留下連線記錄還需要配合修改 /etc/syslog.conf 才會啟動記錄

  ftpd 還有很多的參數,可以 man ftpd 查看。

  1-1-1-2 如何讓 FreeBSD 開機時自動啟動 ftpd

  如果只用前面的方法啟動 ftpd daemon,下次系統重新開機後就沒了,為了讓它能自動啟動,我們可以把啟動指令放入 /etc/rc.local 中或是仿 /usr/local/etc/rc.d 的檔案,自己寫個 ftpd.sh 。

  例一:

  ee /etc/rc.local

  在裡面放一行:

  /usr/libexec/ftpd -D -l -l

  例二:

  仿 /usr/local/etc/rc.d 中的檔案,新增一個叫 ftpd.sh 的 script :

  ee /usr/local/etc/rc.d/ftpd.sh

  裡面放入下面的內容:


#!/bin/sh

ftpd_flag="-l -l -S"
ftpd="/usr/libexec/ftpd"

case "$1" in
start)
[ -x ${ftpd} ] && ${ftpd} -D ${ftpd_flag} > /dev/null && echo -n ' ftpd
;;
stop)
/usr/bin/killall ftpd > /dev/null && echo -n ' ftpd'
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
;;
esac

exit 0

  存好檔後再更改一下檔案的權限,讓它可以執行:

  chmod 554 /usr/local/etc/rc.d/ftpd.sh

  這樣,當 FreeBSD 開機時就會自動啟動 ftpd ,也可以利用 /usr/local/etc/rc.d/ftpd stop 來停止服務,執行時要加什麼參數就修改 ftpd_flag 那行。

  1-1-2 方法二:由 inetd 來啟動 ftpd

  這種方式,想當然爾,就是要修改 /etc/inetd.conf 囉:

  ee /etc/inetd.conf

  先檢查一下 /etc/inetd.conf 中有沒有下面這行:

#ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l

  如果像上面那行一樣,開頭是井字號,表示現在 FTP 服務預設是被關閉的。井字號表示註解,不使用,只要把井字號去掉改成下面的樣子:

ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l

  存檔後執行下面的指令:

  kill -HUP `cat /var/run/inetd.pid`

  讓 inetd 重新抓取 /etc/inetd.conf 設定檔就好了

  注意:上面的 ` 是 Esc 鍵下面那鍋毛毛蟲的按鍵哦,可別打成單引號

  1-2 停止 FTP 服務

  如果要停止 FTP 服務,看之前是以 daemon 模式啟動還是 inetd 模式啟動而有所不同。

  1-2-1 daemon 模式

  daemon 模式可以執行下列指令來終止 ftpd 的程序:

  killall ftpd

  如果之前是將 ftpd 放在 /etc/rc.local 中來由系統在開機時自動啟動,可以用下面的方法來停止自動提供 FTP 服務。

  先打開 /etc/rc.local 來編輯,執行:

  ee /etc/rc.local

  將檔案中,執行 ftpd 那行的最前面加個井字號,儲存好即可。

  1-2-2 inetd 模式

  當初是以 inetd 模式來提供服務的,則要修改 inetd 的設定檔 /etc/inetd.conf ,並讓 inetd 重新讀取設定。

  先打開 /etc/inetd.conf 來編輯,執行:

  ee /etc/inetd.conf

  將設定檔中,有 ftpd 那行的前面加上井字號後,儲存設定檔。

  讓 inetd 重讀設定檔,執行下面指令:

  kill -HUP `cat /var/run/inetd.pid`

  如果要確認 FTP 服是否已經停止了,可以執行:

  netstat -na

  看看下面這行是不是已經消失了:

  tcp4 0 0 *.21 *.* LISTEN

  1-3 限制使用者只能在自己目錄活動(chroot)

  如果沒有特殊設定,使用者用自己的帳號 FTP 到主機後,可以自由的切換任意目錄的,如果不想讓它亂跑則要做以下設定。

  1-3-1 方法一:利用 /etc/ftpchroot

  FreeBSD 的 ftpd 以 /etc/ftpchroot 來控制哪些人或群組要如何 chroot ,所以我們開啟/新增這個設定檔來編輯。

  ee /etc/ftpchroot

  在檔案裡面放入我們要管制的人或群組:

gsyan
foo
@staff

  上面的設定使得 gsyan, foo 及屬於 staff 群組的人都只能在自己目錄活動。

  cd /usr/local/etc

  cp ftpaccess.sample ftpaccess

  cp ftpconversions.sample ftpconversions

  cp ftpusers.sample ftpusers

  cp ftpgroups.sample ftpgroups

  cp ftphosts.sample ftphosts

  只要稍加修改就可以用囉!

  ftpaccess 中常用的設定:

功能 語法 定義類別(class) class 類別名稱 成員(real,guest,anonyous) 連線網址
class TP real,guest,anonymous *.tp.edu.tw 限制上線人數及時段 limit class名稱 人數 時間 訊息檔(絕對路徑)
limit TP 50 any /usr/local/etc/ftp.msg.Full
讓 TP 這個 class 同時最多 50 個連線,滿了就顯示 ftp.msg.Full中的內容 連線記錄 log commands class名稱
log transfers class名稱 inbound,outbound
控制可執行的指令 delete yes 或 no 類別
overwrite yes 或 no 類別
rename yes 或 no 類別
chmod yes 或 no 類別
umask yes 或 no 類別
連線時只顯示主機名稱,不顯示版本... greeting brief 連線做 chroot restricted-uid 使用者帳號
restricted-uid * (將所有使用者 chroot) 不做 choot unrestricted-uid 使用者帳號
unrestricted-uid gsyan (gsyan不做 chroot)

  wu-ftp 可以做的事實在太多了,其它的設定 man ftpaccess 包您可以滿載而歸。

  3-3 修改 /etc/inetd.conf

  我們打算讓 wuftpd 以 inetd 的模式提供服務,所以要先修改 /etc/inetd.conf ,然後讓 inetd 重新讀取設定檔。

  開啟 /etc/inetd.conf 來修改:

  ee /etc/inetd.conf

  將含有 ftp 開頭的那行改為下面的內容:

  ftp stream tcp nowait root /usr/local/libexec/ftpd ftpd -a

  然後讓 inetd 重新讀取設定檔,執行下面的指令:

  kill -HUP `cat /var/run/inetd.pid`

  最後利用 netstat -na 來觀察服務是否啟動,或是以 FTP 軟體來測試。

Copyright © Linux教程網 All Rights Reserved