当前位置:

首页 > 系统应用 > FreeBSD FTP 的架设教程

FreeBSD FTP 的架设教程

FreeBSD 安装完成之后,其实系统里已经内置了 FTP 服务。只不过,默认情况下它并没有被激活。很多人觉得系统自带的 ftpd 功能相对简单,会选择用 proftpd 或 pu re-ftpd 这样的第三方方案来替代。但需要特别留意的是,FTP 服务程序经常爆出安全漏洞,选用第三方软件时一定要记

FreeBSD 安装完成之后,其实系统里已经内置了 FTP 服务。只不过,默认情况下它并没有被激活。很多人觉得系统自带的 ftpd 功能相对简单,会选择用 proftpd 或 pu re-ftpd 这样的第三方方案来替代。但需要特别留意的是,FTP 服务程序经常爆出安全漏洞,选用第三方软件时一定要记得及时更新。

1. 使用 FreeBSD 内建的 ftpd 提供服务

基本上,只要 FreeBSD 装好了,FTP 服务程序 /usr/libexec/ftpd 就已经准备就绪。你只需要调整一下 /etc/inetd.conf 这个配置文件,本机用户就能直接使用 FTP 服务了。

1-1 打开 FTP 服务

FreeBSD 预装的 ftpd 支持两种运行模式:一种是独立的 daemon 模式(stand alone),另一种是由 inetd 这个超级守护进程来启动。从实际应用来看,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:

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 那一行就行。

1-1-2 方法二:由 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

保存后执行下面的命令,让 inetd 重新加载配置:

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

注意,这里的 ` 是 Esc 键下面那个反引号,不是单引号。

1-2 停止 FTP 服务

想停掉 FTP 服务,要看当初是用 daemon 模式启动的,还是 inetd 模式启动的。

1-2-1 daemon 模式

对于 daemon 模式,直接终止 ftpd 进程就可以了:

killall ftpd

如果之前是把 ftpd 放在 /etc/rc.local 里实现开机自启动,可以用下面的方法关掉它:

打开 /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,其他所有人都锁住?

新版 FreeBSD 的 ftpd 在 /etc/ftpchroot 里增加了新的配置项。如果 man ftpchroot 能看到说明,那就可以用下面的配置,只开放特定用户,其余全部锁定。

打开 /etc/ftpchroot 编辑:

ee /etc/ftpchroot

假设 admin 是管理员,可以到处浏览,就在文件里放这三行:

admin /

ftp .

@ www

保存后用 FTP 试一下,效果是这样的:

  • 第一行: admin 登录后会切换到根目录。
  • 第二行: 匿名登录保持原样,只能在指定的公共目录里活动。
  • 第三行: 其他所有用户登录后,只能待在个人目录下的 www 文件夹里。

这个第三行的场景很实用:如果服务器上装了 Apache 并且设置了 UserDir=www,以后只要告诉用户“把做好的网页直接 FTP 上传到主机就行”。以前还得费半天口舌解释“请放到 www 文件夹里”。不过,记得先帮用户建好 www 目录,不然他们连登录都登不进去。

在 FreeBSD 4.8R 之后,/etc/ftpchroot 又增加了新的功能,具体可以 man ftpchroot。(不过,旧版本可能没有这个 man page。)

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 要做 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。

1-4 提供匿名(访客用)的 FTP 服务

让访客可以从 FTP 站下载文件,这就是匿名 FTP 服务(Anonymous FTP)。要提供这项服务,必须有一个叫 ftp 的用户,并建好相关的目录和文件。如果不太清楚怎么搞,用 /stand/sysinstall 来操作是最省事的。步骤如下:

1. 调用 /stand/sysinstall:

/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. 然后问是否要生成欢迎词(welcome message),直接按 Enter 键就行。

9. 输入欢迎词内容:

FreeBSD FTP 的架设教程

10. 编辑完后按 Esc 键,再按两次 Enter 键保存退出。

11. 最后都选菜单最上面的 Exit 退出。

/stand/sysinstall 到底帮你做了些什么?

  • 新增了一个叫 ftp 的用户。
  • 新增了对应的群组。
  • 创建了 FTP 相关的目录。
  • 把一些文件复制到 ~ftp/etc/ 下(包括 group、passwd、ftpmotd)。
  • 设置好了各个目录的权限:
目录名称拥有者权限
~ftproota-w
~ftp/etcroot555 (目录权限)

444 (pwd.db group ftpmod 三个档案)

~ftp/pubroota-w

一定要特别注意各个目录的权限。如果目录有 Write 权限,访客就能随意上传、修改、删除文件。一旦被有心人士发现可以随意上传文件,那网络流量可能会瞬间爆增。

相关配置文件:

  • /etc/ftpusers —— 禁止使用 FTP 的黑名单。
  • /etc/ftpchroot —— 需要做 chroot 的用户/群组列表。
  • /etc/ftphosts —— 虚拟主机的配置文件。
  • /etc/ftpwelcome —— 登录前的欢迎词。
  • /etc/ftpmotd —— 登录成功后自动显示的信息。
  • /var/run/nologin —— 如果这个文件存在,ftpd 会显示其内容并拒绝登录。
  • /var/log/ftpd —— 记录匿名登录时的传输状况(需要启动参数 -S,且该文件必须存在)。

其他更详细的设置和参数,请自行 man ftpd。

1-5 让 ftpd 记录传输状况

ftpd 的启动参数 -l 可以让负责记录日志的 syslogd 把 FTP 连接情况记录下来。不过,我们得先配置 /etc/syslog.conf,并让 syslogd 重新加载配置,这样才能生效。

下面是具体步骤:

1. 创建一个空的日志文件 /var/log/ftpd

touch /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`

