一个增强的FTP服务器软件——wu-ftpd

IBM AIX操作系统在安装完之后,查看/etc/inetd.conf文件,会有一行ftp stream tcp6 nowait root /usr/sbin/ftpd ftp,这表明系统会默认启动AIX自带的ftpd,使AIX提供标准的ftp服务。但是AIX提供的ftp服务 具有一定的局限性,例如普通用户可以查看到/home下除了该用户目录之外的其他目录以及根文件系统等,对用 户的控制不够灵活等等。这里推荐一个功能比较强大的ftp服务器端软件wu-ftpd,可以弥补ftpd功能上的不足。 熟悉Linux的用户比较清楚,Linux下默认的ftp服务器软件就是wu-ftpd。这个软件是由华盛顿大学(Washington University-http://wuarchive.wustl.edu/)开发的。它具有非常强大的功能:

  1) 可以在用户下载文件的同时对文件做自动的压缩或解压缩操作;

  2) 可以对不同网络上的机器做不同的存取限制;

  3) 可以记录文件上载和下载时间;

  4) 可以显示传输时的相关信息,方便用户及时了解目前的传输动态;

  5) 可以设置最大连接数,提高了效率,有效地控制了负载。

  您可以在IBM Linux Toolbox网站上下载到:

  http://www-1.ibm.com/servers/aix/products/aixos/linux/altlic.html 。IBM提供的wu-ftpd最新版本是2.6.2。

  一、wu-ftpd的安装。

  从IBM网站上下载到的wu-ftpd是rpm格式的,安装前需要安装fileutils包,同样可以从IBM Linux Toolbox网站上下载到。在安装完后,您可以找到文件/usr/sbin/wu.ftpd,这个文件就是用来替换原来的ftpd的ftp服务器进程。为了在启动inetd的时候自动启动wu-ftpd,需要将/etc/inetd.conf中ftp stream tcp6 nowait root /usr/sbin/ftpd ftp改为ftp stream tcp6 nowait root /usr/sbin/wu.ftpd ftp,然后用refresh -s inetd刷新inetd进程。安装好以后,可以用/usr/sbin/ckconfig命令来检查是否已经正确安装。此时就可以使用wu-ftpd了。您可以用lssrc -t ftp随时列出wu-ftpd的状态。

  wu.ftpd命令还有一些参数,这里做以简要说明:

  -d 当FTP服务器出错时,将错误入系统的syslog中;

  -l 将每次FTP客户端进行连接的信息记录入系统的syslog中;

  -t 设置FTP客户端连接几分钟无操作就切断连接;

  -a 使wu-ftp使用/etc/ftpaccess的设定;

  -A 使wu-ftp不使用/etc/ftpaccess的设定;

  -L 将FTP客户端登录后所执行的程序记录在系统的syslog中;

  -I 将FTP客户端上载文件的日志记录在/usr/adm.xferlog文件中;

  -o 将FTP客户端下载文件的日志记录在/usr/adm/xferlog文件中。

  二、wu-ftpd的配置。

  wu-ftpd主要有以下6个配置文件:

  ftpaccess(主配置文件,控制存取权限)

  ftpconvertions(配置文件压缩/解压缩转换)

  ftpgroups(设定ftp自己定义的组)

  ftphosts(设定个别的用户权限)

  ftpservers(设定不同IP/Domain Name以对应到不同的虚拟主机)

  ftpusers(设定哪些帐号不能用ftp登录)

  下面就文件中的一些常见参数做以说明。

  1 、/etc/ftpaccess(wu-ftpd的主要配置文件)

  class--定义群组,用法如下:

  class<种类><用户地址><用户地址>……]

  由class定义的组用户才可以登录进ftp,可以使用多层式的class来限制哪些组的用户能够从哪些地方登录。

  有三个重要的类,real、anonymous和guest。

  real如果没有列在定义中,那么这台机器中任何真实的用户都无法用自己的帐号连上来(真实用户是指在主机上拥有自己帐号的用户)。anonymous如果没有定义,就表示不让没有帐号的的人连上来。如果有定义guest,那么guest组的人就可以上来。另外<用户地址>是指ftp上来的用户会用到的IP地址,则可自行设定。以下是一些例子:

  class all real,guest,anonymous * 定义了一个名为all的类,包含三种人,所有IP的登录用户,也就是任何人都可以登录ftp。

  class local real localhost loopback local这个类的意思是只有real的用户可以从本机机器连上来 。

  class remote guest,anonymous * remote这个类包含了从任何地方上来的guest和anonymous用户,但是real用户不能登录。

  class rmtuser real !*.example.com rmtuser这个类包含了任何远程的(除了example.com)真实用户 ,也就是说example.com是在"黑名单"上的。

  autogroup--自动对应组,用法如下: autogroup[……] 因为在UNIX中没有类(class)的概念,只有组(group)的概念。对用户的控制都是基于组的。当定义好的那些同属于一个类的用户,一旦登录上来就会被对应到一个相应的组下面,这样你就可以用Unix的文件权限对某一群人做限制。

  deny--拒绝某些地址登录,用法如下: deny<拒绝登录的地址><信息文件> 禁止某些机器登录,并显示<信息文件>。例如: deny 210.62.146.*:255.255.255.254 /etc/reject.msg 在reject.msg中您可以给出拒绝登录的理由等等。

  guestgroup--设定访客群 guestuser--设定访客帐号 realgroup--设定真实组 realuser--设定真实帐号

  defumask--设定某class的umask,用法如下: defumask[] umask是建立文件时该文件的的权限掩码,这对于上传文件很重要。

  timeout--设定登录超时,用法如下: timeout accept<秒> 接受登录超时,预设120秒 timeout connect<秒> 登录建立超时,预设120秒 timeout data<秒> 数据传送超时,预设1200秒 timeout idle<秒> 用户发呆超时,预设900秒

  file-limit--限制某class只能传几个文件,用法如下: file-limit[][] 对某个类用户存取文件的数目,包含了in(上传)、out(下载),total raw代表整个传输的结果,不光是数据文件。例如: file-limit out 20 testftp 限制testftp用户最多只能下载20个文件

  byte-limit--限制某class只能传几个字节,用法跟file-limit相似

  limit-time--限制一个登录只能持续多久,用法如下:

  limit-time{*|anonymous|guest}<分钟> 为了避免有人在ftp站上不下来,可以用这个方法限制用户的上线时间,例如: limit-time guest 5 让guest帐号的用户只能用5分钟

  limit--限制某class能同时几人上线,用法如下:

   limit<登录数目><时间区段><额满信息文件> 设定某个class在某一时间区段内最多能够几人同时上线,后面是当超过登录数目时要显示的信息。

  例如: limit all 32 any /home/ftp/etc/toomanyuser.msg 限制所有登录在任何时间只能有32个用户,超过则拒绝登录并显示信息

  limit levellone 5 Any2300-0600 /home/ftp/etc/toomanyuser.msg 限制levellone这个class的用户在23:00到6:00这段时间内只能有5人登录

  noretrieve--设定哪些文件不可下载

  noretrieve[absolute/relative][class=]…[-][<文件名>…] absolute或relative指文件是用绝对路径还是相对路径 allow=retrieve--设定哪些文件可以下载 allow[absolute/relative][class=]…[-][<文件名>…] loginfails--设置登入错误可尝试的次数 当用户登录时可能输入错误ID或密码,这个设定可以让用户输入错误几次以后就断线。

  greeting--显示Server的版本信息,用法如下: greeting 当用户登入画面显示的server信息,full是预设值,包含版本号以及hostname,brief只有hostname,而terse只有“FTP server ready”的信息。

  barnner--设定未进入Login画面之前用户看到的信息,用法如下: banner<文件路径> 这里叙述了在用户登入时,在还没打ID/Password之前要出现的信息。文件路径指的是相对于真实的路径,而不是相对于ftp的根目录。

  host--设定ftp主机名

  email--指定ftp管理者的email地址

  message--信息文件的设定,用法如下:

  message<文件>{<何时>{……}} 这里的文件的路径是相对于ftp的根目录的,“何时”是指当你做了什么动作之后的反应,有几个选择: login(登入时) cwd=<目录>(进入某目录时) class 名称是前面已经定义过的,允许你的信息只对哪些人发出。 而信息文件的内容除了文字以外,还可以使用以下一些事先定义好的代号: %T(本机时间) %F(目前分区所剩余的空间) %C(目前所在的目录) %E(管理者的E-mail) %R(客户端主机名称) %L(本机主机名称) %U(用户名称) %M(与我相同class用户允许多少人登录) %N(与我相同class用户目前有多少人登录) %B(绝对磁盘限制大小,目前分区(单位blocks)) %b(preferred磁盘限制大小,目前分区(单位blocks)) %Q(目前已使用的blocks) %I(最大可使用的inodes(+1)) %i(Preferred inodes限制) %q(目前使用的indoes) %H(超量使用磁盘空间的时间限制) %h(超量使用文件数目的时间限制)

  readme--通知用户哪些README文件已经更新 log

  commands--记录用户所使用过的命令,用法如下:

    log commands<用户种类>

  log transfers--记录用户所传输的文件,用法如下:

    log transfers<用户种类><传输方向> 设定有哪些类型的用户传输文件需要记录,包含了inbound(用户上传)和outbound(用户下载),例如: log transfers anonymous,guest inbound,outbound

  log security--记录安全性,用法如下:

    log security<用户种类> 特别用于记录某类用户关于noretrive、notar等有关安全性的记录

  log syslog--记录到系统的syslog文件

  alias--设定目录别名,用法如下:

    alias<别名字符串><目录>

  cdpath--设定cd更换目录搜索顺序

  shutdown--通知用户要关站了 shutdown<信息文件> 如果信息文件存在的话,当这个文件指定的某时间以后,就会拒绝登录并切断已有的登录,等时间一到就关机。这个信息文件的格式如下: <年><月><日><时><分><拒绝倒数><断线倒数><文字>

  chmod--设定是否可以改变文件权限

  delete--设定是否可以删除文件

  overwrite--覆盖文件

  rename--重命名文件

  umask--允许设定umask

  passwd-check--设定anonymous FTP的密码检查程度,用法如下:

    passwd-check() 设定对anonymous ftp用户的密码是否检查,none表示不检查,trivial为包含@的任意密码,rfc822则表示密码要遵循RFC822格式,enforce表示密码检查不过不允许进入,warn表示密码检查不过只出现警告信息。

  deny=email--拒绝特定的email当密码

  path-filer--摄定哪些文件名不可使用 path-filer<错误信息文件><允许字符><不允许字符>

  upload--设定upload权限 upload[absloute/relative][class=]…[-]<设定的目录> >[dirs/nodirs][d_mode] 用来对我们要设定的目录做权限设定: absoulte/relative使用绝对路径或是相对路径 class=指定某个class root-dir指的是对哪些root-dir的人,也就是chroot后的登入目录,应用这个规则 设定的目录指的就是我们要限制的目录 yes/no指得是能否在此目录下开新文件 owner,group指出是开出来的文件拥有者及组 Mode指的是文件权限 dirs/nodirs指的是能否开新目录 d_mode设定建立新目录时目录的权限,如果不设定会根据mode来设定 thoughput--控制下载速度 thoughput<子目录列表><文件><远端地址列表> 对远端的地址,控制他抓某个子目录下的某些文件时的速度,例如: thoughput /e/ftp * * oo - * thoughput /e/ftp /sw* * 1024 0.5 * thoughput /e/ftp sw* readme oo - * thoughput /e/ftp sw* * oo - *.foo.com 以上的设定“oo”表示不限制bytes/sec,“-”或是“1.0”都是代表一倍。第一行的意思是说,在/e/ftp下面的文件不限制下载速度;第二行说,在/sw*下面的任何文件限速为1024bytes/sec* 0.5=512bytes/sec;第三行又把readme文件的限速取消;最后一行则对*.foo.com开放全速。

  anonymous-root--对某class设定匿名用户的根目录 anonymous-root[]

  guest-root--预设一个guest用户根目录 guest-root[] 其中用于指定uid的范围 deny-uid,

  deny-gid--拒绝某段UID(GID)范围

  allow-uid,allow-gid--允许某段UID(GID)范围

  restricted-uid,restricted-gid--限制用户不能离开他的登录目录

  unrestricted-uid,unrestricted-gid--用户可以离开他的登录目录

  dns refuse_mismatch--设定DNS查到名称与用户设定不符的动作 dns refuse_mismatch<信息文件>[override] 当用户使用未注册IP时,拒绝他的登录,override则是不理会错误而让他登录,信息文件则是我们要给用户看的。

  2、/etc/ftphosts

    ftphosts文件其实跟ftpaccess里面的access,deny很像,它是特别用来设定某些ID的登录,它没有class定义,所以必须是真实用户。

    allow|deny<用户><地址>[<地址>……] 以下是一些例子:

    allow rose 140.0.0/8 deny jack 140.123.0.0:255.255.0.0 允许rose从140.*.*.*进来,拒绝jack从140.123.*.*上来。

  3、/etc/ftpservers 这个文件控制了当你有不同的IP/hostname的时候,进来的登录使用哪一个配置文件。例如: 10.196.145.10 /etc/ftpd/ftpaccess.somedomain/ 10.196.145.200 /etc/ftpd/ftpaccess.someotherdomain/ some.domain internal 10.196.145.20 /etc/ftpd/config/faqs.org/ ftp.some.domain /etc/ftpd/config/faqs.org/

  4、/etc/ftpusers 在这个文件里记录的用户禁止使用FTP。

  5、/etc/ftpgroups。给SITE GROUP指令使用,在线切换group。SITE EXEC容易造成安全漏洞,一般不建议开放。

  6、/etc/ftpconversions 用来做tar、compress、gzip等动作指令配置文件,只要用预设即可,如果你不开放即时压缩打包,也可以把内容清除。

  三、wu-ftpd的一些相关命令。安装完wu-ftpd之后,会在/usr/bin下安装几个有关ftp管理的命令:

  ftpcount: ftpcount命令可以统计出当前连接到FTP服务器上的用户数目,并且同时列出上限。命令输出如下所示: Service class local 0 Users(20maximum) Service class remote 5 Users(100maximum)

  ftpwho: ftpwho命令可以列出当前连接的用户的详细情况。

  ftpshut: ftpshut命令用于生成一个在/etc/ftpaccess中设置的shut.msg文件,用于关机设定。ftpshut命令的格式为: Ftpshut <-l min> <-d min> time <说明> -l 这个参数设定在关闭FTP服务器功能前多少分钟时停止用户的连接; -d 这个参数设定在关闭FTP服务器功能前多少分钟时切断用户连接;

  time 指定关闭FTP服务器的时间。例如6:20分则写为0620;

  四、有关wu-ftpd的一些说明。 wu-ftpd是免费软件,源代码开放,因此IBM公司不负责该软件的维护和技术支持。目前在wu-ftpd上已经发现了一些安全漏洞,wu-ftpd一直在完善中,因此对于使用wu-ftpd造成的一切直接和间接损失,IBM公司不负任何责任。

 

