用OpenBSD 3.8 release自带的FTPD架设FTP服务器
使用OpenBSD 3.8 release自带的FTPD架设FTP服务器
Author: MichaelBibby
Date: 2005/11/20
可以任意转载,但请保留以上信息,谢谢。
注:本文参考OpenBSD 3.8的官方FAQ文档和ftpd的man文档写成,更全面的信息请参看这两个文件。
官方FAQ:http://www.openbsd.org/faq/faq10.html#AnonFTP
ftpd的在线手册页:http://www.openbsd.org/cgi-bin/man.cgi?query=ftpd&apropos=0&sektion=0&manpath=OpenBSD+3.8&arch=i386&format=html
OpenBSD的ftpd程序没有配置文件,就靠设置运行参数进行配置。所有参数的含义都可以在ftpd
的man文档中获得详细信息:
$ man ftpd
ftpd程序的启动有三种方法(inetd/"rc file"/command line):
1: inetd方式:
在"/etc/inetd.conf"文件中有这么一行:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -US
这里为"ftpd"传递了两个参数"-US"。当然你还可以组合自己想要的参数。(一些常用参数的含义
在下文给出)。
inetd方式还需要同时启动inetd服务,OpenBSD默认启动了inetd(可以看看/etc/rc.conf中的
"inetd_flags"变量的值)。
2: "rc"方式;
所谓"rc"方式,指的就是通过配置"/etc/rc.conf"或者"/etc/rc.conf.local"来启动系统服务。
为"/etc/rc.conf"中的"ftpd_flags"变量设置参数,并确保该行没有被注释掉。
这种方法需要在重新启动系统后才会生效;
3: 直接在命令行下执行ftpd命令,这样就不需要重启系统了:
# /usr/libexec/ftpd -4DllUS
ftpd程序的终止:
1: 如果不需要提供ftp服务,则在/etc/rc.conf中将ftpd_flags变量注释掉(在该行最开头加一个"#"
符号);
2:使用ps查看ftpd的PID,然后"kill PID"。
以下是ftpd常用的一些参数(这里列出的只是常用的,并不是全部。更多的参数请查看ftpd的man文档):
-4 如果指定了"-D"参数,则强制ftpd只使用IPv4地址。
-6 和"-4"的解释类似;如果指定了"-D"参数,则强制ftpd只使用IPv6地址。
-A 只允许匿名登录(除非指定了"-n"选项)。
-D 如果指定了该参数,ftpd将做为daemon运行,****ftp端口并且fork子进程对连接进行
处理。在繁忙的服务器上,这样可以减少系统负载,与使用inetd方式启动ftpd比起来,
这种方式使用更少的系统资源。
-d 使用LOG_FTP将Debug信息写入syslog。
-l 每个成功和失败的ftp session都将由LOG_FTP工具通过syslog记录下日志。如果这个选
项被指定两次,所有get/put/append/delete/make directory/remove directory/rename
操作以及所操作的文件都将被记录进日志。
-U 每个并发的ftp session都被记录到日志文件/var/run/utmp,记录的格式就象who(1)命令
的输出一样。
-n 禁止匿名登录。通常是允许的。
-S 如果设置了这个参数,ftpd将会把所有匿名用户的下载情况记录在文件/var/log/ftpd中
(如果它存在的话)。
-T maxtimeout
连接超时的时间限制。默认是2小时。
-u mask
强制设置umask为指定的mask。而不是使用/etc/login.conf中的设置(login.conf中通常
设置为022),并且不允许chmod。
看了这几个选项,你应该可以组合出合适的选项来满足自己的功能需求了。
1:只允许使用系统帐号登录FTP;
因为匿名用户登录需要使用到系统中的一个名为"ftp"的帐户(更多关于该帐户的讨论,请看本文下
半部分),而OpenBSD系统中没有该帐户,需要手动建立并且设置正确的权限,所以如果只允许用户
通过系统帐号登录FTP服务器,则只需要在/etc/rc.conf中将ftpd_flags的值简单地设置为"-D"即可
(虽然这时候的设置仍然允许匿名用户登录,但是因为系统中没有"ftp"用户,所以无法登录)。当
然你也可以多设置一些参数。比如:
ftpd_flags="-4DllUSn"
参考上面几个常用选项的说明,你就会明白这是什么意思了。
2:允许匿名用户登录访问FTP资源;
因为匿名用户登录到FTP服务器后,实际上是一个"ftp"用户的身份进行所有操作,所以出于安全考虑,
这个用户的权限通常被设置得很低。比如:
1:不为该用户提供一个可用的shell,使其无法登录系统;
2:没有一个可用的密码(即FAQ上说的"This account shouldn't have a usable password;");
3:登录系统后被chroot;
......
接下来我们要做的就是按照上面列出的三个要求来添加和设置这个低权限、处处受限的"ftp"用户。
2.1:添加"ftp"帐户以提供匿名访问;
2.1.1:在/etc/shells中添加一个无法实际使用的shell:
设置"ftp"使用这个shell的目的,是不允许它通过shell登录到系统中。通常我们会有两种选择:
/sbin/nologin
/usr/bin/false