现在的位置: 首页 > 综合 > 正文

wu-ftpd2.6.2的配置与安装

2013年08月23日 ⁄ 综合 ⁄ 共 6684字 ⁄ 字号 评论关闭

两年前的文章,拿出来充充门面。

——————————————————

wu-ftpd2.6.2的配置与安装

( 作者:mikespook | 发布日期:2002-12-8 | 浏览次数:322 )

关键字:linux,服务器,FTP,wu-ftpd
linux 6.5 + wu-ftpd2.6.2

前言:
    本文章只是为了给广大和我一样的菜鸟一个指引。如果你是高手,或对此毫无兴趣。建议请不要在此浪费时间。

  FTP我想大家就是没有用过也一定听说过,它是File Transfer Protocol的简写。这篇文章就是讨论如何使用华盛顿大学的wu-ftpd在linux环境下建立自己的FTP服务器。
  首先要说明的是我所选用的环境。
  Turbo linux 6.5,大家一定奇怪为什么我要选择这个环境,而不用red hat。首先,我想这是个人习惯问题。我非常喜欢Turbo那种古朴的风格,一点也不花哨,非常实用。其次是速度因素,不容质疑,red hat有着非常漂亮的界面和强大的工具集。但是速度慢也就成为了它致命的缺陷。最后,我要说的是,在安装linux时,请不要安装任何服务器。只安装最基本的包就可以了(不要忘了装gcc)。为什么?我们是为了学而用,要不然配服务器的最简单方法就是完全安装发行版了。:)
  wu-ftpd2.6.2,这是我写这篇文章的时候的最新版本,不用它用谁?大家可以到这里下载:   ftp://ftp.wu-ftpd.org/pub/wu-ftpd-attic/wu-ftpd-2.6.2.tar.gz

    首先,来看看 wu-ftpd 的安装。
    将下载下来的 wu-ftpd-2.6.2.tar.gz 拷贝到 /usr/src/ 目录下。然后运行 [root@turbo src]#tar -xzvf wu-ftpd-2.6.2.tar.gz,将 wu-ftpd 解包。(关于此的一点说明:恩,最近看了数学建模的一些书,我发现偷懒最好的方法就是假设。我假设你已经熟悉这些命令,并且知道为什么这么做。当然如果你不知道原因的话就直接联系我吧!)
    进入 wu-ftpd-2.6.2 目录,运行[root@turbo wu-ftpd-2.6.2]#./build lnx 命令。这样配置文件会针对 linux 进行配置编译。
    …………………………………………(等待编译的时间也不算太长,我用了不到10秒。)
    屏幕上输出:
+--------------------------------------------------------+
|Executables are in bin directory:                       |
|   text   date     bss      dec     hex filename        |
| 146196  14084  100576   260856   3faf8 /bin/ftpd       |
|…………………………………………………………………………|
|(这之间都是类似的数据,filename就是最终的BIN文件。)   |
|…………………………………………………………………………|
|Done  |
+--------------------------------------------------------+
    哈哈!好了,运气不错编译成功了!
  继续安装,运行[root@turbo wu-ftpd-2.6.2]#./build install,上面编译好的bin文件就会去它该去的地方(就是最后那个filename下面的路径,比如“/bin/ftpd”)。
  这样,wu-ftpd 就安装好了。
  这里我还想多说几句(现在我写文章怎么废话这么多!),首先在安装的过程中,你要是root。不然,是没办法安的。我有的朋友总问我:“为什么用你说的方法不能安装?”其实就是忽略了这点。还有,如果你原来已经有一个 wu-ftpd 的服务器了,现在从新安装 2.6.2 的时候一定要记得保存下面的文件,要不然你过去的配置会被覆盖掉。你就只好从头再来了~~
  要保存的文件有:
/etc/ftpaccess
/etc/ftpgroups
/etc/ftphosts
/etc/ftpusers

  好!现在需要做的就是开始配置咱们的 wu-ftpd 了!
  首先看看 /etc/services 文件中有没有这么两行:
ftp-date  20/tcp
ftp       21/tcp
  一般来说,系统默认安装的时候都已经加上这两行了。但是我们应该严谨一些,免得最后出错又想不起来哪的问题(切身体会,切记!切记!)。
  接下来看 /ect/inetd.conf 文件。
  关于 inetd.conf 文件,我需要再多说几句。它是守护进程 inetd 的配置文件。这个程序就好比是一个全功能服务器。我们不可能也不必要在我们的系统中同时运行telnet,ftp等等的服务。一切全部由 inetd 程序负责。当需要访问什么服务的时候 inetd 会启动相应的服务。所以,为了让 FTP 正常运行,我们当然需要对 /ect/inetd.conf 进行修改。当然如果大家有兴趣,我可以单独写一篇关于 inetd 进程的我的一点体会。
  inetd.conf 文件的配置可以说是更简单了。你找到这么两行:
