首页

FreeBSD FTP 的架设教程

?你的 FreeBSD 安?好後就?冉 FTP ,只是??不??铀??眩 有人?得 FreeBSD ?冉ǖ ftpd 太?春,??硗庥?e的 ftpd ?砣〈? 常?的替代方案有:proftpd , pureftp ......等,不?要??r注意更新,因? FTP 程式常常被找到有安全漏洞。

1 以 FreeBSD ?冉ǖ ftpd 提供服?

一般??恚??你安?好 FreeBSD ,FTP 的服?粘淌 /usr/libexec/ftpd 就有了
只要修改一下 /etc/inetd.conf , FTP 服?站鸵呀?可以提供?有本?C?ぬ?的人使用

1-1 打? FTP 服??/h4>

FreeBSD 系?的?? ftpd 提供 daemon 模式(stand alone)和由 inetd ?? ftpd ?煞N方式
?煞N方式比?起?恚?aemon 的方式?合?ν??r???使用多,???大的主?C

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

1-1-1-1 立即?? ftpd daemon

如果只是要?上??臃?罩灰?绦校?/p>

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

??嫡f明:

  • -D :? ftpd 以 daemon 的方式??印
  • -l :叫 syslogd ??每次的??,用?纱 -l ?t可以?使用的?幼鞫加??
    -l 要留下?????需要配合修改 /etc/syslog.conf 才???佑??

ftpd ?有很多的??担?梢 man ftpd 查看。

1-1-1-2 如何? FreeBSD ??C?r自??? ftpd

如果只用前面的方法?? ftpd daemon,下次系?重新??C後就?]了,?榱俗?它能自???樱???可以把??又噶罘湃 /etc/rc.local 中或是仿 /usr/local/etc/rc.d 的?n案,自己???? ftpd.sh 。

例一:

ee /etc/rc.local

在?面放一行:

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

例二:

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

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

?面放入下面的?热荩?br />


#!/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

存好?n後再更改一下?n案的?嘞蓿??它可以?绦校?/p>

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

??樱?? FreeBSD ??C?r就????? ftpd ,也可以利用 /usr/local/etc/rc.d/ftpd stop ?硗V狗?眨?绦?r要加什???稻托薷 ftpd_flag 那行。

1-1-2 方法二:由 inetd ??? ftpd

??方式,想?然??,就是要修改 /etc/inetd.conf ?樱?/p>

ee /etc/inetd.conf

先?z查一下 /etc/inetd.conf 中有?]有下面?行:

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

如果像上面那行一?樱?_?是井字?,表示?在 FTP 服?疹A?是被??的。井字?表示?解,不使用,只要把井字?去掉改成下面的?幼樱?/p>

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

存?n後?绦邢旅娴闹噶睿?/p>

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

? inetd 重新抓取 /etc/inetd.conf ?定?n就好了

