FreeBSD FTP 的架设


当你的 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/shftpd_flag="-l -l -S"ftpd="/usr/libexec/ftpd"case "{GetProperty(Content)}" instart)        [ -x ${ftpd} ] && ${ftpd} -D ${ftpd_flag} > /dev/null && echo -n ' ftpd        ;;stop)        /usr/bin/killall ftpd > /dev/null && echo -n ' ftpd'        ;;*)        echo "Usage: `basename {GetProperty(Content)}` {start|stop}" >&2        ;;esacexit 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 群组的人都只能在自己目录活动。

说明:

小老鼠开头的表示後面接的名称为群组。


有方法可以只开放一个帐号不 chroot 其它全部 chroot 吗?

最近 FreeBSD 内建的 ftpd 在 /etc/ftpchroot 又多了可设定的东东, 如果 man ftpchroot 可以看到说明,就表示可以使用下面的的设定来达到只开放部份帐号不锁定在个人目录的目的。

首先开启 /etc/ftpchroot 来编辑:

ee /etc/ftpchroot

假设 admin 是管理员的帐号,让 admin 可以在系统中到处游走,就里面放入下面三行:

admin    /
ftp    .
@    www

储存好就可以用 ftp 连线看看, 上面的设定有底下的效果:

第一行设定:admin 登入时会切换到 /
第二行设定:匿名登入时则保持原来的方式,只能在帐号指定的公用目录活动。
第三行设定:其它使用者则只能在个人目录中的 www 资料夹中活动。
第三行应用在 server 有 apache 提供使用者放网页, 而 apache 设定 UserDir=www 时,以後只要告诉使用者: 『请将做好的网页直接用自己的帐号 ftp 到主机即可』, 以前都要解释半天,请他 ftp 後把网页放到 www 资料夹, 不过,记得先将使用者的 www 目录先建立好,不然可是会连登入都无法登入哦!!

在 FreeBSD 4.8R 以後的 /etc/ftpchroot 又新增了功能,详细的设定可以 man ftpchroot (不过,之前的版本没这锅 man )。

1-3-2 方法二:利用 /etc/login.conf
这个方法是利用使用者资料库 (系统密码档 /etc/master.passwd) 中 login class 的栏位,来设定使用者隶於的 class ,然後在 /etc/login.conf 中设定各 class 在 FTP chroot 的动作为何,在 /etc/ftpchroot 不方便设定时,适用於要处理很多人的状况。

开启 /etc/login.conf 来修改,执行:

ee /etc/login.conf

然後找到下面 default: 开头的哪几行,类似下面的内容:

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

加下面这一行:

:ftp-chroot:\

变成:

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

然後执行下列这行指令,把 login.conf 转成资料库格式

cap_mkdb /etc/login.conf

这样,所有的帐号都会做 chroot,活动的范围就限定在自己的目录中。


想全部管制,但又想开放系统管理用的帐号不做 chroot 呢?

前面的方法,我们设定的是 default 这个 login class 要做 FTP 的 chroot,也就是所有人共同的设定,想让系统管理可以到处游走,就设定一个系管的 class ,并且将 ftp-chroot 的属性去掉即可达到部份开放的目的。

开启 /etc/login.conf 新增系管的 login class 叫 admin,并加入 ftp-chroot 为否的设定:

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 转成资料库格式:

cap_mkdb /etc/login.conf

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

:ftp-chroot@:\

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

再来,我们要告诉系统,谁属於 admin 这个 login class ,直接修改帐号资料库,执行

vipw

修改管理员 (不做 chroot) 的 login class 为 admin

例如:

假设系统管理员 gsyan 原来的帐号资料是:

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

要将它的 login class 修改为 admin ,就改为下面的样子:

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

都修改完了就储存档案,利用 FTP 软体以不同身份登入测试看看。

说明:

FreeBSD 中 /etc/master.passwd 密码栏位依序为:

帐号名称:密码:UID:GID:class:强制换密码的时间:有效时间:资料:家目录:shell

所以要改的 login class 是第五个栏位。

关於密码档的格式可以 man 5 passwd 查看

将不同身份的使用者分为几个 login class,并利用 /etc/login.conf 来设定各身份能够使用的系统资源是满不错的管制工具,非常值得好好的研究,详细的内容可以 man login.conf 。


1-4 提供匿名(访客用)的 FTP 服务
让在系统中没有帐号访客可以下载 FTP 站中的档案,这种叫匿名的 FTP 服务 (Anonymous FTP),要提供这种服务必须有一个叫 ftp 的帐号并建立好相关的目录及档案,这部份如果不清楚,利用 /stand/sysinstall 来做是最轻松不过的。底下是设定的步骤:

1.呼叫 /stand/sysinstall ,执行:

/stand/sysinstall

2.当出现安装点单『/stand/sysinstall Main Menu』, 按方向键移到『Configure』,然後按空白键

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

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

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

6.输入完毕後就按 OK

7.接着输入FTP的 GID (使用预设值,直接按 Enter 键就可以)。

8.接着,询问是否要产生进站欢迎词 (welcome message),直接按 Enter 键就可以。

9.输入进站的欢迎词:

10.编辑完好後按 Esc 键,再按 Enter 键两次即可存档离开。

11.接着都选点单最上面的 Exit 即可。

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3