# WU ftpd (an alternative ftp server)
#ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
  修改第二行,将注释符去掉:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
  保存就 OK 了!
  要么从新启动系统(显然这种方法简单,但是并不是linux的风格),要么从新启动 inetd 进程。我从书上查了半天,有很多方法,但是实验了一下都不行!我就想了一个笨办法:文件 /var/run/inetd.pid 保存的是 inetd 进程的 PID 号。用[root@turbo run]#kill `cat /var/run/inetd.pid 杀死 inetd 进程。再 [root@turbo run]#inetd 启动它。新的设置就生效了。
  现在你 FTP 一下自己的机子,看看是否能看到登陆提示呢?当然估计你是无法登陆的,因为我们还没有配置访问权限。
  /etc/ftpaccess 文件是用来控制访问权限等内容的。一般,wu-ftpd 在配置的时候主要是修改这个文件。
  下面,老方法,我给大家一个配置实例,一起分析一下。下面这个实例是我用在我的机子上的,实际上是一个 anonymous 用户访问的配置。在使用这个配置之前,你还应该做这么一些工作。

  1.建立匿名用户。
    虽然我们总说匿名、匿名的,其实在我们用 ftp 登陆 linux 系统的时候,我们是其系统中的一个合法用户。因为所有 UNIX 操作系统都要求每个进程都有其所有者,那么 ftp 也就不例外!了为此我们需要建立一个用户“ftp”(实际上并不一定要叫这个名字,但是为了自己管理方便,起名字的时候还是有意义的好)。
  编辑 /etc/shells 文件,在文件中添加这么一句“/bin/ftponly”。这样,添加用户的时候就可以使用 /bin/ftponly 这个shell了。
    使用 groupadd 添加用户组 ftp,同时使用 useradd 添加用户 ftp。其中用户 ftp 的设置如下:
ftp:x:14:50:Ftp User:/bin/ftpd:
  组 ftp 的设置如下:
ftp:x:50:
  一般来说,系统都为我们建立好了组 ftp 和 用户 ftp。如果你在建立的时候系统提示你已经存在该用户或组的话,那你就可以跳过这一步。

  2.建立 FTP 目录
  既然是匿名的FTP,那你的FTP目录下应该有这么几个文件夹:
“pub”、“bin”、“etc”、“lib”。
  进入 lib 目录,输入以下命令建立连接文件:
[root@turbo lib]#ln -s /lib/ld-2.1.3.so ld-linux.so.2
[root@turbo lib]#ln -s /lib/libc-2.1.3.so libc.so.6
[root@turbo lib]#ln -s /lib/libnsl-2.1.3.so libnsl.so.1
[root@turbo lib]#ln -s /lib/libnss_files-2.1.3.so libnss_files.so.2
[root@turbo lib]#ln -s /lib/ld-2.1.3.so ld-linux.so.2
  进入 bin 目录,输入以下命令建立连接文件:
[root@turbo bin]#ln -s /bin/gzip zcat
  进入 etc 目录,建立 passwd 文件和 group 文件,内容分别如下:
+--- passwd ---+
|root:*:0:0::: |
|ftp:*:14:50:::|
+--------------+

+--- group ---+
|root::0:     |
|ftp::50:     |
+-------------+

  3.建立 /etc/ftpaccess 文件
  终于啊,做了那么多准备工作可以配置我们的 FTP 服务器了。
+---------------------------------------------------+
|class anon anonymous *                             |
|class nonanon real,guest *                         |
|email mikespook@hotmail.com                        |
|loginfails 5                                       |
|limit nonanon 0 Wk0000-2359 /home/ftp/.norealusers |
|message /home/ftp/welcome.msg login                |
|message /home/ftp/message cwd=*                    |
|compress yes anon                                  |
|tar yes anon                                       |
|chmod no anon                                      |
|delete no anon                                     |
|overwrite no anon                                  |
|rename no anon                                     |
|log transfers anonymous inbound,oubound            |
|passwd-check rfc822 warn                           |
+---------------------------------------------------+
  这就是匿名登陆的一般脚本。我下面逐项解释一下各个功能。
  a.class 命令,class命令分配一个新的用户类。它的命令原型是这样的:
