wu-ftpd构建入门[1]

[入库:2005年9月19日] [更新:2007年3月25日]

本文简介:

本地 web 服务器脱机调试环境的构建入门    
 <2002-09-04>

        各位大虾!我有一台Linux server,各种网络组件都已安装。Win95 client可以ping server,http访问server,但是不能telnet和ftp server,服务都已安装。
请大家指点一二。
谢谢!


--------------------------------------------------------------------------------
**********************************
I need guns. Lots of guns!
**********************************


liujiankk


[级别]浮云版主
 

发帖: 5355
积分: 146
于2002-04-05 21:13
--------------------------------------------------------------------------------


【转帖】Linuxaid专业技术网站
概述
使用文件传输协议(FTP)来通过网络在计算机之间传输文件是很普遍的一种方法。几乎在所有的平台上面都有FTP的客户端和服务端的软件,因此用FTP来传送文件也是很方便的一个方法。

有很多配置FTP服务器的不同方法。其中一种是把FTP配置成只对系统中的用户开放的私有服务器,这也是FTP的默认配置。一个私有的FTP服务器只运行系统中的用户访问,而且可以对用户进行访问控制,这样可以给予或拒绝特定用户的访问权限。

另一种是把FTP服务器配置成匿名服务器。匿名FTP服务器允许任何人(不管有没有帐号)访问服务器并传输文件。因为可能存在潜在的安全问题,必须小心配置使得只允许访问系统中特定的目录。

在这一节里,我们把FTP配置成“chrooted”的方式,这种配置运行用户访问,例如:Web站点的目录,但是不允许他们访问更高一层的目录。

注意事项
下面所有的命令都是Unix兼容的命令。

源路径都为“/var/tmp”(当然在实际情况中也可以用其它路径)。

安装在RedHat Linux 6.1下测试通过。

要用“root”用户进行安装。

wu-ftp的版本号是2.6.0。

软件包的来源
wu-ftp的主页:http://www.wu-ftpd.org/。

下载:wu-ftpd-2.6.0.tar.gz

编译和安装
把软件包(tar.gz)解压缩:

[root@deep]# cp wu-ftpd-version.tar.gz /var/tmp
[root@deep]# cd /var/tmp
[root@deep]# tar xzpf wu-ftpd-version.tar.gz

编译和优化
转到wu-ftpd的新目录下,运行下面的命令:

编辑“ftpcount.c”文件(vi +241 src/ftpcount.c),改变下面这一行:

#if defined (LINUX)

改为:

#if defined (LINUX_BUT_NOT_REDHAT_6_0)

编辑“pathnames.h.in”文件(vi +42 src/pathnames.h.in),改变下面这一行:

#define _PATH_EXECPATH "/bin/ftp-exec"

改为:

#define _PATH_EXECPATH "/usr/bin/ftp-exec"

我们把“ftp-exec”从“/bin”目录改到“/usr/bin”目录下。

先设置编译器的编译参数:

CC="egcs"
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-
pointer -fno-exceptions"
./configure
--prefix=/usr
--sysconfdir=/etc
--localstatedir=/var
--disable-dnsretry
--enable-quota
--enable-pam
--disable-daemon
--disable-newlines
--disable-virtual
--disable-plsm
--disable-pasvip
--disable-anonymous
--enable-ls
--enable-numericuid

这些编译参数告诉编译器如何编译wu-ftpd:

l 不要用失败的DNS查询

l 加入对定额(QUOTA)的支持(如果OS支持)

l 加入对PAM的支持

l 不允许作为单独的daemon运行

l 删除过多的空行

l 不支持虚拟服务器

l 禁止PID加锁睡眠消息(用于繁忙的站点)

l 被动连接的时候不要求用同样的IP

l 不允许匿名ftp访问

l 使用内部的“ls”命令(试验性的)

l 内部的“ls”命令显示UID而不显示用户名(为了提高速度)

用下面的命令编译和安装软件:

make
make install
install -m 755 util/xferstats /usr/sbin
touch /var/log/xferlog
chmod 600 /var/log/xferlog
cd /usr/sbin
ln -sf in.ftpd /usr/sbin/wu.ftpd
ln -sf in.ftpd /usr/sbin/in.wuftpd
strip /usr/bin/ftpcount
strip /usr/bin/ftpwho
strip /usr/sbin/in.ftpd
strip /usr/sbin/ftpshut
strip /usr/sbin/ckconfig
strip /usr/sbin/ftprestart

