fly兄,你要的wu-ftpd在这里

由 budaodao 在 10-18-2002 16:47 发表:

fly兄,你要的wu-ftpd在这里

用wu-ftpd架设FTP服务器

(本文并非本人“budaodao”原创,原贴来自 http://www.oso.com.cn ,本人发现此文时,并无注明作者姓名,所以还请请原著作者原凉。(我想作者在写此文章的目的也是与天下众多爱好者一起研究共同进步 。

本文摘自----蓝森林 http://www.lslnet.com 2001年1月3日 21:14

若作者有任何疑义请在文章下跟贴注明。谢谢!

一、前言

当我们架设的网站需要提供下载功能时,除了使用http的方式连接外,也可以另外提供ftp服务供用户直接连线下载。事实上,ftp是个存在已久的服务,它的设计是用来传输两台电脑之间的数据,以避免太多的远端执行。如果要传送的文件比较大时,若以http的方式连线传输会占用一些网站的资源(例如可连线的人数),这时就要用到ftp了。ftp是一个以TCP/IP为基础的应用程序,所以一般的ftp服务程序都会以内嵌于inetd的执行方式。

ftp分为两个部分,一个是服务器端的程序,一个是用户端的。在Unix上的ftp服务程序非常多,不同的操作系统所内建的版本也都不一样,常见的有wu-ftpd、proftpd、Troll ftpd、ncftpd和Bero ftpd等等。其中最常用的最受欢迎的的是wu-ftpd,它是当初由华盛顿大学wuarchive.wustl.edu开发出来的,是一个以效率以及稳定性为考量的程序,它提供了原始码以及开放学术单位免费使用。

二、安装与设定

wu-ftpd的安装非常容易,大多数版本的Linux中都包含了wu-ftpd的rpm软件包,你可以在安装Linux时指定装入。如果你想自行编译源代码,也可以到 ftp://ftp.wu-ftpd.org 下载最新版本的源代码包。

安装好以后,可以用ckconfig命令来检查是否已经正确安装。在/etc/passwd中可以指定ftp用户的登入目录。

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

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

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

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

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

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

ftpusers(设定哪些帐号不能用ftp连线)

下面我们来一一介绍。

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

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

class

  1<class 名称="">&lt;种类&gt;&lt;用户地址&gt;[&lt;用户地址&gt;……]   
  2  
  3由class定义的群组用户才可以连线进来,可以使用多层式的class来规范哪些群组的用户能够从哪些地方上来。这里有三个重要的种类,real、anonymous个guest。real如果没有列在定义中,那么这台机器中任何真实的一般用户都无法用自己的帐号连上来。anonymous如果没有在定义,就表示不让没有帐号的的人连上来。如果有定义guest,那么guest群组的人就可以上来。另外&lt;用户地址&gt;是指ftp上来的用户会用到的IP地址,<class 名称="">则可自行设定。以下是一些例子:   
  4  
  5class all real,guest,anonymous *   
  6  
  7定义了一个名为all的class,包含三种人,所有IP的连线用户(也就是所有人都包括了)   
  8  
  9class local real localhost loopback   
 10  
 11local这个class说,只有real的用户可以从本机机器连上来   
 12  
 13class remote guest,anonymous *   
 14  
 15remote这个class包含了从任何地方上来的guest和anonymous用户,但是real用户不算   
 16  
 17class rmtuser real !*.andsky.com   
 18  
 19rmtuser这个class包含了从外面来的(除了andsky.com)真实用户   
 20  
 21autogroup--自动对应群组,用法如下:   
 22  
 23autogroup<group 名称=""><class 名称="">[<class 名称="">……]   
 24  
 25当你定义好的那些同属于一个class的用户,一旦连线上来就会被对应到一个相应的群组下面,这样你就可以用Unix的文件权限对某一群人做限制。   
 26  
 27deny--拒绝某些地址连线,用法如下:   
 28  
 29deny&lt;拒绝连线的地址&gt;&lt;信息文件&gt;   
 30  
 31禁止某些机器连线,并显示&lt;信息文件&gt;。例如:   
 32  
 33deny 210.62.146.*:255.255.255.254 /etc/reject.msg   
 34  
 35guestgroup--设定访客群   
 36  
 37guestuser--设定访客帐号   
 38  
 39realgroup--设定真实群组   
 40  
 41realuser--设定真实帐号   
 42  
 43nice--设定给某些class多少优先权,用法如下:   
 44  
 45nice<nice-delta><class 名称="">   
 46  
 47在Linux中,nice的值是-20(最优先)到19(最后处理),这里你可以指定负的值来提高某class的优先顺序。   
 48  
 49defumask--设定某class的umask,用法如下:   
 50  
 51defumask<umask>[<class 名称="">]   
 52  
 53umask是建立文件时该文件的的权限掩码   
 54  
 55tcpwindow--设定tcpwindow的大小   
 56  
 57keepalive--设定是否使用TCP SO_KEEPALIVE来控制断线情形   
 58  
 59timeout--设定连线超时,用法如下:   
 60  
 61timeout accept&lt;秒&gt;   
 62  
 63接受连线超时,预设120秒   
 64  
 65timeout connect&lt;秒&gt;   
 66  
 67连线建立超时,预设120秒   
 68  
 69timeout data&lt;秒&gt;   
 70  
 71数据传送超时,预设1200秒   
 72  
 73timeout idle&lt;秒&gt;   
 74  
 75用户发呆超时,预设900秒   
 76  
 77file-limit--限制某class只能传几个文件,用法如下:   
 78  
 79file-limit[<raw>]<int out="" total="">[<class>]   
 80  
 81对某个class限制存取文件的数目,包含了in(上传)、out(下载),total raw代表整个传输的结果,不光是数据文件。例如:   
 82  
 83file-limit out 20 lvfour   
 84  
 85限制lvfour这个class的用户最多只能下载20个文件   
 86  
 87byte-limit--限制某class只能传几个字节,用法跟file-limit相似   
 88  
 89limit-time--限制一个连线只能持续多久,用法如下:   
 90  
 91limit-time{*|anonymous|guest}&lt;分钟&gt;   
 92  
 93为了避免有人挂在站上不下来,可以用这个方法限制用户的上线时间,例如:   
 94  
 95limit-time guest 5   
 96  
 97让guest帐号的用户只能用5分钟   
 98  
 99limit--限制某class能同时几人上线,用法如下:   
100  
101limit<class 名称="">&lt;连线数目&gt;&lt;时间区段&gt;&lt;额满信息文件&gt;   
102  
103设定某个class在某一时间区段内最多能够几人同时上线,后面是当超过连线数目时要显示的信息。例如:   
104  
105limit all 32 Any /home/ftp/etc/toomanyuser.msg   
106  
107限制所有连线在任何时间只能有32个用户,超过则拒绝连线并显示信息   
108  
109limit levellone 5 Any2300-0600 /home/ftp/etc/toomanyuser.msg   
110  
111限制levellone这个class的用户在23:00到6:00这段时间内只能有5人连线   
112  
113noretrieve--设定哪些文件不可下载   
114  
115noretrieve[absolute/relative][class=<class 名称="">]…[-][&lt;文件名&gt;…]   
116  
117absolute或relative指文件是用绝对路径还是相对路径   
118  
119allow=retrieve--设定哪些文件可以下载   
120  
121allow[absolute/relative][class=<class 名称="">]…[-][&lt;文件名&gt;…]   
122  
123loginfails--设置登入错误可尝试的次数   
124  
125当用户连线时可能打错ID或密码,这个设定可以让他打错几次以后就断线,避免有人用穷举法猜测密码。   
126  
127private--设定线上是否可以执行SITE GROUP/SITE GPASS   
128  
129当开放SITE GROUP与SITE GPASS指令时,可以用这两个指令切换到/etc/ftpgroup的群组。一般而言我们不会用到这个功能,以避免安全漏洞。   
130  
131greeting--显示Server的版本信息,用法如下:   
132  
133greeting <full brief="" terse="">   
134  
135当用户登入画面显示的server信息,full是预设值,包含版本号以及hostname,brief只有hostname,而terse只有“FTP server ready”的信息。   
136  
137barnner--设定未进入Login画面之前用户看到的信息,用法如下:   
138  
139banner&lt;文件路径&gt;   
140  
141这里叙述了在用户登入时,在还没打ID/Password之前要出现的信息。文件路径指的是相对于真实的路径,而不是相对于ftp的根目录。   
142  
143host--设定ftp主机名   
144  
145email--指定ftp管理者的email地址   
146  
147message--信息文件的设定,用法如下:   
148  
149message&lt;文件&gt;{&lt;何时&gt;{<class 名称="">……}}   
150  
151这里的文件的路径是相对于ftp的根目录的,“何时”是指当你做了什么动作之后的反应,有几个选择:   
152  
153login(登入时)   
154  
155cwd=&lt;目录&gt;(进入某目录时)   
156  
157class 名称是前面已经定义过的,允许你的信息只对哪些人发出。   
158  
159而信息文件的内容除了文字以外,还可以使用以下一些事先定义好的代号:   
160  
161%T(本机时间)   
162  
163%F(目前分区所剩余的空间)   
164  
165%C(目前所在的目录)   
166  
167%E(管理者的E-mail)   
168  
169%R(客户端主机名称)   
170  
171%L(本机主机名称)   
172  
173%U(用户名称)   
174  
175%M(与我相同class用户允许多少人连线)   
176  
177%N(与我相同class用户目前有多少人连线)   
178  
179%B(绝对磁盘限制大小,目前分区(单位blocks))   
180  
181%b(preferred磁盘限制大小,目前分区(单位blocks))   
182  
183%Q(目前已使用的blocks)   
184  
185%I(最大可使用的inodes(+1))   
186  
187%i(Preferred inodes限制)   
188  
189%q(目前使用的indoes)   
190  
191%H(超量使用磁盘空间的时间限制)   
192  
193%h(超量使用文件数目的时间限制)   
194  
195readme--通知用户哪些README文件已经更新   
196  
197log commands--记录用户所使用过的命令,用法如下:   
198  
199log commands&lt;用户种类&gt;   
200  
201log transfers--记录用户所传输的文件,用法如下:   
202  
203log transfers&lt;用户种类&gt;&lt;传输方向&gt;   
204  
205设定有哪些类型的用户传输文件需要记录,包含了inbound(用户上传)和outbound(用户下载),例如:   
206  
207log transfers anonymous,guest inbound,outbound   
208  
209log security--记录安全性,用法如下:   
210  
211log security&lt;用户种类&gt;   
212  
213特别用于记录某类用户关于noretrive、notar等有关安全性的记录   
214  
215log syslog--记录到系统的syslog文件   
216  
217alias--设定目录别名,用法如下:   
218  
219alias&lt;别名字符串&gt;&lt;目录&gt;   
220  
221cdpath--设定cd更换目录搜索顺序   
222  
223compress,tar--设定是否自动压缩,用法如下:   
224  
225compress<yes no=""><class 名称="">[<class 名称="">……]   
226  
227tar<yes no=""><class 名称="">[<class 名称="">……]   
228  
229定义哪些人可以执行压缩以及tar   
230  
231shutdown--通知用户要关站了   
232  
233shutdown&lt;信息文件&gt;   
234  
235如果信息文件存在的话,当这个文件指定的某时间以后,就会拒绝连线并切断已有的连线,等时间一到就关机。这个信息文件的格式如下:   
236  
237&lt;年&gt;&lt;月&gt;&lt;日&gt;&lt;时&gt;&lt;分&gt;&lt;拒绝倒数&gt;&lt;断线倒数&gt;&lt;文字&gt;   
238  
239daemon address--指定只监听某个IP地址,用法如下:   
240  
241daemon address<address>   
242  
243当你有许多IP的时候,使用这个选项将会取消其它任何虚拟FTP主机的设定。不设定的话,监听所有IP。   
244  
245virtual--设定虚拟FTP站台   
246  
247wu-ftpd提供了虚拟主机的功能,也就是说,在同一台机器上提供了不同FTP站台,以主机名称或IP来区分;当然你要用名称的话,还需要跟DNS配合才行。virtual有很多个设定:   
248  
249virtual<address><root banner="" logfile="">&lt;路径&gt;   
250  
251<address>可以是主机名或IP地址   
252  
253<root banner="" logfile="">root指的是ftp的根目录,banner是欢迎信息,logfile指的是这个虚拟站台的log文件   
254  
255以下是一些例子:   
256  
257virtual virtual.com.bj root /home/ftp2   
258  
259virtual virtual.com.bj banner /etc/vftpbanner.2   
260  
261virtual virtual.com.bj logfile /etc/viftplog.2   
262  
263virtual<address><hostname email="">&lt;字母&gt;   
264  
265<hostname email="">用户可以查到hostname跟管理者email,以下是一些例子:   
266  
267virtual 210.62.146.50 hostname virtual.site.com.bj   
268  
269virtual vritual.site.com.bj email [email protected]   
270  
271virtual<address>allow&lt;用户&gt;[&lt;用户&gt;……]   
272  
273virtual <address>deny&lt;用户&gt;[&lt;用户&gt;……]   
274  
275很明显,以上两个选项是设定是否允许连线的,以下是一些例子:   
276  
277virtual virtual.site.com.bj allow *   
278  
279virtual virtual.site.com.bj deny badman   
280  
281virtual<address>private   
282  
283本虚拟站台拒绝anonymous用户   
284  
285defaultserver deny &lt;用户&gt;[&lt;用户&gt;……]   
286  
287defaultserver allow &lt;用户&gt;[&lt;用户&gt;……]   
288  
289当我们使用了虚拟主机,原先的deny,allow设定不知道要设哪个server,所以会无效,用defaultserver代表原来的主机   
290  
291defaultserver private   
292  
293主站台拒绝anonymous用户   
294  
295passive address--转换IP数值   
296  
297passive address&lt;外部IP&gt;/cidr   
298  
299passive ports--passive的ports范围   
300  
301passive ports<cidr><min><max>   
302  
303pasv-allow--允许使用pasv   
304  
305pasv-allow<class 名称="">[&lt;地址&gt;……]   
306  
307port-allow--允许使用port   
308  
309port-allow<class 名称="">[&lt;地址&gt;……]   
310  
311mailserver--指定Upload通知的mail服务器   
312  
313incmail--指定anonymous upload的email通知地址   
314  
315virtual incmail--指定虚拟主机anonymous upload的email通知地址   
316  
317defaultserver incmail--指定预设主机anonymous upload的email通知地址   
318  
319mailfrom--通知的寄信人upload   
320  
321virtual mailfrom--虚拟主机upload通知的寄信人   
322  
323defaultserver mailfrom--预设主机upload通知的寄信人   
324  
325chmod--设定是否可以改变文件权限   
326  
327delete--设定是否可以删除文件   
328  
329overwrite--覆盖文件   
330  
331rename--重命名文件   
332  
333umask--允许设定umask   
334  
335passwd-check--设定anonymous FTP的密码检查程度,用法如下:   
336  
337passwd-check<none rfc822="" trivial="">(<enforce warn=""> )   
338  
339设定对anonymous ftp用户的密码是否检查,none表示不检查,trivial为包含@的任意密码,rfc822则</enforce></none></class></class></max></min></cidr></address></address></address></hostname></hostname></address></root></address></root></address></address></class></class></yes></class></class></yes></class></full></class></class></class></class></int></raw></class></umask></class></nice-delta></class></class></group></class></class>
Published At
Categories with 服务器类
Tagged with
comments powered by Disqus