在OpenBSD系统中,自带的ftpd是一个轻量且安全的FTP服务器方案。与许多其他系统不同,它没有复杂的配置文件,所有行为均通过启动参数定义。换句话说,想让ftpd如何工作,完全取决于启动命令中携带的选项。详细信息可通过man手册查看: $ man ftpd ftpd的启动方式有三种:通过inet
在OpenBSD系统中,自带的ftpd是一个轻量且安全的FTP服务器方案。与许多其他系统不同,它没有复杂的配置文件,所有行为均通过启动参数定义。换句话说,想让ftpd如何工作,完全取决于启动命令中携带的选项。详细信息可通过man手册查看:
$ man ftpd
ftpd的启动方式有三种:通过inetd托管、通过rc文件随系统启动、或者直接在命令行下运行。下面逐一说明。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
在/etc/inetd.conf中,默认包含以下内容:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -US
这里已为ftpd传递了两个参数-US,当然也可根据需要组合其他参数(常用参数含义稍后列出)。使用inetd方式需确保inetd服务本身已启动——OpenBSD默认启动,可在/etc/rc.conf中查看inetd_flags变量值确认。
所谓“rc”方式,即通过配置/etc/rc.conf或/etc/rc.conf.local来启动服务。具体做法:为ftpd_flags变量设置参数,并确保该行未被注释。不过此方式需重启系统才能生效。
直接执行ftpd命令,即时生效,无需重启:
# /usr/libexec/ftpd -4DllUS
如需关闭ftpd,有两种方法:
/etc/rc.conf中将ftpd_flags行注释掉(行首加#),下次重启后不再启动。ps找到ftpd的PID,或查看/var/run/ftpd.pid文件,然后执行kill PID。以下列出最常用的参数(完整列表请参见man文档):
-D使用时,强制ftpd只监听IPv4地址。-n)。-ll),则所有get/put/append/delete/mkdir/rmdir/rename操作及所操作的文件都会被记录。/var/run/utmp,格式与who(1)命令输出类似。/var/log/ftpd(前提是该文件存在)。/etc/login.conf中的设置(通常为022),并且不允许客户端使用chmod。了解这些参数后,即可根据实际需求组合出合适的启动选项。
如果只希望系统上的已有用户通过FTP访问,而不开放匿名访问,操作很简单。因为匿名用户登录需要系统中存在名为ftp的帐户,而OpenBSD默认并未创建它。因此,即便没有显式禁止匿名登录,只要该帐户不存在,匿名用户就无法进入。只需在/etc/rc.conf中将ftpd_flags设置为类似如下:
ftpd_flags="-4DllUSn"
这里-n明确禁止匿名,实际上即使不加它,只要没有ftp用户,匿名也会失败,但加上-n更符合规范。
如果需要开放匿名访问,需手动创建一个权限极低的ftp帐户。该帐户需满足以下安全要求:
下面逐步设置这个“处处受限”的ftp用户。
/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/.*
/var/ftp目录设置正确的权限~ftp目录(用户主目录)将/var/ftp的owner设为root,权限设为所有人不可写(555):
# chown -R root:wheel /var/ftp
# chmod -R 555 /var/ftp
~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/*
~ftp/etc目录(可选,不推荐)此目录通常不建议创建,具体原因请参考ftpd的man文档。
~ftp/pub目录这是真正存放匿名资源的位置。权限设为555:
# chown -R root:ftp /var/ftp/pub
# chmod -R 555 /var/ftp/pub
实际上,对于最简单的匿名FTP,只需创建~ftp/pub并设置好权限即可,其他目录并非必需。
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
这里ftp和bibby两个用户登录后都会被chroot到各自的家目录。
/etc/ftpusers:列出不受欢迎的用户,列在此处的用户无法登录FTP。/etc/ftpwelcome:登录时显示的欢迎信息。若该文件不存在,则使用/etc/motd的内容。~ftp目录下的.message文件:可放在~ftp下的任何子目录中,用户进入该目录时会显示其内容。以上就是在OpenBSD 3.8 release上用自带ftpd架设FTP服务器的完整过程。从参数选择到匿名用户创建,再到安全配置,每一步都直接关联到最终服务的可靠性和安全性。希望这份指南能帮助您顺利搭建FTP服务器。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述