OpenBSD自带了一个ftp服务器软件叫做ftpd,默认情况下这个服务不启动,下面的文章就从如何启动,配置这个服务方面来说明如何搭建ftp服务器。
次文章分为:
- 介绍
- 启动
- 配置
- 其他事项
1 介绍
参照man documentation ,we should get all the parameter related to this ftp tools.
ftpd常用参数
以下是ftpd 常用的一些参数(这里列出的只是常用的,并不是全部。更多的参
数请查看OpenBSD 的Manual Page。
· -4 如果指定了-D"参数,则强制ftpd 只使用IPv4地址。
· -6 和-4"的解释类似;如果指定了-D"参数,则强制ftpd只使用IPv6地址。
· -A 只允许匿名登录(除非指定了-n"选项)。
· -D 如果指定了该参数,ftpd 将做为daemon运行,监听ftpd 端口并且fork子进程对连接进行处理。在繁忙的服务器上,这样可以减少系统负载,与使用inetd 方式启动ftpd比起来,这种方式使用更少的系统资源。
· -d 使用LOG FTP将Debug信息写入syslog。
· -l 每个成功和失败的ftp session 都将由LOG FTP 工具通过syslog记录下日志。如果这个选项被指定两次(-ll),所有get/put/append/delete/make、 directory/remove、dire操作以及所操作的文件都将被记录进日志。
· -U 每个并发的ftp session都被记录到日志文件/var/run/utmp,记录的格式就象who(1)命令的输出一样。
· -n 禁止匿名登录。默认是允许的。
· -S 如果设置了这个参数,ftpd 将会把所有匿名用户的下载情况记录在文件/var/log/ftpd 中(如果该文件存在的话)。
· -T maxtimeout 连接超时的时间限制。默认是2小时。
· -u mask 强制设置umask为指定的mask。而不是使用/etc/login.conf 中的设置(/etc/login.conf 中通常设置为022),并且不允许chmod。
2 启动
ftpd程序的启动有三种方法:
·inetd方式
·’rc’方式
·直接在命令行下执行ftpd命令
1、inetd方式
在’etc/inetd.conf’文件中有这么一行: (默认情况下被注释了,请删除行头的#,保存文件)
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -US
这里为’ftpd’传递了两个参数’-US’。当然,你还可以组合自己想要的参数。
(一些常用参数的含义已在下文给出)。使用inetd方式,ftpd由inetd进程管
理,所以需要启动inetd服务才能启动ftpd。在OpenBSD的默认设置中,inetd被
配置为随系统启动。查看’/etc/rc.conf’中的’inetd’变量的值:
inetd=YES
2、’rc’方式
所谓’rc’方式,指的就是通过修改’/etc/rc.conf’或者’/etc/rc.conf.local’文件中变
量的值,为服务的启动添加’entry’,使服务能够随系统启动。使用’rc’方式启
动fttpd,只需要将’/etc/rc.conf’中的’ftpd_flags’变量设置为自己组合好的参数
即可。这种方法需要在系统重启后服务才会随系统启动(这里的参数暂时使用
与’inetd’方式相同的参数):
ftpd_flags="-US"
3、直接在命令行执行ftpd命令
这种方法的好处是不需要重新启动系统就可以启动ftpd服务:
# /usr/libexec/ftpd -4DllUS
3 配置
允许匿名用户登录访问FTP资源
因为匿名用户登录到FTP服务器后,实际上是以ftp"用户的身份进行所有操作,所以出于安全考虑,这个用户的权限通常被设置得很低。比如:
· 不为该用户提供一个可用的shell,使其无法登录系统;
· 没有一个可用的密码(即FAQ上说的"This account shouldn’t have a usable password;");
· 登录系统后被chroot;
· ......
接下来我们要做的就是按照上面列出的三个要求来添加和设置这个低权限、处处受限的"ftp"用户。
添加帐户
这里使用"adduser -s shell /sbin/nologin"来添加一个这样的’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 sta. [default]:ENTER
Enter password []: ENTER # 在此直接按ENTER键。
这样就可以设置一个不可用的密码。
4 其他
为FTP目录设置正确的权限
1、’ftp’目录
"ftp"目录表示"ftp"用户的主目录,在本例中就是"/var/ftp"目录。将它的owner设置为"root",权限设置为任何人都不可写(555):
# chown -R root:wheel /var/ftp
# chmod -R 555 /var/ftp
2、’ftp/bin’目录
这个目录并不是必须的。如果希望匿名用户登录到FTP后能够执行一些command,就可以将command 复制到这个目录下。所有的command的权限都应该设置为只允许执行(111)。
# mkdir /var/ftp/bin
# chown -R root:ftp /var/ftp/bin
# chmod -R 111 /var/ftp/bin/*
3、’ftp/etc’目录
和"ftp/bin"目录一样,这也是个可选的,并不推荐创建它。(更多关于该目录设置的信息请查看"ftpd" 的man文档)。
4、’ftp/pub"目录
这个目录用来存放你希望被匿名用户访问的文件。权限应该设置为555。
# chown -R root:ftp /var/ftp/pub
# chmod -R 555 /var/ftp/pub
这里虽然提到了创建三个目录,但是实际上我们只需要创建’ ftp/pub’目录并设置好权限就可以了。
chroot匿名登录的用户
’ftpd’会将’/etc/ftpchroot’文件中列出的用户都chroot。要使’ftp’用户在登录ftp后被chroot,只需要简单地把用户名添加到这个文件中就可以了。这是一个示例文件:
# file: /etc/ftpchroot
# $OpenBSD: ftpchroot,v 1.3 1996/07/18 12:12:47 deraadt Exp $
##
list of users (one per line) given ftp accessto a chrooted area.
# read by ftpd(8).
ftp
bibby
’ftpd’在启动时会读取这个文件,如果’ftp’和’bibby’这两个用户登录ftp,将被分
别chroot到自己的$HOME目录下。
其他一些相关文件
· /etc/ftpusers { 列出了所有不受欢迎的用户。列在该文件中的用户都无法
登录ftp服务器。
此文参考网络上的一些方法和ftpd的文档。