发布于2026-06-02 阅读(0)
扫一扫,手机访问
FreeBSD 安装完成之后,其实系统里已经内置了 FTP 服务。只不过,默认情况下它并没有被激活。很多人觉得系统自带的 ftpd 功能相对简单,会选择用 proftpd 或 pu re-ftpd 这样的第三方方案来替代。但需要特别留意的是,FTP 服务程序经常爆出安全漏洞,选用第三方软件时一定要记得及时更新。
基本上,只要 FreeBSD 装好了,FTP 服务程序 /usr/libexec/ftpd 就已经准备就绪。你只需要调整一下 /etc/inetd.conf 这个配置文件,本机用户就能直接使用 FTP 服务了。
FreeBSD 预装的 ftpd 支持两种运行模式:一种是独立的 daemon 模式(stand alone),另一种是由 inetd 这个超级守护进程来启动。从实际应用来看,daemon 模式更适合那些同时在线人数多、负载较重的主机。
如果只是想临时开一下服务,直接跑一条命令就行了:
/usr/libexec/ftpd -D -l -l
参数解释一下:
-l,连用户具体做了什么操作都会记录下来。不过要注意,-l 要生效,还得配合修改 /etc/syslog.conf,否则日志不会真正开始写。
ftpd 的选项其实挺多的,想了解更多可以 man 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:
ee /usr/local/etc/rc.d/ftpd.sh
写入以下内容:
#!/bin/shftpd_flag="-l -l -S"ftpd="/usr/libexec/ftpd"case "$1" 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 $0` {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 那一行就行。
这种方式,自然是修改 /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 |
保存后执行下面的命令,让 inetd 重新加载配置:
kill -HUP `cat /var/run/inetd.pid`
注意,这里的 ` 是 Esc 键下面那个反引号,不是单引号。
想停掉 FTP 服务,要看当初是用 daemon 模式启动的,还是 inetd 模式启动的。
对于 daemon 模式,直接终止 ftpd 进程就可以了:
killall ftpd
如果之前是把 ftpd 放在 /etc/rc.local 里实现开机自启动,可以用下面的方法关掉它:
打开
/etc/rc.local编辑:ee /etc/rc.local
在执行 ftpd 的那一行前面加个井字号,保存好就行。
如果是通过 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
如果没有特殊设置,用户用 FTP 登录后可以在主机上自由切换目录。如果不想让他们到处乱跑,就得做一些配置。
FreeBSD 的 ftpd 通过 /etc/ftpchroot 来控制哪些用户或群组需要做 chroot。所以,新建或打开这个配置文件:
ee /etc/ftpchroot
在里面填入要限制的用户或群组:
| gsyan foo @staff |
上面的设置,会让 gsyan、foo 以及属于 staff 群组的用户都只能待在自己的目录里。
说明: 以 @ 开头的表示后面接的是群组名称。
能不能只开放一部分人不做 chroot,其他所有人都锁住?
新版 FreeBSD 的 ftpd 在 /etc/ftpchroot 里增加了新的配置项。如果 man ftpchroot 能看到说明,那就可以用下面的配置,只开放特定用户,其余全部锁定。
打开 /etc/ftpchroot 编辑:
ee /etc/ftpchroot
假设 admin 是管理员,可以到处浏览,就在文件里放这三行:
| admin / ftp . @ www |
保存后用 FTP 试一下,效果是这样的:
www 文件夹里。这个第三行的场景很实用:如果服务器上装了 Apache 并且设置了 UserDir=www,以后只要告诉用户“把做好的网页直接 FTP 上传到主机就行”。以前还得费半天口舌解释“请放到 www 文件夹里”。不过,记得先帮用户建好 www 目录,不然他们连登录都登不进去。
在 FreeBSD 4.8R 之后,/etc/ftpchroot 又增加了新的功能,具体可以 man ftpchroot。(不过,旧版本可能没有这个 man page。)
这个方法是通过用户数据库(密码文件 /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 要做 chroot,这是所有人的通用设定。想让管理员可以自由活动,就新建一个管理用的 class,然后把 ftp-chroot 属性去掉就行。
打开
/etc/login.conf,新增一个叫admin的管理员 class,并设置ftp-chroot为否:ee /etc/login.conf
新增下面几行,注意蓝色的部分:
default:\
:ftp-chroot:\ :copyright=/etc/COPYRIGHT:\ :welcome=/etc/motd:\ ......(略) admin:\ :ftp-chroot@:\ :tc=default: ......(略) |
然后执行:
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。
让访客可以从 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 退出。
/stand/sysinstall 到底帮你做了些什么?
- 新增了一个叫
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。
ftpd 的启动参数 -l 可以让负责记录日志的 syslogd 把 FTP 连接情况记录下来。不过,我们得先配置 /etc/syslog.conf,并让 syslogd 重新加载配置,这样才能生效。
下面是具体步骤:
1. 创建一个空的日志文件
/var/log/ftpdtouch /var/log/ftpd
2. 修改 syslogd 的配置文件
打开
/etc/syslog.conf:ee /etc/syslog.conf
找到包含
mail.info的那一行:mail.info /var/log/maillog
在这一行的下面新增一行:
ftp.* /var/log/ftpd
加完后,按 Esc 键,再按两次 Enter 键保存文件。
3. 让 syslogd 重新加载配置
执行下面的命令通知 syslogd 重读配置:
kill -HUP `cat /var/run/syslogd.pid`
※ 注意:
`是键盘上那个反引号键。
另一个值得考虑的 FTP 服务器方案
雄曰:现在都直接用 FreeBSD 内建的 ftpd 了,下面的内容已经很久没更新,都是旧资料了,希望不会误导大家。
wu-ftp(Washington University FTP)因为功能强大,过去在 Unix-like 主机上被广泛采用。但也正因为用户多,它成了大家研究的重点对象,经常被发现存在安全漏洞。所以,安装后一定要经常关注安全公告,随时更新。
方法一:用 packages
pkg_add -v ftp://ftp.tku.edu.tw/OS/FreeBSD/packages/packages-stable/Latest/wu-ftpd.tgz
方法二:用 ports
编译 wu-ftpd 时需要 autoconf213,记得先装好这个工具,并确认 ports tree 中有
/usr/ports/devel/autoconf213,否则会报错。如果没有,可以执行下面的命令安装 autoconf213 并抓取 ports 相关文件:
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
准备好后就可以编译安装了:
cd /usr/ports/ftp/wu-ftpd
make
make install
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,anonymous) 来源网址 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) |
| 不做 chroot | unrestricted-uid 用户 unrestricted-uid gsyan (gsyan 不做 chroot) |
wu-ftp 能做的事情实在太多,其他配置可以 man ftpaccess,保证收获满满。
我们打算让 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 软件测试一下。
记得随时关注安全公告,有问题要马上更新程序,免得被黑。
上一篇:出海北美,需要知道的六件事
下一篇:FreeBSD 数据转移办法
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9