注意:上面的 ` 是 Esc ?下面那?毛毛?的按?哦,可?e打成?我??

1-2 停止 FTP 服??/h4>

如果要停止 FTP 服?眨?粗?笆且 daemon 模式??舆?是 inetd 模式??佣?兴?煌??/p>

1-2-1 daemon 模式

daemon 模式可以?绦邢铝兄噶?斫K止 ftpd 的程序:

killall ftpd

如果之前是? ftpd 放在 /etc/rc.local 中?碛上到y在??C?r自???樱?梢杂孟旅娴姆椒?硗V棺?犹峁 FTP 服?铡?/p>

先打? /etc/rc.local ?砭??,?绦校?/p>

ee /etc/rc.local

??n案中,?绦 ftpd 那行的最前面加??井字?,?Υ婧眉纯伞?/p>

1-2-2 inetd 模式

?初是以 inetd 模式?硖峁┓?盏模?t要修改 inetd 的?定?n /etc/inetd.conf ,?K? inetd 重新?取?定。

先打? /etc/inetd.conf ?砭??,?绦校?/p>

ee /etc/inetd.conf

?⒃O定?n中,有 ftpd 那行的前面加上井字?後,?Υ嬖O定?n。

? inetd 重??定?n,?绦邢旅嬷噶睿?/p>

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

如果要?? FTP 服是否已?停止了,可以?绦校?/p>

netstat -na

看看下面?行是不是已?消失了:

tcp4 0 0 *.21 *.* LISTEN

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

如果?]有特殊?定,使用者用自己的?ぬ? FTP 到主?C後,可以自由的切?Q任意目?的,如果不想?它?y跑?t要做以下?定。

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

FreeBSD 的 ftpd 以 /etc/ftpchroot ?砜刂颇男┤嘶蛉航M要如何 chroot ,所以我????ⅲ?略鲞@???定?n?砭??。

ee /etc/ftpchroot

在?n案?面放入我??要管制的人或群?:

gsyan
foo
@staff

上面的?定使得 gsyan, foo 及?凫 staff 群?的人都只能在自己目?活?印?br />
?明:

小老鼠??的表示後面接的名??槿航M。

有方法可以只?放一???ぬ?不 chroot 其它全部 chroot ?幔?/strong>

最近 FreeBSD ?冉ǖ ftpd 在 /etc/ftpchroot 又多了可?定的?|?|, 如果 man ftpchroot 可以看到?明,就表示可以使用下面的的?定?磉_到只?放部份?ぬ?不?定在??人目?的目的。

首先?? /etc/ftpchroot ?砭??:

ee /etc/ftpchroot

假? admin 是管理?T的?ぬ?,? admin 可以在系?中到?游走,就?面放入下面三行:

admin /
ftp .
@ www

?Υ婧镁涂梢杂 ftp ??看看, 上面的?定有底下的效果:

  • 第一行?定:admin 登入?r???Q到 /
  • 第二行?定:匿名登入?r?t保持原?淼姆绞剑?荒茉?ぬ?指定的公用目?活?印
  • 第三行?定:其它使用者?t只能在??人目?中的 www ?料?A中活?印

第三行??迷 server 有 apache 提供使用者放??, 而 apache ?定 UserDir=www ?r,以後只要告?使用者: 『??⒆龊玫木W?直接用自己的?ぬ? ftp 到主?C即可』, 以前都要解?半天,?他 ftp 後把??放到 www ?料?A, 不?,?得先?⑹褂谜叩 www 目?先建立好,不然可是??B登入都?o法登入哦!!

在 FreeBSD 4.8R 以後的 /etc/ftpchroot 又新增了功能,??的?定可以 man ftpchroot (不?,之前的版本?]?? man )。

1-3-2 方法二:利用 /etc/login.conf

???方法是利用使用者?料? (系?密??n /etc/master.passwd) 中 login class 的?谖唬?碓O定使用者?於的 class ,然後在 /etc/login.conf 中?定各 class 在 FTP chroot 的?幼?楹危? /etc/ftpchroot 不方便?定?r,?用於要?理很多人的??r。

???font color="#ff0000"> /etc/login.conf ?硇薷模?绦校?/p>

ee /etc/login.conf

然後找到下面 default: ??的哪?仔校??似下面的?热荩?/p>

default:/
:copyright=/etc/COPYRIGHT:/
:welcome=/etc/motd:/
...................略

加下面?一行:

:ftp-chroot:/

?成:

default:/
:ftp-chroot:/
:copyright=/etc/COPYRIGHT:/
:welcome=/etc/motd:/
...................略

然後?绦邢铝羞@行指令,把 login.conf ?成?料?旄袷?/p>

cap_mkdb /etc/login.conf

??樱??械?ぬ?都?? chroot,活?拥墓???拖薅ㄔ谧约旱哪夸?中。

想全部管制,但又想?放系?管理用的?ぬ?不做 chroot 呢?

前面的方法我???定的是 default ??? login class 要做 FTP 的 chroot,也就是所有人共同的?定,想?系?管理可以到?游走,就?定一??系管的 class ,?K且? ftp-chroot 的?傩匀サ艏纯蛇_到部份?放的目的。

?? /etc/login.conf 新增系管的 login class 叫 admin,?K加入 ftp-chroot ?榉竦脑O定:

ee /etc/login.conf

新增下面?仔?注意?色的部份), 注意:除了前面 defaults: 下的 ftp-chroot 部份,我??在下面另外新增一?? login class 叫 admin:


default:/
:ftp-chroot:/
:copyright=/etc/COPYRIGHT:/
:welcome=/etc/motd:/
...................略

admin:/
:ftp-chroot@:/
:tc=default:

...................略

然後?绦邢铝羞@行指令,把 login.conf ?成?料?旄袷剑?/p>

cap_mkdb /etc/login.conf

注意:上面在 admin ??? class 中用的是:

:ftp-chroot@:/

ftp-chroot 多了??小老鼠哦!它代表???值要相反的意思,也就不做 ftp-chroot。

再?恚???要告?系?,??凫 admin ??? login class ,直接修改?ぬ??料?欤?绦?strong>

vipw

修改管理?T (不做 chroot) 的 login class ? admin

例如:

假?系?管理?T gsyan 原?淼?ぬ??料是:

gsyan:*:1000:1000::0:0:大雄:/home/gsyan:/bin/tcsh

要?⑺? login class 修改? admin ,就改?橄旅娴?幼樱?/p>

gsyan:*:1000:1000:admin:0:0:大雄:/home/gsyan:/bin/tcsh

都修改完了就?Υ?n案,利用 FTP ??以不同身份登入?y?看看。

?明:

FreeBSD 中 /etc/master.passwd 密??谖灰佬?椋?/p>

?ぬ?名?:密?:UID:GID:class:??制?Q密?的?r?:有效?r?:?料:家目?:shell

所以要改的 login class 是第五???谖弧?/p>

?於密??n的格式可以 man 5 passwd 查看

?⒉煌?矸莸氖褂谜叻???? login class,?K利用 /etc/login.conf ?碓O定各身份能?蚴褂玫南到y?源是?M不?的管制工具,非常值得好好的研究,??的?热菘梢 man login.conf

1-4 提供匿名(?客用)的 FTP 服??/h2>

?在系?中?]有?ぬ??客可以下? FTP 站中的?n案,??叫匿名的 FTP 服? (Anonymous FTP),要提供??服?毡仨?有一??叫 ftp 的?ぬ??K建立好相?的目?及?n案,?部份如果不清楚,利用 /stand/sysinstall ?碜鍪亲钶p?不?的。底下是?定的步?:

1.呼叫 /stand/sysinstall ,?绦校?/p>

/stand/sysinstall

2.?出?安???巍?stand/sysinstall Main Menu』, 按方向?移到『Configure』,然後按空白?

FreeBSD FTP 的架设教程

3.?入到『FreeBSD Configuration Menu』後,按方向?移到『Networking』,然後按空白?

FreeBSD FTP 的架设教程

4.?入到『Network Services Menu』後,按方向?移到『Anon FTP』,後按空白?

FreeBSD FTP 的架设教程

5.?入到『Anonymous FTP Configuration』後,?入下面的?料:

FreeBSD FTP 的架设教程

6.?入完?後就按 OK

7.接著?入FTP的 GID (使用??值,直接按 Enter ?就可以)。

FreeBSD FTP 的架设教程

8.接著,???是否要?生?站?g迎? (welcome message),直接按 Enter ?就可以。

FreeBSD FTP 的架设教程

9.?入?站的?g迎?:

FreeBSD FTP 的架设教程

10.??完好後按 Esc ?,再按 Enter ??纱渭纯纱?n??。

11.接著都???巫钌厦娴 Exit 即可。

/stand/sysinstall ?湍阕隽耸颤N事?!

  • 新增 FTP 用的?ぬ? (一般都叫 ftp)
  • 新增 FTP 用的群?
  • 新增 FTP 用的目?
  • 新增?n案到 ~ftp/etc/ (group,passwd,ftpmotd)
  • ?定各目?的?嘞蓿
目?名? ?碛姓?/td> ?嘞?/td>
~ftp root a-w
~ftp/etc root 555 (目??嘞?
444 (pwd.db group ftpmod 三???n案)
~ftp/pub root a-w

一定要注意各目?的?嘞蓿?夸?只要有 Write 的?嘞蓿?L客就可以任意上?/修改/?h除?n案,如果 FTP 主?C被有心人士??可以任意上??n案,呵~?路流量可能??本?爆增。

相??n案:

  • /etc/ftpusers 不可使用? ftp ??的黑名?
  • /etc/ftpchroot 需要做 chroot 的?ぬ?/群?清?
  • /etc/ftphosts ??M站台的?定?n
  • /etc/ftpwelcome ?站的?g迎?
  • /etc/ftpmotd 登入成功後???语@示的?息
  • /var/run/nologin ?示?息?K拒?登入(??n案存在?r ftpd ??@示?热?K拒?登入)
  • /var/log/ftpd ??用匿名方式登入?r的?鬏???r(必?有 -S 的???且??n存在)

其它??的?定、??嫡?自行 man ftpd

1-5 ? fptd 可以???鬏???r

ftpd 的????涤 -l 可以???系???的 syslogd ? FTP ??情形??下?恚?贿^我??必?先?定 /etc/syslog.conf ,?K且? syslogd 重新?取?定?n,才能?生作用。

下面是?定的步?:

1.?生空的???n /var/log/ftpd ,?绦邢旅娴闹噶睿?/p>

touch /var/log/ftpd

2. 修改 syslod 的?定?n

?? /etc/syslog.conf ?砭??:

ee /etc/syslog.conf

找到含有 mail.info 的那一行

mail.info /var/log/maillog

在前述那行的下面新增一行:

ftp.* /var/log/ftpd

加完以後,按 Esc ?,再按?纱 Enter ?,?⒃O定?n?Υ婧谩?/p>

3.? syslogd 重新?取 /etc/syslog.conf

?绦邢旅娴闹噶钔ㄖ syslogd 重新?取?定:

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

※ 注意:` 是按??上毛毛?那??按?哦!

