- 论坛徽章:
- 0
|
这几天一直在用NetBSD,因为NetBSD相关的资料非常少,所以只有自己一点一点的摸着走,我把我弄FTPD的过程写出来,希望为大家做个参考,也充实一下NetBSD方面的资料,文中难免有错误之处,还请指正:matthew@arbornet.org
另外,也可以到我的网站上去查看最新版本。
http://www.arbornet.org/~matthew/
NetBSD1.6下的FTPD服务配制指南
============================
作者:黑夜编码人(Matthew)
Mail:matthew@arobrnet.org
Http://www.arbornet.org/~matthew/
Apr 08 2003 $20030408
注:任何形式的转载或摘抄请务必保留以上声明信息
NetBSD中自带的FTP守护进程FTPD功能非常强大而且可配制性也很强,本文将向你介绍如何配制它。
1、启动参数。
这里只介绍几个比较有用的。
-a anondir
指定一个目录供anonymous(匿名)用户访问,并且用户将被限制在这个目录内(即通常说的chroot)。在如果不指定该参数的话anonymous目录将为ftp用户的home目录。
-h hostname
设置要显示的主机名字,如果不设置则默认显示主机名。
-c confdir
设置配制文件(如:ftpd.conf、ftpusers等)的文件夹。
-e email
设置序列符%E的值。
2、限制用户访问
文件/etc/ftpusers控制着哪些用户可以访问和禁止访问FTP服务。其语法如下:
userglob[][@host] [directive [class]]
参数意义分别如下:
userglob 用户名,可以使用通配符,如:
matt* 匹配所有用户名以matt开头的用户
matth?w 匹配所有用户名以matth开头中间一个任意字母最后一个w的用户
ma[tT][tT]hew 匹配matthew matThew maTthew maTThew
groupglob 用户所在的组名,同样可以使用通配符,规则如上,这里就不再举例了。
host 主机名,可以使用的形式如下:
192.168.1.7 匹配主机IP为192.168.1.7的主机
cvs.netbsd.org 匹配主机名为cvs.netbsd.org的主机
192.168.1/24 匹配IP属于192.168.1.0~192.168.1.255范围内的所有主机
*.netbsd.org 匹配主机名以.netbsd.org结尾的所有主机
directive 访问权限,如果为allow或yes表示匹配的用户可以访问FTP服务,如果为deny或no表示禁止访问,如果该项为空则默认禁止用户访问。
class 设置该用户的类别(稍后会讲到)
当有用户访问FTP服务的时候,FTPD将会从/etc/ftpusers中的第一行依次往下匹配,一旦有任何一条匹满足条件则停止匹配,如果到最后一行都没有匹配的则将允许该用户访问。
3、将用户限制在一个范围内
文件/etc/ftpchroot用于决定哪些用户的访问会被限制(chroot)到一个指定的目录内。对于这个指定的目录要ftpd.conf中设置的值要么就是该用户的home目录。如果/etc/ftpchroot目录不存在或者为空,则所有用户的FTP会话根目录将不会改变,用户也不会受限于某个目录下。
该文件每行的语法与/etc/ftpusers相同,但少了一个class项,其中当directive为allow或yes的时候表示chroot生效,如果为deny或no则表示chroot无效。
4、/etc/ftpd.conf的配置
该文件的是FTPD的详细配置文件,许多高级的功能都在这里进行配制。其语法如下:
command class [arguments]
其中command为要设置的命令,class为该命令生效的类别,也就是我们在/etc/ftpusers中使用的类别,这里有两个特殊的类别:all表示与所有的class匹配,none表示不与任何class相匹配,arguments为该命令的差数。
常用的一些设置:
checkportcmd class [off]
检查PORT命令的合法性。如果发出PORT命令的IP与执行FTP连接的IP不匹配或者PORT命令的端口号比保留端口号小则PORT命令将失败,这用助于防止FTP bounce attack。
chroot class [pathformat]
设置指定的class的访问会被限制在指定目录,如果pathformat省略则使用默认值。否则用户将被限制在pathformat所指定的目录中。pathformat中可以包含以下序列值:
%c 类别名
%d 用户的HOME目录
%u 用户帐号名
如: chroot all %u/ftpdir
这样所有的用户的FTP访问将被限制在他们的HOME目录下的ftpdir的目录里。
denyquick class [off]
当用户输USER命令(即输入用户名后)时就开始访问规则匹配,而不是在输入PASS命令(即输入密码后)才开始,这样一旦在/etc/ftpusers中设置禁止访问的用户一旦输入用户名访问就将被禁止,而不是在输入完密码之后才禁止,该设置有助于提高服务器的安全性。
display class [file]
每当用户进入一个新目录时将检查该文件夹中是否有名为file的文件是否存在,如果存在则打印它的内容。file中可以含有以下序列符:
%c 类别名
%C 当前目录
%E 由FTPD的-e参数指定的email地址
%L 本地机器名
%M 当前class的最大用户数,没有设置时显示为unlimited
%N 当前class的用户数
%R 远程机器名
%T 当前时间
%U 用户名
limit class count [file]
设置该类别的最大同时连接数为count,count为0表示不限制。当限制到达时,文件file的内容将被显示出来。如果file为相对路径FTPD则会到/etc或者由-c confidr指定的目录中去搜索file。
maxfilesize class size
设置上传的最大文件,如:128M, 256k, 20G等。
timeout class time
设置非活动超时,默认为5分钟,time值不能小于30秒或超过maxtimeout的值,以秒为单位。
maxtimeout class time
设置最大超时,默认为2小时,time的最小值不能超过30秒或不于timeout的值,以秒为单位。
motd class [file]
当用户登录后显示file的内容,file中可以使用以下序列符:
%c 类别名
%C 当前目录
%E 由FTPD的-e参数指定的email地址
%L 本地机器名
%M 当前class的最大用户数,没有设置时显示为unlimited
%N 当前class的用户数
%R 远程机器名
%T 当前时间
%U 用户名
modify class [off]
如果为off则禁止使用以下命令:CHMOD、DELE、MKD、RMD、RNFR和UMASK。
upload class [off]
如果为off则禁止使用以下命令:APPE、STOR、STOU和修改命令:CHMOD、DELE、MKD、RMD、RNFR和UMASK。
private class [off]
如果使用off则禁止在STAT命令中显示用户的类别名。
passive class [off]
如果为off则禁止使用PASSIVE(包括:PASV、LPSV、EPSV)连接。
rateget class rate
限制GET(RETR)的最大传输率(bytes/sec),如果rage为0则表示不限制。rate可使用以下单位:
b 字节(B)
k 千字节(K)
m 光字节(M)
g 吉字节(G)
t 万亿字节(T)
rateput class rate
限制PUT(STOR)的最大传输率(bytes/sec),如果rage为0则表示不限制。rate可使用以下单位:
b 字节(B)
k 千字节(K)
m 光字节(M)
g 吉字节(G)
t 万亿字节(T)
sanenames class [off]
只许使用合法的文件名,即:不以"."开头且由"[-+,._a-zA-z0-9]"组成的文件名。
umask class val
设置UMASK值,默认为027。
更多设置请参考man手册,这里举一个实例:
FTPD.CONF文件:
--------------
$ cat /etc/ftpd.conf
# 公共设置
umask all 022 # 设置UMASK为022
denyquick all # 快速匹配
checkportcmd all # 检查PORT命令的合法性
timeout 60 # 无响应超时1分钟
maxtimeout 180 # 最大超时3分钟
display all .README # 显示每个目录中的.README文件
# 配制anon(匿名)类别
chroot anon # 限定在/home/ftp目录中
limit anon 500 /etc/ftp_maxconn.msg # 该类最大同时允许50个连接,当超过是显示/etc/ftp_maxconn.msg的内容
rateget anon 256k # 下载最大速率为256K
upload anon off # 禁止上传和更改,只允许下载
# 配制upload类别
chroot upload /home/ftp/incoming # 限定在/home/ftp/incoming目录中
limit upload 300 /etc/ftp_maxconn.msg # 该类最大同时允许50个连接,当超过是显示/etc/ftp_maxconn.msg的内容
maxfilesize upload 100m # 最大文件为100M
rateput upload 128K # 上传最大速率为128K
modify upload off # 禁止更改、删除文件和目录、禁止新建文件夹
# 配制member类别
limit member 5000 /etc/ftp_maxconn.msg # 该类最从同时允许5000个连接,当超过是显示/etc/ftp_maxconn.msg的内容
rateget member 10M # 下载最大速率为10M
rateput member 10Mk # 上传最大速率为10M
FTPUSERS文件:
-------------
$cat /etc/ftpusers
root deny # 禁止root访问
matthew allow # 允许matthew访问
tom@*.cracker.com allow anon # 允许tom从域cracker.com访问,并设置其class为anon(匿名)
*@*.cracker.com deny # 禁止所有来自域cracker.com的访问
uploader allow upload # 用户uploader的访问被允许,并且设置其class为upload
*:members allow member # 允许所以members组中的用户访问,并且设置其class为member
* deny # 拒绝其它一切的访问
FTPCHROOT文件:
--------------
$cat /etc/ftpchroot
*:members # 所有members组中的用户将被限制在自己的HOME目录中
matthew no # matthew将不会被限制在任何目录中,可以自由的访问任何目录
好了,到这里NetBSD中FTPD的主要配置已经介绍完了,从上面可见其功能强大,足以能够应付一般的需求。
由于我的水平有限加上时间仓促,文中难免有错误之处,还请指正和交流:matthew@arbornet.org
[ 参考 ]
NetBSD1.6 Man pages:
FTPD(8)
FTPUSERS(5)
FTPD.CONF(5) |
|