游乐游手机版
首页/系统平台/文章详情

OpenBSD 3.8 架设FTP服务器指南

时间:2026-06-18 07:50
在OpenBSD系统中,自带的ftpd是一款轻量级且安全性高的FTP服务器方案。与大多数系统不同,它没有复杂的配置文件,所有行为均通过启动参数进行控制。换句话说,你只需在启动命令中指定相应的选项,即可定义其功能。详细信息可查阅man手册: $ man ftpd ftpd有三种启动方式:由inetd托

在OpenBSD系统中,自带的ftpd是一款轻量级且安全性高的FTP服务器方案。与大多数系统不同,它没有复杂的配置文件,所有行为均通过启动参数进行控制。换句话说,你只需在启动命令中指定相应的选项,即可定义其功能。详细信息可查阅man手册:

$ man ftpd

ftpd有三种启动方式:由inetd托管、通过rc文件随系统自启、或直接在命令行中运行。以下逐一说明。

三种启动方式详解

1. inetd 方式

/etc/inetd.conf中,默认包含如下一行配置:

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

该行已为ftpd传递了两个参数-US,当然你也可以根据需求组合其他参数(常用参数含义将在后文列出)。使用inetd方式时,需确保inetd服务本身已启动——OpenBSD默认启动该服务,可在/etc/rc.conf中检查inetd_flags变量的值以确认。

2. rc 方式

所谓“rc”方式,即通过配置/etc/rc.conf/etc/rc.conf.local来启动服务。具体做法:为ftpd_flags变量设置好参数,并确保该行未被注释。需要注意的是,这种方式需要重启系统才能生效。

3. 命令行方式

直接执行ftpd命令,即可立即生效,无需重启:

# /usr/libexec/ftpd -4DllUS

如何停止ftp服务