上面的“make”和“make install”可以配置软件以保证系统中有编译所需要的函数库,然后把所有的源文件都编译成可执行的二进制文件,最后把二进制文件和配置文件安装到相应的目录里。

“install –m”安装“xferstats”程序,用于统计传输了多少文件。“touch”命令为xferstats在“/var/log”目录下创建日志文件。“chomod”把“xferlog”的权限改为只对超级用户“root”可读和可写。接着,我们为“in.ftpd”二进制文件创建符号链接。最后,用“strip”命令减小所有二进制文件的大小以提高wu-ftpd的性能。

清除不必要的文件
[root@deep]# cd /var/tmp
[root@deep]# rm -rf wu-ftpd-version/ wu-ftpd-version.tar.gz

“rm”命令删除所有编译和安装wu-ftpd所需要的源程序,并且把wu-ftpd软件的压缩包删除掉。

为FTP站点的用户建立没有shell的帐号
首先,创建一个新的用户,这个用户被允许连接到ftp服务器上。因为要有“chroot”的环境,这个帐号不同于正常的用户帐号,不能受访问限制。“chroot”使用户产生这样的感觉好像自己已经在文件系统的最顶层了。

第一步

用下面的命令在“/etc/passwd”文件中创建用户。对于每个允许访问ftp服务器的新用户都要重复这个步骤。

[root@deep]# mkdir /home/ftp
[root@deep]# useradd -d /home/ftp/ftpadmin/ -s /dev/null ftpadmin > /dev/null 2>&1
[root@deep]# passwd ftpadmin

Changing password for user ftpadmin
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully

第二步

编辑“/etc/shells”文件并加入一个空shell,如:null。这个假的shell可以限制用户对ftp服务器的访问。

[root@deep]# vi /etc/shells

/bin/bash
/bin/sh
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
/dev/null ? This is our added no existent shell

第三步

现在编辑“/etc/passwd”文件,手工加上“/./”把“/home/ftp”目录和“/ftpadmin”目录分开,用户“ftpadmin”会自动转到(chdir)“/ftpadming”目录下。在“passwd”文件中每添加一个ftp用户都要重复这个步骤。

编辑“passwd”文件(vi /etc/passwd),把下面这一行改为:

ftpadmin:x:502:502::/home/ftp/ftpadmin/:/dev/null

改为:

ftpadmin:x:502:502::/home/ftp/./ftpadmin/:/dev/null

帐号为“ftpadmin”,这这个帐号的家目录有一些奇怪。第一部分“/home/ftp/”表示“chroot”时作为根目录的目录。被点号分开的“/ftpadmin”表示当登录ftp服务器的时候会自动转到这个目录。“/dev/null”这个空shell不允许“ftpadmin”像正常用户那样登录。经过这些改变,“ftpadmin”用户用的不是真正的shell而是伪shell,这样访问ftp服务器就受到限制。

创建一个“chroot”用户环境
先要创建一个简单的根文件系统(root file system),包含有足够的文件,如果二进制程序、口令文件,等等。当用户登录的时候,Unix就可以改变根文件系统(chroot)。注意一下,如果编译的时候象上面那样加上“--enable-ls”参数,“/home/ftp/bin”和“/home/ftp/lib”两个目录就可以不要了,因为WU-FTP会用自己带的“ls”。不过我们还是介绍一下旧的方法,也就是把“/bin/ls”拷贝到“/home/ftp/bin”(chroot之后就是“/bin”)目录下,然后把相关的运行库拷贝到“/home/ftp/lib”目录下。

第一步
创建改变根文件系统(chrooted)环境所需要的所有的目录:

[root@deep]# mkdir /home/ftp/dev
[root@deep]# mkdir /home/ftp/etc
[root@deep]# mkdir /home/ftp/bin (require only if you are not using the “--enable-ls” option)
[root@deep]# mkdir /home/ftp/lib (require only if you are not using the “--enable-ls” option)

第二步
把新目录的权限设成0511:

[root@deep]# chmod 0511 /home/ftp/dev
[root@deep]# chmod 0511 /home/ftp/etc
[root@deep]# chmod 0511 /home/ftp/bin (require only if you are not using the “--enable-ls” option)
[root@deep]# chmod 0511 /home/ftp/lib (require only if you are not using the “--enable-ls” option)

上面这些“chmod”命令把chrooted之后的“dev”、“etc”、“bin”和“lib”目录设置成超级用户“root”可读、可执行,用户组和所有用户可执行。

