Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[转] FreeBSD下默认FTP的架設

[复制链接]
Crossday 发表于 2003-11-9 09:51:42 | 显示全部楼层 |阅读模式
原文 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`
cqfanli 发表于 2003-11-15 10:24:00 | 显示全部楼层
自帶的FTP我肯定不用的,使用系統帳號的東東,我也不敢使用,比如ftp和sendmail,我選擇的是pure-ftp和qmail,都是用mysql來裝帳號和密碼的,這樣子我不用擔心高手的入侵,不過隨之而來有一個問題讓我很麻煩!
就是系統建立的文件,用戶不能自己刪除,唉~~~
回复

使用道具 举报

何谓伊人 发表于 2008-9-8 12:50:06 | 显示全部楼层
不容易。
来DZ这么久,刚刚发现戴叔叔的ID
回复

使用道具 举报

myforever 发表于 2008-9-17 22:31:00 | 显示全部楼层
我用的是vs-ftpd

基本是局域网内用

LFS+vsftpd还是不错的

演示网址为:www.b2tang.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-18 21:25 , Processed in 0.028037 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表