class classname type address
  其中,classname是用户类名,在本例中分别是 anon 和 nonanon。type 只有三种值:anonymous、real、guest。从字面意思就可以知道其含义,我就不多说了。最后一个参数是 address,它是用来控制访问的IP的。当为“*”号时,允许所有IP的连接。比如只想让192.168.0 网段的人访问那么可以用“192.168.0.*”代替本例中的“*”。
  b.email 命令,这个不用多说了吧?就是管理员的电子邮件地址。
  c.loginfails 命令,非常有用,是阻止穷举法入侵的好选项。当登陆失败 5 次的时候就断开连接。当然你可以自己设置次数。
  d.limit 命令,控制访问方式的。命令原型如下:
limit class n times message_file
  可以这么说吧,这是最有用的命令了。你如果用好了这个命令会有一想不到的结果。class 就是前面用 class 命令定义的用户类名。n 是这种用户登陆的最大个数。times 是可访问的时间。message_file 是当拒绝登陆的时候显示给用户的信息,这是一个文本文件。如果你把本例中的 limit 这句做如下修改:
limit anon 0 Wk0000-2359 /home/ftp/.norealusers
  会怎么样呢?哈哈,匿名用户就无法登陆了。
  关于时间我还要多说一下。“Wk”代表的是整个一个星期。“Su”、“Mo”、“Tu”、“We”、“Th”、“Fr”、“Sa”分别代表星期天到星期六。时间是用hhmm的格式,注意中间没有任何符号!
  e.message 命令,命令原型:
message path when class
  介绍这个命令就不能不说说 banner 命令,banner 命令的功能就是在用户连接到FTP服务器,但是还没有登陆的时候显示的信息。而message 命令就不一样了。它有个参数 “when”,当它为“login”的时候,就是用户成功登陆以后显示的信息。当它为“cwd=path”的时候,就是当进入 path 目录的是时候显示信息。
  f.compress 命令,当后面是“off”的时候不使用文件转换功能,为“on”时使用。
    g.tar 命令,当后面是“off”的时候不使用归档功能,为“on”时使用。
    h.chmod 命令,当后面是“off”的时候用户不可以修改服务器上文件的权限,为“on”时可以修改。
    i.delete 命令,当后面是“off”的时候用户不可以删除服务器上属于他们的文件,为“on”时可以删除。
    j.overwrite 命令,当后面是“off”的时候用户不可以覆盖服务器上属于他们的文件,为“on”时可以覆盖。
    k.rename 命令,当后面是“off”的时候用户不可以为服务器上属于他们的文件改名,为“on”时可以更改。
    l.log transfers 命令,安全日志就靠这个来设置了。命令原型:
log transfers typelist directions
  typelist 是用逗号分隔的用户类清单。directions 表示需要记录的数据传输,只有两种选择:inbound 和 outbound。
    m.passwd-check 命令,现在国内的匿名服务器很少会要求用户输入电子邮件地址作为登陆口令,但是就我所了解的,国外的很多大学的FTP服务器依然需要电子邮件作为登陆口令。命令原型:
passwd-check strictness enforcement
  参数 strictness 的作用是检查电子邮件的正确性,设置成“none”不检查,设置成“trivial”则只要地址中含有“@”即可,设置成“rfc822”为最严格的格式检查。参数 enforcement 是控制匿名用户访问的。当用户输入错误的电子邮件地址时,设置成“warn”将会给出错误警告但是继续执行,设置成“enforce”将拒绝用户登陆。
  n.deny 命令,这个命令在例子中并没有用到,但是我觉得有必要提一下。命令原型:
deny address message-file
  当你想拒绝某个IP地址或某个网段的访问的时候可以使用这个命令。比如:
deny 192.168.* /home/ftp/deny-ip.msg
  将拒绝 192.168 下的所有IP地址访问。

  好了,简单的介绍就这么些,还有一些命令由于不是很常用。我就不介绍了。本来想再介绍一下 path-filter 和 upload 命令,但实在打不动字了,就写到这里吧。如果你想了解更多的内容,直接联系我,或去 sunnet 的 IRC 找我。欢迎一起切磋讨论。

  由于我是菜鸟,或许有什么不对的地方。也可能一些细节我没有考虑到。如果你知道的话希望不惜指教。小弟感激不尽!!

抱歉!评论已关闭.