2 FTP 的架?─pure-ftpd

  • 另一??不?的 FTP

3 以 wu-ftpd 架? FTP (建?用?e的方案取代)

雄曰:
?在都直接用 FreeBSD ?冉ǖ ftpd ,下面的部份已?好久?]用?樱《际桥f?料啦,希望不??`?А?/font>

wu-ftp (Washington University FTP) 由於功能??大,?去在 Unix Like 的主?C上被?V??裼茫?蛟S是用的人多,也成?榇蠹已芯康慕裹c, ?常被??有安全漏洞,所以安?後一定要?常注意相??息,??r更新。

3-1 安? wu-ftpd

方法一:用 packages

pkg_add -v ftp://ftp.tku.edu.tw/OS/FreeBSD/packages/packages-stable/Latest/wu-ftpd.tgz

方法二:用 ports

?? wu-ftpd ?r需要用到 autoconf213 ,?得要先安?好?工具,?K?? ports tree 中有 /usr/ports/devel/autoconf213 才不??霈F??。

如果?]有可以?绦邢旅嬷噶畎惭b autoconf213 及抓取 ports 相??n案:

pkg_add -v ftp://ftp.tku.edu.tw/OS/FreeBSD/packages/packages-stable/Latest/autoconf213.tgz

cd /usr/ports/devel
ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/ports/devel/autoconf213
cd /usr/ports/ftp
ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/ports/ftp/wu-ftpd

??浜冕峒纯??溥M行??及安?:

cd /usr/ports/ftp/wu-ftpd
make
make install

3-2 修改?定?n

wu-ftpd ??玫降脑O定?n如下:

  • /usr/local/etc/ftpaccess :主?定?n
  • /usr/local/etc/ftpconversions :?定?n案?鬏??r,?嚎s/解?嚎s的程式
  • /usr/local/etc/ftpusers :黑名?危?腥氡?n中的?ぬ??o法以 FTP 登入
  • /usr/local/etc/ftpgroups :黑名?危?凫侗?n中群?者?o法以 FTP 登入
  • /usr/local/etc/ftphosts :黑名?危?腥氡?n中的?C器?o法以 FTP 登入

安?完後,在 /usr/local/etc 就??幸恍 ftp*.sample 的?例,我????一份?硇薷模?/p>

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 中常用的?定:

功能 ?法
定???e(class) class??e名?成?T(real,guest,anonyous)???址
class TP real,guest,anonymous *.tp.edu.tw
限制上?人?导?r段 limitclass名?人?怠?r??息?n(??β??
limit TP 50 any /usr/local/etc/ftp.msg.Full
? TP ??? class 同?r最多 50 ????,?M了就?示 ftp.msg.Full中的?热?/td>
???? log commandsclass名?
log transfersclass名?inbound,outbound
控制可?绦械闹噶?/td> deleteyes 或 no??e
overwriteyes 或 no??e
renameyes 或 no??e
chmodyes 或 no??e
umaskyes 或 no??e
???r只?示主?C名?,不?示版本... greeting brief
??做 chroot restricted-uid使用者?ぬ?
restricted-uid * (?⑺?惺褂谜 chroot)
不做 choot unrestricted-uid使用者?ぬ?
unrestricted-uid gsyan (gsyan不做 chroot)

wu-ftp 可以做的事??在太多了,其它的?定 man ftpaccess 包您可以?M?而?w。

3-3 修改 /etc/inetd.conf

我??打算? wuftpd 以 inetd 的模式提供服?眨??砸?刃薷 /etc/inetd.conf ,然後? inetd 重新?取?定?n。

?? /etc/inetd.conf ?硇薷模?/p>

ee /etc/inetd.conf

?⒑? ftp ??的那行改?橄旅娴?热荩?/p>

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

然後? inetd 重新?取?定?n,?绦邢旅娴闹噶睿?/p>

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

最後利用 netstat -na ?碛^察服?帐欠??樱?蚴且 FTP ????y?。

?得??r注意安全警示,有???要?上更新程式,以免被?!