如需关闭服务,有两种方法:

  • /etc/rc.conf中将ftpd_flags行注释掉(行首添加#),这样下次重启后服务便不会启动。
  • 立即终止当前运行的进程:先使用ps查找ftpd的PID,或查看/var/run/ftpd.pid文件,然后执行kill PID

常用参数速览

以下列出最常用的参数(完整列表请参见man文档):

  • -4:与-D配合使用时,强制ftpd仅监听IPv4地址。
  • -6:类似,仅使用IPv6地址。
  • -A:仅允许匿名登录(除非同时指定-n)。
  • -D:使ftpd以守护进程(daemon)方式运行,自行建立端口并fork子进程处理连接。在高并发场景下,此方式比通过inetd托管更节省系统资源。
  • -d:将调试信息通过LOG_FTP写入syslog
  • -l:通过syslog记录每次成功和失败的ftp会话。若该选项重复两次(-ll),则会记录所有get/put/append/delete/mkdir/rmdir/rename操作及所操作的文件。
  • -U:每个并发的ftp会话都会被记录到/var/run/utmp,格式与who(1)命令输出类似。
  • -n:禁止匿名登录(默认允许)。
  • -S:启用后,ftpd会将所有匿名用户的下载情况记录到/var/log/ftpd(前提是该文件存在)。
  • -T maxtimeout:连接超时时间,默认为2小时。
  • -u mask:强制设置umask为指定值,覆盖/etc/login.conf中的设置(通常为022),并且不允许客户端使用chmod

了解这些参数后,你就可以根据实际需求组合出合适的启动选项。

1. 只允许使用系统帐号登录FTP

如果你只希望系统上的已有用户通过FTP访问,而不开放匿名访问,则操作非常简单。因为匿名用户登录需要系统中存在一个名为ftp的帐户,而OpenBSD默认并未创建该帐户。因此,即便你没有显式禁止匿名登录,只要该帐户不存在,匿名用户也无法进入。你只需在/etc/rc.conf中将ftpd_flags设置为类似以下内容:

ftpd_flags="-4DllUSn"

其中-n显式禁止匿名登录,实际上即使不加此选项,只要没有ftp用户,匿名也会失败。不过加上-n更符合安全规范。

2. 允许匿名用户登录访问FTP资源

若确实需要开放匿名访问,则需手动创建一个权限极低的ftp帐户。该帐户需满足以下安全要求:

  • 没有可用的shell(无法通过ssh等方式登录系统);
  • 没有可用的密码(FAQ中提及:“This account shouldn't have a usable password”);
  • 登录后会被chroot到自己的home目录,限制在文件系统的一个子集中活动。

下面逐步设置这个“处处受限”的ftp用户。

2.1 添加“ftp”帐户

2.1.1 在/etc/shells中添加一个无法实际使用的shell

通常选择/sbin/nologin/usr/bin/false作为该用户的shell。为了让adduser命令能识别它们,需先将其加入/etc/shells

# echo '/sbin/nologin' >> /etc/shells
# echo '/usr/bin/false' >> /etc/shells

如果不先添加这些shell,也可以在adduser时使用-shell参数强制指定(这样会临时加入但不会永久修改/etc/shells):

# adduser -shell /sbin/nologin
Enter username []: ftp
Enter full name []: anonymous ftpd user
Enter shell bash csh ksh nologin sh [/sbin/nologin]:
......

注意,如果不带-shell参数,直接输入/sbin/nologin会被拒绝,提示“/sbin/nologin: is not allowed!”。

以下是一个完整的添加示例,将ftp用户的home目录设置为/var/ftp

# adduser -shell /sbin/nologin -home /var
Use option ``-silent'' if you don't want to see all warnings and questions.
Reading /etc/shells
Check /etc/master.passwd
Check /etc/group
Ok, let's go.
Don't worry about mistakes. I will give you the chance later to correct any input.
Enter username []: ftp
Enter full name []: anonymous ftpd user
Enter shell bash csh ksh nologin sh [/sbin/nologin]: ENTER
Uid [1001]: ENTER
Login group ftp [ftp]: ENTER
Login group is ``ftp''. Invite ftp into other groups: guest no [no]: ENTER
Login class daemon default staff [default]: ENTER
Enter password []: ENTER      # 直接回车,这样就能设置一个不可用的密码
Set the password so that user cannot logon? (y/n) [n]: y
Name:       ftp
Password:   ****
Fullname:   anonymous ftpd user
Uid:        1001
Gid:        1001 (ftp)
Groups:     ftp
Login Class: default
HOME:       /var/ftp
Shell:
OK? (y/n) [y]: y
Added user ``ftp''
Copy files from /etc/skel to /var/ftp
Add another user? (y/n) [y]: n
Goodbye!
#

添加完成后,adduser会自动从/etc/skel复制一些“dot files”到新用户的home目录。这些文件可能暴露系统信息(例如~/.cshrc中会包含$OpenBSD: dot.cshrc,v 1.5这样的版本信息),因此最好将其删除:

# rm -f /var/ftp/.*

3. 为/var/ftp目录设置正确的权限

3.1 ~ftp目录(用户主目录)

/var/ftp的owner设为root,权限设为所有人不可写(555):

# chown -R root:wheel /var/ftp
# chmod -R 555 /var/ftp

3.2 ~ftp/bin目录(可选)

若你希望匿名用户登录后能执行某些命令,可创建此目录,并将需要的命令复制进去,然后将所有命令的权限设为仅可执行(111)。

# mkdir /var/ftp/bin
# chown -R root:ftp /var/ftp/bin
# COPY YOUR PROGRAMS TO /var/ftp/bin, AND THEN:
# chmod -R 111 /var/ftp/bin/*

3.3 ~ftp/etc目录(可选,不推荐)

此目录通常不建议创建,具体原因请参考ftpd的man文档。

3.4 ~ftp/pub目录

这是真正存放匿名资源的位置。权限设为555:

# chown -R root:ftp /var/ftp/pub
# chmod -R 555 /var/ftp/pub

实际上,对于最简单的匿名FTP,只需创建~ftp/pub并设置好权限即可,其他目录并非必需。

4. chroot匿名登录的用户

OpenBSD的ftpd会将/etc/ftpchroot文件中列出的所有用户chroot到各自的家目录。为了让ftp用户被chroot,只需将用户名ftp写入该文件,每行一个用户:

# file : /etc/ftpchroot
#       $OpenBSD: ftpchroot,v 1.3 1996/07/18 12:12:47 deraadt Exp $
#
# list of users (one per line) given ftp access to a chrooted area.
# read by ftpd(8).
ftp
bibby

这里ftpbibby两个用户登录后都会被chroot到各自的家目录。

5. 其他相关文件

  • /etc/ftpusers:列出不受欢迎的用户,列在此处的用户无法登录FTP。
  • /etc/ftpwelcome:登录时显示的欢迎信息。若该文件不存在,则使用/etc/motd的内容。
  • ~ftp目录下的.message文件:可放置在~ftp下的任何子目录中,用户进入该目录时会显示其内容。

以上是在OpenBSD 3.8 release上使用自带ftpd搭建FTP服务器的完整过程。从参数选择到匿名用户的创建,再到安全配置,每一步都直接关系到最终服务的可靠性与安全性。希望本指南能帮助你顺利运行FTP服务器。

来源:https://www.jb51.net/os/Unix/1516.html
上一篇手把手教你从硬盘安装FreeBSD系统详细操作流程 下一篇FreeBSD 6.2 网站服务器搭建图解教程
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
微软详解Win11时间点还原 默认每24小时创建恢复点
系统平台 · 2026-06-30

微软详解Win11时间点还原 默认每24小时创建恢复点

微软今日推送了最新的 6 月可选更新,并发布博客详细解读了 Win11 全新的“时间点还原”(Point-in-time restore)功能——这一功能本质上是对系统恢复体验的一次全面升级,旨在让用户更轻松地应对电脑故障。 微软表示,面向 Windows 11 客户端用户的“时间点还原”功能现已正

Win11 26H1六月可选更新KB5095091 优化放大镜改善装机体验
系统平台 · 2026-06-30

Win11 26H1六月可选更新KB5095091 优化放大镜改善装机体验

微软今天推送了Windows 11 26H1设备的6月可选更新KB5095091,安装完成后系统版本号会升级到Build 28000 2340。值得一提的是,这次更新并非面向所有设备,而是专门为搭载高通骁龙X2系列芯片的机型准备的——包括骁龙X2 Plus、X2 Elite和X2 Elite Ext

Win11六月可选更新KB5095093修复回收站弹窗异常
系统平台 · 2026-06-30

Win11六月可选更新KB5095093修复回收站弹窗异常

微软已悄然推送Windows 11六月可选更新,编号KB5095093。本次更新覆盖两个版本:24H2用户安装后版本号升级至Build 26100 8737,而25H2用户则更新至Build 26200 8737。 本次更新并非仅是小修小补,而是带来了多项实质性新功能。下面我们就来详细解析这些更新内

苹果macOS 27 Beta2封堵Siri AI跳过候补名单漏洞
系统平台 · 2026-06-30

苹果macOS 27 Beta2封堵Siri AI跳过候补名单漏洞

科技媒体 Cult of Mac 昨日(6月23日)发布博文指出,苹果在 macOS 27 Beta 2 更新中悄然封堵了一个此前可用的后门——用户曾能通过一条终端命令绕过候补名单,直接启用新版 Siri AI,如今这一方法已失效。 简要回顾一下:在 macOS 27 Beta 1 阶段,只需在 M

微软加速Win11 25H2推送 覆盖所有符合条件家用PC
系统平台 · 2026-06-30

微软加速Win11 25H2推送 覆盖所有符合条件家用PC

近日(6月23日),科技媒体 Windows Latest 发布了一则值得关注的动态:微软已进一步扩大 Windows 11 25H2 的推送范围,所有满足硬件要求、且不受 IT 部门管理的家庭版和专业版设备,现在均可顺利接收本次更新。 此次升级有一个显著特点——采用“启用包”(eKB)方式进行推送