※ 注意:` 是键盘上那个反引号键。

2. FTP 的架设 — pu re-ftpd

  • 另一个值得考虑的 FTP 服务器方案

3. 以 wu-ftpd 架设 FTP (建议用其他方案替代)

雄曰:现在都直接用 FreeBSD 内建的 ftpd 了,下面的内容已经很久没更新,都是旧资料了,希望不会误导大家。

wu-ftp(Washington University FTP)因为功能强大,过去在 Unix-like 主机上被广泛采用。但也正因为用户多,它成了大家研究的重点对象,经常被发现存在安全漏洞。所以,安装后一定要经常关注安全公告,随时更新。

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 时需要 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

3-2 修改配置文件

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
连接时做 chrootrestricted-uid 用户

restricted-uid * (将所有用户 chroot)

不做 chrootunrestricted-uid 用户

unrestricted-uid gsyan (gsyan 不做 chroot)

wu-ftp 能做的事情实在太多,其他配置可以 man ftpaccess,保证收获满满。

3-3 修改 /etc/inetd.conf

我们打算让 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 软件测试一下。

记得随时关注安全公告,有问题要马上更新程序,免得被黑。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
系统应用 FTP
相关文章 更多
windows 安装 microsoft store
windows 安装 microsoft store

了解如何在Windows 10/11中打开和使用Microsoft Store。本文详解开始菜单入口、应用搜索、库管理及更新操作,并提供安装异常时的排查思路与缓存重置方法。

process lasso pro 怎么设置
process lasso pro 怎么设置

新手如何设置 Process Lasso 专业版?本文详解主窗口、ProBalance、性能模式、应用电源计划及效率模式的配置方法,助您优化系统响应与进程优先级。

windows自学教程零基础入门操作详解
windows自学教程零基础入门操作详解

适合新手的Windows自学教程,详解开始菜单搜索、任务栏快速设置、文件资源管理器导航及系统设置入口,助你快速熟悉Windows 11/10基础操作。

startallback如何卸载干净并清除残留文件
startallback如何卸载干净并清除残留文件

指导用户安全卸载StartAllBack,包括恢复界面设置、通过Windows设置移除程序、重启验证及处理残留异常的方法,避免误操作导致系统不稳定。

windows 10 安装 程序找不到U盘的解决方法
windows 10 安装 程序找不到U盘的解决方法

遇到Windows 10安装时找不到U盘的情况?本文详解如何区分系统识别、启动菜单和安装界面三类问题,涵盖官方介质制作、USB接口选择、UEFI设置及驱动加载方法,助您快速解决安装障碍。

windows卸载软件在哪里卸载的详细操作教程
windows卸载软件在哪里卸载的详细操作教程

想知道Windows卸载软件在哪里操作?本文详解设置、控制面板、开始菜单及Store应用的卸载入口,提供备份数据、处理卸载向导及清理残留的完整指南,避免误删系统组件。

Groupy开机启动设置在哪里及具体操作方法
Groupy开机启动设置在哪里及具体操作方法

想让Groupy登录Windows后自动运行?本文详解在系统设置和任务管理器中开启Groupy开机启动的方法,以及通过启动文件夹手动添加的技巧,最后演示如何验证窗口拖放分组效果。

Windows10纯净安装清空全盘数据操作流程
Windows10纯净安装清空全盘数据操作流程

详解 Windows 10 自定义安装中清空目标硬盘全部分区的操作步骤。从数据备份、U盘启动到删除分区重建系统结构,提供安全的界面导览与注意事项,适合需要彻底重置电脑的用户。

1panel申请证书失败为啥及常见原因排查教程
1panel申请证书失败为啥及常见原因排查教程

遇到 1Panel 申请证书失败?本文通过界面区域导览,详细讲解 ACME 账户、DNS 账号权限、手动解析记录、HTTP 80 端口连通性及网站 SSL 配置等关键排查点,助你解决证书申请难题。

Windows10替换Win7系统完整迁移安装方案
Windows10替换Win7系统完整迁移安装方案

详细讲解如何将Windows 7系统替换为Windows 10,包括升级与全新安装的选择、关键数据备份、U盘启动盘制作、磁盘分区操作及驱动恢复步骤。注意Windows 10支持周期已结束,需做好安全规划。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
WPS Office macOS版
WPS Office macOS版
macOS

WPS Office是一款面向macOS用户的综合办公套件,将文字处理、电子表格、演示文稿、PDF工具、模板与云协作整合在同一应用中。它兼容常见Microsoft Office格式,支持Intel及Apple芯片Mac,基础功能可免费使用,

Shapr3D macOS版
Shapr3D macOS版
Mac

Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。

REAPER macOS版
REAPER macOS版
Mac

REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。

WINDOWS 更多
Adobe Photoshop Windows版
Adobe Photoshop Windows版
Windows

Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理工具,可在 Windows 上完成照片修饰、选区抠图、图层合成、文字排版、绘画及生成式编辑。软件采用订阅授权,由 Creative Cloud 管理安装、更新与许

Adobe InDesign Windows版
Adobe InDesign Windows版
Windows

Adobe InDesign 是面向印刷与数字出版的专业页面排版工具,可制作书籍、杂志、宣传册、海报、交互式 PDF 和电子书。它提供精细的文字样式、多页面管理、印前检查及多格式输出能力,并能与 Photoshop、Illustrator

Adobe Illustrator Windows版
Adobe Illustrator Windows版
Windows

Adobe Illustrator 是用于绘制矢量图形、插画、图标、徽标和版式的专业设计工具。它以路径和锚点为核心,作品放大后仍能保持清晰,并提供画板、文字、渐变、图像描摹及精确变换等功能,适合品牌视觉、印刷物料、数字界面和商业插画创作。