第三步
把“/bin/ls”文件拷贝到“/home/ftp/bin”目录下,并把“ls”的权限改为0111(不运行用户改变这个文件)。

[root@deep]# cp /bin/ls /home/ftp/bin (require only if you are not using the “--enable-ls” option)
[root@deep]# chmod 0111 /bin/ls /home/ftp/bin/ls (require only if you are not using the “--enable-ls” option)

第四布
找到“ls”程序所需的共享库:

[root@deep]# ldd /bin/ls (require only if you are not using the “--enable-ls” option)

libc.so.6 => /lib/libc.so.6 (0x00125000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00110000)

把共享库拷贝到“/home/ftp/lib”目录下:

[root@deep]# cp /lib/libc.so.6 /home/ftp/lib/ (require only if you are not using the “--enable-ls” option)
[root@deep]# cp /lib/ld-linux.so.2 /home/ftp/lib/ (require only if you are not using the “--enable-ls” option)

注意:如果想用Linux的“ls”程序而不是用WU-ftpd自带的“ls”(编译时加上“--enable-ls”参数),才需要第三和第四步。

第五步
创建“/home/ftp/dev/null”文件:

[root@deep]# mknod /home/ftp/dev/null c 1 3
[root@deep]# chmod 666 /home/ftp/dev/null

第六步
把“group”和“passwd”文件拷贝到“/home/ftp/etc”目录下,然后再改变这两个文件。

[root@deep]# cp /etc/passwd /home/ftp/etc/
[root@deep]# cp /etc/group /home/ftp/etc/

编辑“passwd”文件(vi /home/ftp/etc/passwd)把除了“root”和允许使用ftp的用户之外的所有其它项删掉。这对于改变根文件系统的环境很重要,改变之后的“passwd”文件会是象下面这样的:

root:x:0:0:root:/:/dev/null
ftpadmin:x:502:502::/ftpadmin/:/dev/null

编辑“group”文件(vi /home/ftp/etc/group),把除了“root”和允许使用ftp的用户之外的所有其它项删掉。改变之后的“group”文件会是象下面这样的:

root:x:0:root
ftpadmin:x:502:

配置
可以到这去下载“floppy.tgz”文件:http://pages.infinit.net/lotus1/doc/opti/floppy.tgz。把“floppy.tgz”文件解开之后,可以在相应的目录下发现我们在这本书中介绍的所有软件的配置文件。这样就没有必要手工重新生成这些文件,或者用拷贝粘贴的方法把它们粘贴到配置文件中去。不管是打算自己动手生成配置文件还是拷贝现成的,你都要学会自己修改配置文件并且把配置文件拷贝到正确的目录下。下面将具体说明。

为了运行FTP服务器,必须创建或者把下面的文件拷贝到相应的目录下:

l 把“ftpaccess”文件拷贝到“/etc”目录下

l 把“ftpusers”文件拷贝到“/etc”目录下

l 把“ftphosts”文件拷贝到“/etc”目录下

l 把“ftpgroups”文件拷贝到“/etc”目录下

l 把“ftpconversion”文件拷贝到“/etc”目录下

l 把“ftp”文件拷贝到“/etc/pam.d”目录下

l 把“ftpd”文件拷贝到“/etc/logrotate.d”目录下

可以把“floppy.tgz”解压之后,找到上面列出来的文件,并拷贝到相应的目录下,或者用拷贝粘贴的方法从本书中直接粘贴出。

配置“/etc/ftpaccess”文件
“/etc/ftpaccess”文件是用来配置“ftpd”的。这个文件主要是设置允许哪个用户、多少用户访问ftp服务器,以及一些安全方面的问题。配置文件的每一行或者定义一个属性或者设定一个属性值,。对于非匿名的“chroot”访问,必须创建一些“guestgroup”,每一个都要对应“/home/ftp/etc/group”文件中的项。

创建ftpaccess文件(touch /etc/ftpaccess),在文件中加入:

class openarch guest 208.164.186.*
limit openarch 20 MoTuWeTh,Fr0000-1800 /home/ftp/.too_many.msg
email admin@openarch.com
loginfails 3
readme README* login
readme README* cwd=*
message /home/ftp/.welcome.msg login
message .message cwd=*
compress yes all
tar yes all
chmod yes guest
delete yes guest
overwrite yes guest
rename yes guest
log commands real,guest
log transfers real,guest inbound,outbound
guestgroup ftpadmin
guestgroup webmaster

本文关键:wu-ftpd构建入门
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top