| 名称 wu-Ftpd
当前,Linux环境下有许多ftp服务器软件可供选择,但是目前最常见的仍然是wu-Ftpd服务器。这里主要讨论该软件的安装和配置。
一般来说,在安装了linux时,缺省都会自动安装wu-ftpd服务器,但是有时候为了某种需要也需要自己亲自重新安装该服务器软件。安装wu-Ftpd有两方式,一种是安装rpm形式的发布包;一种是自己动手去编译生成Ftp服务器。
rpm包可以在http://rpmfind.net/linux/RPM/WByName.html处下载得到,以rpm包方式安装非常简单,只需要在按下面的简单的几个步骤就可以完成,假设下载得到的rpm包存放在/tmp目录下: #cd /tmp #rpm -ivh wu-ftpd-2.6.0-9.i386.rpm
压缩的源代码可以在ftp://ftp.wu-ftpd.org/pub/wu-ftpd/出得到。这里我们以最新的2.6.0为例说明如何编译安装wu-ftpd。
1、解开源代码
1) 将压缩的源代码拷贝到/usr/src下
#cp wu-ftpd.2.6.0.tar.gz /usr/src
2) 对压缩文档进行解压缩:
#tar xvfz wu-ftpd.2.6.0.tar.gz #cd wu-ftpd-2.6.0
2、敲入命令 "./build xxx" ,可以在这里指定一个C语言编译器:"./build CC=yyy xxx" yyy 指用来替代 "cc" 的其他的编译器。对于linux环境下的gcc编译器,命令应该为:"./build CC=gcc xxx"
#build CC=gcc lnx
xxx可以取下面的值: gen : 通用make(当移植到心得系统时需要拷贝它) aix : IBM AIX aux : AU/X bdi : BSD/OS bsd : BSD dec : DEC Unix 3.X du4 : DEC Unix 4.X or later dyn : Dynix fbs : FreeBSD 2.0 or later hiu : Hitachi Unix hpx : HP-UX lnx : Linux (tested on 2.0.30) nbs : NetBSD 1.X nx2 : NeXTstep 2.x nx3 : NeXTstep 3.x osf : OSF/1 osx : Mac OS X ptx : ??? sco : SCO Unix 3.2v4.2/SCO OpenServer 5 sgi : SGI Irix 4.0.5a sny : Sony NewsOS sol : SunOS 5.x / Solaris 2.x s41 : SunOS 4.1.x ult : Ultrix 4.x uxw : UnixWare 1.1 or later clean : Clean up object files and such to reduce disk space after building. install: Install ftpd
Copying Makefiles.
Linking src/config.h
Making support library. gcc -O3 -fomit-frame-pointer -fno-strength-reduce -pipe -c strcasestr.c gcc -O3 -fomit-frame-pointer -fno-strength-reduce -pipe -c authuser.c gcc -O3 -fomit-frame-pointer -fno-strength-reduce -pipe -c snprintf.c rm -f libsupport.a ar cq libsupport.a strcasestr.o authuser.o snprintf.o ranlib libsupport.a : : : : : : : : :
编译成功以后将生成如下几个可执行文件:
ftpd FTP服务器程序 ftpshut 用于关闭FTP守护进程的程序 ftpcount 记数程序,显示目前ftp登录的人数 ftpwho 查看当前FTP服务器的连线情况,类似与系统的who命令,只不过是查看ftp登录的用户 ckconfig 检查FTP的设置是否正确 ftprestart 重新启动ftp服务器 privatepw 改变wu_ftpd组访问文件信息
3、若只是升级到一个新的版本,应该首先备份系统所有的旧的配置文件。否则这些配置文件将被覆盖。为了适应自己的需求,应当编辑样本配置文件来满足自己的要求,具体配置文件的需求参见后面的内容。
4、以超级用户身份敲入命令"./build install"
#build install
installing binaries. install -c -o bin -g bin -m 110 bin/ftpd /usr/sbin/in.ftpd install -c -o bin -g bin -m 111 bin/ftpshut /usr/bin/ftpshut install -c -o bin -g bin -m 111 bin/ftprestart /usr/bin/ftprestart install -c -o bin -g bin -m 111 bin/ftpcount /usr/bin/ftpcount install -c -o bin -g bin -m 111 bin/ftpwho /usr/bin/ftpwho install -c -o bin -g bin -m 111 bin/privatepw /usr/bin/privatepw installing manpages. install -c -o bin -g bin -m 444 doc/ftpcount.1 /usr/man/man1/ftpcount.1 install -c -o bin -g bin -m 444 doc/ftpwho.1 /usr/man/man1/ftpwho.1 install -c -o bin -g bin -m 444 doc/ftpaccess.5 /usr/man/man5/ftpaccess.5 install -c -o bin -g bin -m 444 doc/ftpconversions.5 /usr/man/man5/ftpconversio5 install -c -o bin -g bin -m 444 doc/ftphosts.5 /usr/man/man5/ftphosts.5 install -c -o bin -g bin -m 444 doc/xferlog.5 /usr/man/man5/xferlog.5 install -c -o bin -g bin -m 444 doc/ftpd.8 /usr/man/man8/ftpd.8
5、编辑 "/etc/inetd.conf" 文件,指向新的ftpd守护进程,大多数情况下,这一步是不必的,因为在build install时,会将新的守护进程拷贝覆盖老的守护进程。若希望使用ftpd的增强的扩展功能,应该在这行最后加上"-a"选项。
ftpd守护进程一般可以携带如下参数,也可以不带任何参数:
-d debug参数,当ftpd守护进程出现错误时,会将错误信息写入到系统记录文件/usr/adm/syslog中 -l 记录每次ftp会话信息到/usr/adm/messages中 -t 设置当FTP客户端多久无操作就自动断线,这个参数后面指定等待的时间,如 -t 600 表示若客户 端若连续10分钟没有动作就自动断线,缺省值是15分钟 -a 使用ftpaccess配置文件内容对ftpd进行更详细复杂的设置 -A 不使用ftpaccess配置文件的设置,缺省值是-A -i 当客户端有上载文件的动作时,就记录在文件xferlog中 -L 使用户连接ftp服务器期间使用的所有命令都被记录到/usr/adm/messages中
6、拷贝tar、gzip、gunzip、compress、uncompress等文件到 "~ftp/bin"中,拷贝"ls"为"~ftp/bin/ls"。
7、若是第一次安装,使用"ckconfig"程序查找ftpd的各种配置文件存放目录:ftpconversions、ftpusers、 和ftpgroups。在"doc/examples"目录下有样本文件。"ckconfig"是一个可执行程序,确保修复该程序检测到的任何问题。
让FTP服务器运转起来
一般来说,只要正确地编译安装了wu-ftpd,该服务器就可以正常运行。用户可以通过FTP命令从各种系统上连接该服务器。
配置文件的设置
1./etc/ftpaccess的设置
这个配置文件是FTP服务器最重要的配置文件,这个文件的设置决定了FTP是否可以正常工作及许多访问权限的设置。如下面的例子所示: class all real,guest,anonymous *
limit all 10 Any /etc/msgs/msg.dead
readme README* login readme README* cwd=*
message /welcome.msg login message .message cwd=*
compress yes all tar yes all
log commands real log transfers anonymous,real inbound,outbound
shutdown /etc/shutmsg
email user@hostname
下面是设置文件各个指示(directive)的详细说明:
指示: loginfails n 密码输入n次就自动断开连接
指示:autogroup 组名 类别 [<类别> ...] 若一个匿名用户属于任何一个参数类别的类,则FTP服务器将实施setegid()调用使其属于这个组名定义的组,这样做是为了实现某些特定类别的匿名用户可以访问一些只允许本组及拥有者可以访问的文件。组名必须是/etc/group内定义的有效组。
指示: class 类名 类别(real、guest、anonumous) IP地址 这个指示是设定FTP服务器用户的类别。 FTP服务器的用户可以分为以下三种类别: real 在该FTP服务器上拥有合法帐户的用户; guest 另外定义某些特定组的用户; anonymous 匿名用户;
举例说明: class outworld real,guest,anonymous * 定义一个名为outworld的类,该类包含三种类型的用户:real,guest,anonymous。该类在后面的指示中使用。其中"*"是类定义中的IP地址部分,表示网络上的所用主机。也就是说明允许任何主机连接FTP服务器。若希望对访问FTP的主机进行一定的权限设置,可以这样做: class friend real,guest,anonymous *.linuxaid.com.cn 202.102.13.* 指定义一个friend类,该类从*.linuxaid.com.cn 及202.102.13.*访问FTP服务器时有特定的权限设定。
指示: limit 类别 人数 时间 文件名 该指示设定在某个类在某个时间内允许连接FTP服务器的人数的限制,并指定当连接人数超过限制,后面的用户连接时显示给用户的消息信息。
举例说明: limit local 20 Any /tmp/message/msg.toomany 上面的例子限定local这个类中的拥护同一时间只能有20人同时上网连接这台FTP服务器,若超过20人则显示/tmp/message/msg.toomany的文件的内容 limit outworld 100 MoTu|Any 2200-0800 /tmp/message/msg.limit 这个例子限制outworld这个类的用户只能在周一周二或每天的晚上10点到第二天早上的8点之间访问该FTP服务器,而且同时连线的人数不可以超过100人,若超过100人,则显示/tmp/message/msg.limit的文件的内容
/tmp/message/msg.limit的内容为: 对不起!本服务器只允许匿名用户在周一周二全天及其他每天晚上10点到第二天早上的8点之间访问,当前时间为%T;而且只允许同时有%M个匿名用户访问,当前有%N个用户在访问该服务器。请在合适的时间访问本FTP服务器,谢谢! 这里的%M是一个变量,代表同时允许连接的人数的上限,FTP服务器可以用前面设置的值自动替代该变量,其他允许的变量包括: %T 本地当前时间; %F CWD所在分区剩余空间,以KB为单位。但该变量不是所有系统都支持。 %C 当前工作目录; %E 定义在/etc/ftpaccess文件中的系统管理员的E-mail地址; %R 远端主机名; %L 本地主机名; %U 登录时所给的用户名; %N 这个类别当前连接的用户数目; 利用这些参数,可以编辑一个详细的说明文件,这样可以让用户清楚当前服务器资源使用情况。
指示: readme 说明文件 指令 当用户执行指定的"指令"时,系统就会自动显示所设置的说明文件; 举例说明: readme README* login 当用户执行登录动作时,只要以README开头的文件内容就会显示给用户。 readme README* cwd=* 表示用户切换目录时(cwd),只要以README开头的文件内容就会显示给用户。 通常README*应该是该目录下文件的说明,让登录的用户可以清楚地知道目录中存放了那些文件;
指示: message 文件名 指令 使当用户执行特定的"指令"时,系统就将指定的文件内容显示给用户; 举例说明: message /msg.welcome login 指定当用户登录时,将自动显示/tmp/message/msg.welcome的内容给用户,注意这里的/msg.welcome指ftp根目录下的msg.welcome文件,即/home/ftp/msg.welcome。 message /welcome cwd=* 指定当用户切换另一个目录时,只要目录中有msg.welcome文件,就显示给用户
指示: compress (yes/no) 类别 设置哪个类别的用户可以使用压缩功能; 举例: compress yes local outworld 允许local 和outworld两个类别的 用户使用压缩功能
指示: tar (yes/no) 类别 指定哪个类别的用户可以使用tar功能;
指示: passwd-check (none/trivial/rfc822) (enforce/warn) 设定当用户以匿名方式登录服务器时密码的方式: none 表示不对密码进行验证,任何密码都可以登录; trival 表示只要密码中包含@就可以登录; rfc822 表示密码一定要符合rfc822中规定的E-mail格式才能登录。如:webmaster@linuxaid.com.cn enforce 表示输入的密码不符合指定格式就不允许登录; warn 表示输入的密码不符合指定格式显示警告信息,但仍然允许登录;
指示: log commands 类别(read/guest/anonumous) 设定那些用户登录时,所使用的操作会被记录在文件/usr/adm/xferlog中。
指示: log transfer 类别(read/guest/anonumous) (inbound/outbound) 设定指定的用户类别在上载还是下载时的相关信息被记录到/usr/adm/xferlog中。 举例说明: log transfer anonymous,real inbound,outbound 当anonymous或real用户登录后,上载和下载的操作会被记录在文件/usr/adm/xferlog中。
指示: shutdown 文件名 FTP服务器关闭的时间可以后面的文件名中指定的文件中指定,设定的时间一到,便无法登录FTP服务器了,只有将这个文件删除才能恢复FTP服务器。文件的格式可以由命令ftpshut来建立。
指示: delete (yes/no) 类别(real/anonymous/guest) 设定是否允许指定用户使用delete命令。 举例说明: delete no guest,anonymous 设定大概内登录的用户为guest或anonymous上不允许执行delete命令。
指示: overwrite (yes/no) 类别(real/anonymous/guest) 设定是否允许指定用户使用overwrite指令。
指示: reame (yes/no) 类别(real/anonymous/guest) 设定是否允许指定用户使用readme指令。
指示: chmod (yes/no) 类别(real/anonymous/guest) 设定是否允许指定用户使用chmod指令。
指示: umask (yes/no) 类别(real/anonymous/guest) 设定是否允许指定用户使用umask指令。
指示: upload [absolute|relative] [class=]... [-]
["dirs"|"nodirs"] []
定义允许用来上载的目录。若允许上载,所有新上载的文件的所有者及组由和定义 ,访问权限将为。对于覆盖老文件的上载文件将保持原来的所有者及访问权限信息。文件上载的权限信息由最大匹配目录项定义,如: upload /var/ftp * no upload /var/ftp /incoming yes ftp daemon 0666 upload /var/ftp /incoming/gifs yes jlc guest 0600 nodirs would only allow uploads into /incoming and /incom- : 将只允许/incoming和/incom-ing/gifs目录上载。上载到/incoming目录下的文件将属于ftp/daemon,访问权限为0666;而上载到/incoming/gifs下的文件将属于jlc/guest,访问权限为0600。应该注意的是 必须匹配"ftp"用户的passwd文件中的主目录。 "dirs"和"nodirs"选项用来设定是否允许在该目录下创建新的子目录。但是缺省是允许创建子目录的。 设定新创建的目录的访问权限,缺省为0777。 上载指示只能施用于用户主目录(chroot()的参数)等同于的用户,可以为*来表示匹配任何主目录。 和也可能指定为*,在这种情况下,任何上载的文件或创建的目录的所有者都等于起父目录的所有者。 选项[absolute|relative]指定是是绝对路径还是相对于chroot()参数指定的目录的相对路径。缺省是绝对路径。也可以指定任意多个class='来进行进一步限定。若指定了任何目录,则该上载指示只影响这些组的用户。
指示: alias 目录别名 目录路径 给指定目录设置一个别名,当切换目录时可以使用别名。 举例说明: alias xwin /pub/linux/xwindows 为/pub/linux/xwindows设置别名xwin,登录以后只要输入命令cd xwin就可以进入该目录。
指示: cdpath 目录 该功能和系统的PATH环境变量设置类似,当cd /etc时,FTP首先查看当前目录下是否有etc子目录,无则看是否有别名,若没有则根据该指示设定的路径查询。
举例说明: cdpath /pub/linux cdpath /pub cdpath / 搜索顺序为:/pub/linux /pub /
指示: path-filter 类别(real/anonymous/guest) 目录 设定上载文件名限制。 举例说明: path-filter anonymous /etc/pathmsg^[-A-Za-z0-9_.]*$^.^- path-filter guest /etc/pathmsg^[-A-Za-z0-9_.]*$^.^- 设置限制anonymous和guest用户上载的文件名只能包含A-Z、a-z、0-9和._-,名字以"."和"-"开头的文件不能上载到服务器上。
指示: guestgroup [ ...] guestuser [ ...] realgroup [ ...] realuser [ ...]
|