wu-ftp配置
作者yunlei
FTP:文件传输协议,客户/服务器模式
一、安装WU-FTPD
#rpm -ivh wu-ftpd*.rpm
#tar zxvf wu-ftpd*.tar.gz
#cd wu-ftp*
#./configure
#make
#make install
如果没有指定安装目录,那么其执行文件默认会分别安装在/usr/bin和/usr/sbin 中。
二、启动WU-FTPD
cd 到/etc/xinetd.d/目录
打开wu-ftpd文件,将其中的disable = yes 改为disable = no。
然后重新启动xinetd服务:
#/etc/rc.d/init.d/xinetd restart
三、确认FTP是否启动
#telnet localhost 21
Trying 127.0.0.1
connected to rh
escape character is '^]',
220 rh.china.com FTP server (version wu-2.6.1) mon jul 24 01:59:25 EDT 2000)ready.
^] //按ctrl+]号中断。
telnet>q //按Q键退出。
四、匿名FTP的设置与组织
/etc/ftpaccess //WU-FTPD 最重要的设定文件
/etc/ftpconversions //设置FTP匿名用户传输文件时,可对文件做tar,压缩,解压缩等处理。
/etc/ftpgroups //限定哪些用户组不能登陆到FTP服务器。
/etc/ftphosts //限定哪些网络地址的机器不能连接到FTP服务器
/etc/ftpusers //限定谁不能登陆FTP服务器。
WU-FTPD的可执行程序
/usr/bin/ftpcount //查询目前各类的上线用户人数。
/usr/bin/ftprestart //重新激活FTP
/usr/bin/ftpshut //产生shutmsg文件,并暂停FTP服务。
/usr/bin/ftpwho //查询联机情况
放置上,下载文件的目录
/var/ftp
技巧:
为了增加系统的安全性,可以使用adduser添加FTP服务器资源的管理者,如:ftpadm,并将ftpadm加入到adm组,这样当别人对FTP有所建议时
,可以发email给ftpadm,而不必凡事都要root出马。
修改 /etc/group内容应该如下:
adm:x4:root,adm,daemon,ftpadm
然后:
#adduser ftpadm
/var/ftp/bin目录
因为匿名用户看不到除/var/ftp以外的东西,所以必须提供足够的文件供匿名FTP使用,默认/var/ftp是FTP用户的根目录,/var/ftp/bin目录
放置一些常用的FTP命令,如:ls,tar,gzip,compress等执行文件,此目录权限应该是111。
/var/ftp/etc目录
这个目录放置一些匿名FTP用户需要的设置文件,如passwd,group。当匿名用户执行ls -l时,FTP服务器的文件、目录才会显示拥有者的名称和
组而不是出现数字。此目录的权限是111。
/var/ftp/pub目录
放置下载文件的起点,通常在pub目录下,会将文件资源特性分类,再建立子目录,由管理员自行规划。
/var/ftp/upload目录
上传目录。系统默认不提供上传目录,如果需要做文件上传,要自己建立此目录,以提供匿名FTP用户上传文件,为了避免病毒,一个好的管理
员会筛选upload里的文件和目录,一切都没有问题后,才将上传的文件移至下载区。一般设置upload目录的权限是:chmod 733
/var/ftp/upload/
五、限制登入的用户和主机
将可登入的用户分为3类,分别是real,anonymous,guest。
real:
在此服务器拥有帐号的用户,并以他的帐号登陆,此类帐户默认的登入的目录是其专属目录,但只要他拥有某目录的读取权限,即使该目录不
在其专属目录中,也能切换到哪个目录。
anonymous:
指的是在此服务器上没有帐户的用户,可以用anonymous及电子邮件地址当作帐号名称和密码,以匿名方式登入服务器,登入后的根是/var/ftp
,此类用户不能切换到除/var/ftp以外的目录。
guest:
来宾帐号。在某些情况下,管理员可能只希望某些拥有帐号的用户登入后,只能存取专属目录下的文件,而不得存取专属目录以外的文件,因
此管理员可以利用ftpaccess设定文件中的
guestuser或guestgroup参数指定属于这类的用户有哪些。
设定不可以登入的用户
/etc/ftpusers设定文件用来设定不允许哪些用户登入,方法是每个用户占一行。
修改/etc/ftphosts设定文件
该文件是用来设定允许或拒绝用户从不同的地址登入,有allow和deny两种设定格式。
1允许特定用户从指定地址登入 allow
格式如下:
allow <帐号名称>
<主机地址>
...例如,允许test用户从*.china.com网域登陆,
allow test *.china.com
2拒绝特定用户从指定地址登入 deny
格式如下:
deny <帐号名称>
<主机名称>
...例如,不允许test用户从202.198.16.8地址登陆,
deny test 202.198.16.8
六、服务器环境设定(/etc/ftpaccess文件)
指令
class
class 用来定义用户工作组,并指定属于这工作组的是哪些类别的用户,或来自哪个阻击地址,同时我们可以在一个ftpaccess文件中定义多
个工作组,格式如下:
class <工作组名称><用户类别><用户所在的主机地址>
工作组名称:此工作组名称,由管理员定义
用户类别:
可以使用的类别是real,anonymous,guest。
主机地址:登入用户所在的主机的IP或域名,此处可明确指明主机地址,或采用通配符*也可以。
下例为缺省值:
class all real,guest,anonymous *
//此定义的工作组名称是all,并设定此工作组成员为从任何地方登入的所有类别的用户。
例如,class group1 real *
class group2 real,guest,anonymous *.china.com 203.84.200.*
设定FTP服务器管理员的E-mail地址,当WU-FTPD要显示管理者email地址时,即会显示此处的设定
格式:
email <email地址>
例如:
email ylei@163.com
练习:
1启动FTP
2建立用户帐户aaa和bbb,设置不允许bbb登陆
3建立工作组group1,定义此工作组成员是从192.168.9.0网络登陆的real,和anonymous类别的用户
guestuser
指定属于guest类别的用户
例如(格式):
guestuser aaa bbb
/*以空格分开多个帐户,管理员在指定了guest类别的用户有哪些后,还需要将/var/ftp 目录下的bin,etc,lib和pub等4个目录及其下的所有文
件,复制到guest类别用户的专属目录下,如此该用户登入后才能正常工作。*/
guestgroup
用来指定属于guest 类别的工作组有哪些,下例将指定属于guestgp工作组的用户,都属于guest类别:
guestgroup guestgp //guestgp工作组要先建立才行。
loginfails
设定允许用户最多登入失败的次数,格式如下:
loginfails <登入次数> //登入次数指当用户输入了错误的帐号和密码超过了设定的登入次数之后,即不再允许用户再尝试登入。
例如:
loginfails 3
readme
用来设定当用户登入FTP后,或第一次切换某目录时,会出现提示信息提醒用户自行读取说明文件,其格式如下:
readme <说明文件路径><时机><工作组名称>
说明文件路径:
设定说明文件的位置,此处设定值可以使用通配符*
时机:
设定要显示提示信息的时机,使用login选项,表示用户登入后;使用cwd=<路径>选项,表示用户第一次切换到该目录时。
工作组名称:
只针对指定的工作组,才显示提示信息。
练习:
设定:
readme README* login //当用户登入FTP时,系统会提示用户读取同一目录下的README*文件
在user的专属目录下建立以README文件,或建立以README名称开头的文件,并输入些内容。
重新启动xinetd服务
/etc/rc.d/init.d/xinetd restart
在shell状态以user身份连接ftp server。会有提示你读取README文件
例二
设定readme README* cwd=* //表示当用户地一次切换到任一目录时,系统会提示用户读取同一目录下的README*文件。
例三
设定readme README* CWD=/LIB GROUP1 //表示当group1工作组的用户第一次切换到/lib目录时,系统才会提示该用户读取README*文件。
message
是用来设定当用户登入后,或第一次切换到某目录时,系统所要显示的欢迎信息,其格式如下:
message <信息文件路径><时机><类别>
信息文件路径:
设定欢迎信息文件存放的位置,此位置的路径是相对于/var/ftp目录的。
时机:
设定要显示提示信息的时机。使用login选项,表示用户登入后,cwd=< 路径>则表示用户第一次切换到该目录时,只有当用户地一次切换到该
目录时,才显示此提示信息,若再次切换回到同一目录则不再显示信息。
工作组名称:
只针对指定的工作组,才显示欢迎信息。
可使用的变量
%T
FTP服务器主机的时间
%F
目前目录分区所剩下的空间大小
%C
目前所在的FTP目录名称
%E
FTP服务器管理员的EMAIL地址
%R
用户原来主机的名称(远程的)
%L
FTP服务器的主机名称
%U
登入的用户名称
%M
同一工作组可允许最多几个用户登入
%N
同一工作组目前已经登入的用户数目
默认值是:
message /welcome.msg login //表示当匿名用户登入时,执行/var/ftp目录下的welcome.msg文件
message .message cwd=* //表示当匿名用户转换目录时(cwd=*),执行转换目录下的.message隐藏文件。
可以在welcome.msg文件内输入下列内容:
欢迎来自%R的朋友!
本地主机地址是%L!
您是目前站上第%N位用户!
目前本地时间是:%T。
您目前所在的目录是:%C。
如果有问题,请和我联系:%E。
tar
设定文件压缩功能。tar可以设定是否允许某些工作组利用tar方式在线压缩文件,格式:
tar <设定值><工作组名称>
设定值:可使用的选项有yes,no;分别表示启动和关闭使用tar功能。
工作组名称:利用class定义的工作组名称。
例如(默认为允许all工作组使用tar在线压缩文件)
tar yes all
指令的执行权限
此类可用来设定允许哪些类别的用户执行chmod等命令,格式:
chmod <设定值><用户类别>
delete<设定值><用户类别>
overwrite<设定值><用户类别>
rename<设定值><用户类别>
umask<设定值><用户类别>
设定值:可使用的选项有yes,no。分别表示是否允许执行此指令,默认所有人都能执行
用户类别:可使用的类别为real,anonymous,guest。
例如(不允许guest,anonymous身份登入的用户执行chmod,delete,overwrite,rename指令)
chmod no guest,anonymous
delete no guest,anonymous
overwrite no guest,anonymous
rename no guest,anonymous
compress
可设定是否允许某些工作组利用compress方式进行在线压缩文件,格式:
compress <设定值><工作组名称>
设定值:可使用的选项有yes,no。分别表示启动和关闭使用compress功能
工作组名称:利用class定义的工作组名称
例如(允许all组可以使用compress功能)
compress yes all
log commands
可用来指定要记录哪些用户所执行的命令,其格式如下:
log commands <用户类别>
用户类别:可使用的用户类别是real,anonymous,guest
例如:
log commmands real
//记录内容会被存储在/var/log/xferlog内。
log transfers
可用来指定要记录哪些用户传输文件的动作,格式:
log transfers <用户类别><传输动作>
用户类别:可使用的类别是real,anonymous,guest。
传输动作:可使用的选项有两种:inbound(用来记录上传到服务器的动作);outbound(表示记录从服务器端下载文件的动作)
例如(记录anonymous用户所有上传和下载文件的动作):
log transfers anonymous inbound,outbound
//记录内容会写到/var/log/xferlog内。
shutdown
设定何时关闭FTP服务器,格式:
shutdown <设定文件的路径>
设定文件的路径:
此设定文件的内容是有关shutdown指令的设定,默认值是/etc/shutmsg文件。
此文件格式如下:
<年><月><日><时><分><不能FTP登入的时间><用户被踢出的时间>
例如:
2003 12 7 0 30 20 5
//表示FTP服务器在2003年12月7日0时30分关闭,0时10分钟后禁止用户FTP登入,0时25分时所有用户会被系统踢出。
若要启动FTP,将/etc/shutmsg文件删除即可
七、设置上传目录
按下面步骤完成:
1 #cd /var/ftp //切换到匿名FTP根目录
2 #mkdir upload //建立用来上传的目录upload
3 #chmod 733 upload //设置此目录权限为733,即任何人都具备写入和执行的权限。或333。
4 在/etc/ftpaccess文件内加入如下内容:
upload /var/ftp /upload yes root ftp 0600 nodir
/*设置匿名FTP的根目录是/var/ftp,后面的upload目录(/var/ftp/upload)是可供上传文件的目录,允许上传,上传文件的拥有者为root,
上传文件的所属组为FTP,上传后的文件权限设置为0600(-rw-------),而且不能建立子目录
5检查下列指令是否设置正确
chmod no guest,anonymous
delete no guest,anonymous
overwrite no guest,anonymous
rename no guest,anonymous
详细说明
语法:
upload <FTP根目录><上传目录><是否允许上传[yes/no]><上传文件后的拥有者><上传文件后的拥有组><权限><是否允许建立子目录
[dirs/nodirs]>
/*upload命令可设置用户上传文件的路径,或是拒绝上传文件的目录,还可设置上传后文件的归属与权限,如果决定要开放上传到upload目录
,要先开放可写入的权限*/
#chmod a+w /var/ftp/upload
6设置/var/ftp目录下不允许上传文件:(/etc/ftpaccess文件)
upload /var/ftp * no
upload /var/ftp/bin no
upload /var/ftp/etc no
/*当权限设为0600 时,匿名用户所上传的文件不能立刻下载,需要等FTP管理者将文件权限改为0644才可提供下载,如果想把upload上传的文
件立即可供下载,只要将文件属性改为0744即可,如下: upload /var/ftp /upload yes root ftp 0744 nodirs */
设置过滤功能
语法:
path-filter <用户类别> <信息文件> <上传文件名规则>
//path-filter的功能是过滤用户上传的文件名是否合法
存取控制
此处的设定可用来定义工作组,允许或拒绝哪些用户,或从哪里登陆
deny
用来设定此FTP服务器拒绝用户从哪些网址登入,并决定此时要显示提示文字,格式:
deny <主机地址><提示文字文件路径>
主机地址:
IP地址或域名,此处可明确指明主机地址,或采用通配符*也可以。
提示文字文件路径:
当拒绝用户登入时,所要出现提示文字文件的位置。
例如(拒绝用户从china.com网址登入,同时显示 /etc/msgs/reject.msg文件的信息)
deny *.china.com /etc/msgs/reject.msg
例如(拒绝用户从192.168.1.0网络登入,同时显示/etc/msgs/reject.msg文件信息)
deny 192.168.1.* /etc/msgs/reject.msg
//注意:/etc/msgs/reject.msg文件要自己建立
limit
设定某一工作组在某段时间同时最多上线人数,格式:
limit <工作组名称><人数><时间><提示文字文件路径>
工作组名称:
利用class定义的工作组名称
人数:
允许登入的用户数目
时间:指定要限制的时间,其时间格式可采用24小时制,如0800-1800表示从上午8点到下午6点,其他默认格式有以下几种:
Any 任何日期
WK 非假日的工作天
Mo 星期一
To 星期二
We 星期三
Th 星期四
Fr 星期五
Sa 星期六
Su 星期日
//在时间项目中要想表示多个区段的时间,则时间跟时间之间可用“|”相串联。
提示文字文件路径:
当拒绝用户登入时,所要显示提示文字文件的位置。
举例:
/*限制在任何时间内,同一时间最多只能有20个group1工作组的用户登入,当超过此人数时,则拒绝同一工作组的用户再次登入,并显示
/etc/msgs/msg.toomany文件的信息*/
limit group1 20 Any /etc/msgs/msg.toomany
//此group1组要存在,并且由class定义,msg.toomany文件内容要管理者自己编写.
msg.toomany文件内容举例:
Sorry! Too many users!
The limit is %M.
举例2:
/*设定在星期六,星期日,和周一到周五的18点到23点,同一时间最多允许30个group1组的用户登入,当拒绝登入时,显示
/etc/msgs/msg.toomany文件的信息*/
limit group1 30 SaSu|Any 1800-2300 /etc/msgs/msg.toomany
//为了防止同时有太多人登入FTP服务器,导致大家下载文件的速度难以接受,合理限制同时登入人数是有必要地。