原文 http://www.lsps.tp.edu.tw/~gsyan/freebsd2001/ftp.html
FTP 的架設
2003/08/07 修改
當你的 FreeBSD 安裝好後就內建 FTP
有人覺得 FreeBSD 內建的 ftpd 太陽春,會另外用別的 ftpd 來取代
常見的替代方案有:wu-ftpd 或 proftpd
不過如果選用 wu-ftpd 則要隨時注意更新,因為它常常有安全漏洞
--------------------------------------------------------------------------------
以 FreeBSD 內建的 ftpd 提供服務
一般說來,當你安裝好 FreeBSD ,FTP 的服務程式 /usr/libexec/ftpd 就有了
只要修改一下 /etc/inetd.conf , FTP 服務就已經可以提供給有本機帳號的人使用
打開 FTP 服務
FreeBSD 系統的預設 ftpd 提供 daemon 模式(stand alone)和由 inetd 啟動 ftpd 兩種方式
兩種方式比較起來,daemon 的方式適合對同一時間連線使用多,負載較大的主機
方法一:daemon 模式(stand alone)
立即啟動 ftpd daemon
如果只是要馬上啟動服務只要執行:
/usr/libexec/ftpd -D -l -l
參數說明:
-D 讓 ftpd 以 daemon 的方式啟動。
-l 叫 syslogd 記錄每次的連線,用兩次 -l 則可以連使用的動作都記錄
-l 要留下連線記錄還需要配合修改 /etc/syslog.conf 才會啟動記錄
ftpd 還有很多的參數,可以 man ftpd 查看
如何讓 FreeBSD 開機時自動啟動 ftpd
如果只用前面的方法啟動 ftpd daemon,下次系統重新開機後就沒了
為了讓它能自動啟動,我們可以把啟動指令放入 /etc/rc.local
ee /etc/rc.local
在裡面放一行:
/usr/libexec/ftpd -D -l -l
或者是仿 /usr/local/etc/rc.d 中的檔案,寫個 ftpd.sh
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 那行
方法二:由 inetd 來啟動 ftpd
這種方式,想當然爾,就是要修改 /etc/inetd.conf 囉
ee /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 鍵下面那鍋毛毛蟲的按鍵哦,可別打成單引號
--------------------------------------------------------------------------------
停止 FTP 服務
如果要停止 FTP 服務
daemon 模式可以先下:
killall ftpd
停止正在執行的 ftpd
ee /etc/rc.local
將 ftpd 那行前面加個井字號,儲存好即可
inetd 模式的則仿啟動的程序:
ee /etc/inetd.conf
將 ftpd 那行的前面加上井字號後儲存設定檔
讓 inetd 重讀設定檔,執行下面指令:
kill -HUP `cat /var/run/inetd.pid`
--------------------------------------------------------------------------------
限制使用者只能在自己目錄活動(chroot)
如果沒有特殊設定,使用者用自己的帳號 FTP 到主機後,
可以自由的切換任意目錄的,如果不想讓它亂跑則要做以下設定
方法一:利用 /etc/ftpchroot
ee /etc/ftpchroot
在檔案裡面放要管制的人/群組
gsyan
foo
@staff
上面的設定使得 gsyan, foot 及屬於 staff 群組的人都只能在自己目錄活動
說明:小老鼠開頭的表示後面接的名稱為群組
在 FreeBSD 4.8R 以後的 /etc/ftpchroot 又新增了功能哦!
詳細的設定可以 man ftpchroot (不過,之前的版本沒這鍋 man)
方法二:利用 /etc/login.conf
這個方法適用於要處理很多人時
ee /etc/login.conf
default:\
:copyright=/etc/COPYRIGHT:\
:welcome=/etc/motd:\
...................
...................
加一行
:ftp-chroot:\
變成
default:\
:ftp-chroot:\
:copyright=/etc/COPYRIGHT:\
:welcome=/etc/motd:\
...................
...................
然後執行
cap_mkdb /etc/login.conf
將設定轉到資料庫中
這樣,所有的帳號都會做 chroot,只看得到自己的目錄
利用方法二全部管制但又想開放系統管理用的帳號不做 chroot 呢?
ee /etc/login.conf
新增下面幾行(注意藍色的部份)
注意:除了方法二的部份,下面另外新增一個 login class 叫 admin
default:\
:ftp-chroot:\
:copyright=/etc/COPYRIGHT:\
:welcome=/etc/motd:\
...................
...................
admin:\
:ftp-chroot@:\
:tc=default:
然後執行
cap_mkdb /etc/login.conf
將設定值轉到資料庫中
注意:上面用的是
:ftp-chroot@:\
小老鼠是否的意思
再來執行
vipw
修改管理員(不做chroot)的 login class 為 admin
例如:
假設系統管理員 gsyan 原來的帳號資料是
gsyan:*:1000:1000::0:0:大雄:/home/gsyan:/bin/tcsh
修改為
gsyan:*:1000:1000:admin:0:0:大雄:/home/gsyan:/bin/tcsh
說明:FreeBSD 中 /etc/master.passwd 密碼欄位依序為:
帳號名稱:密碼:UID:GID:class:強制換密碼的時間:有效時間:資料:家目錄:shell
所以要改的是第五個欄位(class)的內容
關於密碼檔的格式可以 man 5 passwd 查看
還有方法可以只開放一個帳號不 chroot 其它全部 chroot 嗎?
最近 FreeBSD 內建的 ftpd 在 /etc/ftpchroot 又多了可設定的東東
如果 man ftpchroot 可以看到說明,就可以試試下面的設定:
ee /etc/ftpchroot
假設 admin 是管理員的帳號,裡面放入下面三行:
admin /
ftp .
@ www
儲存好就可以用 ftp 連線看看
上面的設定有下面的效果:
admin 登入時會切換到 /
匿名登入時則保持原來的方式,只能在帳號指定的公用目錄活動
其它使用者則只能在個人目錄中的 www 中活動
第三行應用在 server 有 apache 提供使用者放網頁,
而 apache 設定 UserDir=www 時,以後只要告訴使用者:
『請將做好的網頁直接用自己的帳號 ftp 到主機即可』
以前都要解釋半天,請他 ftp 後把網頁放到 www 資料夾
不過,記得先將使用者的 www 目錄先建立好,不然可是連登入都無法登入哦!!
--------------------------------------------------------------------------------
提供匿名(訪客用)的 FTP 服務
1.執行
/stand/sysinstall
2.出現安裝點單『/stand/sysinstall Main Menu』
按方向鍵到『Configure』後按空白鍵
3.按方向鍵到『Networking』後按空白鍵
4.按方向鍵到『Anon FTP』後按空白鍵
5.然後輸入下面的資料
6.都好了就按 OK
7.接著輸入FTP的 GID (直接按 Enter 就可以)
8.著準備輸入進站的歡迎詞 (直接按 Enter 就可以)
9.輸入進站的歡迎詞
10.編輯完好後按 Esc ,再按 Enter 兩次即可離開
11.接著都選點單最上面的 Exit 即可
/stand/sysinstall 幫你做了什麼事?!
* 新增 FTP 用的帳號 (一般都叫 ftp)
* 新增 FTP 用的群組
* 新增 FTP 用的目錄
* 新增檔案到 ~ftp/etc/ (group,passwd,ftpmotd)
* 設定各目錄的權限
目錄名稱 擁有者 權限 ~ftp root a-w ~ftp/etc root 555 (目錄權限)444 (pwd.db group ftpmod 三個檔案) ~ftp/pub root a-w
一定要注意各目錄的權限,目錄只要有 Write 的權限,訪客就可以任意上載/修改/刪除檔案
相關檔案
/etc/ftpusers 不可使用來 ftp 連線的黑名單
/etc/ftpchroot 需要做 chroot 的帳號/群組清單
/etc/ftphosts 虛擬站台的設定檔
/etc/ftpwelcome 進站的歡迎詞
/etc/ftpmotd 登入成功後會自動顯示的訊息
/var/run/nologin 顯示訊息並拒絕登入(這檔案存在時 ftpd 會顯示內容並拒絕登入)
/var/log/ftpd 記錄用匿名方式登入時的傳輸狀況(必須有 -S 的參數,且該檔存在)
其它詳細的設定、參數請自行 man ftpd
--------------------------------------------------------------------------------
讓 fptd 可以記錄傳輸狀況
ftpd 的啟動參數有 -l 可讓 syslogd 將連線情形記錄下來,
不過必須自己設定 /etc/syslog.conf 並讓 syslogd 重讀設定檔才能發生作用
下面是設定的步驟:
產生記錄檔 ftpd
touch /var/log/ftpd
修改 /etc/syslog.conf
ee /etc/syslog.conf
找到 mail.info 那行
mail.info /var/log/maillog
在 mail.info 那行的下面新增一行
ftp.* /var/log/ftpd
將設定檔存好
讓 syslogd 重新讀取 /etc/syslog.conf
kill -HUP `cat /var/run/syslogd.pid`
※ 注意:` 是按鍵盤上毛毛蟲那個按鍵哦!
--------------------------------------------------------------------------------
以 wu-ftpd 架設 FTP
雄曰:現在都直接用 FreeBSD 內建的 ftpd ,下面的部份已經好久沒用囉!都是舊資料啦,希望不會誤導。
wu-ftp (Washington University FTP) 由於功能強大,
在 Unix 的主機上被廣為採用,或許是用的人多,也成為大家研究的焦點,
經常被發現有安全漏洞,所以安裝後一定要經常注意相關訊息,隨時更新
安裝 wu-ftpd方法一:(用 packages)
先抓取 wu-ftpd 的 package,然後再用 pkg_add -v wu-ftpd*
下面以目前的版本 2.6.1 為例
cd /tmp
ncftpget ftp://ftp.tku.edu.tw/OS/FreeBSD /packages/packages-stable/All/wu-ftpd-2.6.1.tgz
pkg_add -v wu-ftpd-2.6.1.tgz
rm wu-ftpd-2.6.1.tgz
方法二:(用 ports)
cd /usr/ports
ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/ports/ftp/wu-ftpd
cd wu-ftpd
make
make install
rm distfiles/wu-ftpd*
修改設定檔wu-ftpd 會用到的設定檔如下
/usr/local/etc/ftpaccess 主設定檔
/usr/local/etc/ftpconversions 設定檔案傳輸時,壓縮/解壓縮的程式
/usr/local/etc/ftpusers 黑名單,列入本檔中的帳號無法以 FTP 登入
/usr/local/etc/ftpgroups 黑名單,屬於本檔中群組者無法以 FTP 登入
/usr/local/etc/ftphosts 黑名單,列入本檔中的機器無法以 FTP 登入
安裝完後,在 /usr/local/etc 就會有一些 ftp*.sample 的範例,
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 包您滿載而歸
修改 /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` |