最后,介绍一下如何在wu-ftpd中设置限制访问目录用户的方法:(转自loveunix)

1.为需要限制的专用FTP用户建立一个组client

2.修改/etc/inetd.conf,把原有的ftp项改成(注意其中的tcp4字段,原先系统是tcp6):
ftp stream tcp4 nowait root /usr/local/bin/ftpd ftpd -a
执行refresh -s inetd刷新inetd进程。

3.在/etc/ftpaccess文件中增加一行:
guestgroup client

4.smit mkuser创建用户,例如user01(primary group=client),并分配初始密码(,然后用pwdadm -f NOCHECK

user01去除修改密码的强制要求),手工修改/etc/passwd文件,其中$HOME设置做下面修改:
从:user01:!:211:204::/home/user01:/usr/bin/ksh
改成:user01:!:211:204::/home/user01/./:/etc/ftponly
(注意:/etc/ftponly要包含在/etc/security/login.cfg中的shells变量中)

5.如果已经创建anonymous ftp用户的话(执行/usr/samples/tcpip/anon.ftp),用cp -p -r /home/user01

命令依次把/home/ftp下的bin、lib、dev、etc、usr子目录拷贝过来
或者手工创建文件(需要从系统文件拷贝过来)和目录,属性如下:

dr-xr-xr-x 2 root system 512 Jul 30 11:55 bin
dr-xr-xr-x 2 root system 512 Jul 30 11:55 dev
dr-xr-xr-x 2 root system 512 Jul 30 11:55 etc
dr-xr-xr-x 2 root system 512 Jul 30 11:55 lib
drwxr-xr-x 2 user01 client 512 Aug 04 13:39 pub
dr-xr-xr-x 3 root system 512 Jul 30 11:55 usr

./bin:
---x--x--x 1 root system 18758 Jul 30 11:55 ls

./dev:
-rw-rw-rw- 1 root system 57 Aug 04 13:33 null

./lib:
-r-xr-xr-x 1 root system 6411931 Jul 30 11:55 libc.a
-r-xr-xr-x 1 root system 11167 Jul 30 11:55 libcrypt.a
-r--r--r-- 1 root system 1644473 Jul 30 11:55 libcurses.a

./usr:
dr-xr-xr-x 3 root system 512 Jul 30 11:55 lpp

./usr/lpp:
dr-xr-xr-x 3 root system 512 Jul 30 11:55 msg

./usr/lpp/msg:
dr-xr-xr-x 2 root system 512 Jul 30 11:55 en_US
完成以上设置后,即可用user01身份ftp登录,执行pwd,你将发现当前目录是/目录。

你可能感兴趣的:(系统技术)