由 quanliking 在 09-15-2002 17:25 发表:
【转贴】RED HAT 下面的FTP和MAIL软件
ftp软件:
推荐glftpd,功能强大,命令丰富,被广泛流传于WAREZD界。
说明文件转载(from ror):
[前面的废话]
glFtpD是一个从linux平台上开发出来的FTP服务器软件,现在已经被移植到FBSD, OBSD, NBSD及Solaris等多个*NIX平台上。glFtpD因其强大而丰富的功能配置,被广泛流传于**z的世界中。glFtpD的名字来源于她的创始人:Greyline,其全称是GreyLine File Transfer Protocol Daemon(也不知是真是假)。其官方网站是glFtpD。打算写以下几篇介绍文章。由于我用glFtpD也仅仅半年,其中难免有疏漏和错误,欢迎大家补充修正。
[第一篇]功能简介:介绍在glFtpD的client一端,如何使用site指令进行操作。
[第二篇]安装指南:介绍如何安装glFtpD在linux上。
[第三篇]服务配置:介绍如何配置glFtpD及cookie的使用。
标准的ftp服务器(以solaris自带的ftpd为例)只接受下面几个指令。(关于标准的FTP Protocol可以参阅RFC959,估计没什么人会去看的)
ftp> help Commands may be abbreviated. Commands are: ! cr macdef proxy send $ delete mdelete sendport status account debug mdir put struct append dir mget pwd sunique ascii disconnect mkdir quit tenex bell form mls quote trace binary get mode recv type bye glob mput remotehelp user case hash nmap rename verbose cd help ntrans reset ? cdup lcd open rmdir close ls prompt runique ftp>
除了支持标准的ftp指令,glFtpD的特点之一是其client还可以使用丰富的site指令集来进行操作。如同在ftp里开了个shell一样,ftp的用户可以被分成不同的group,每个group可以有自己的管理员,整个站点还有自己的站长,不同用户可以被赋予不同的权限,所有这一切都可以通过远程的ftp来实现。以下是我查看在我服务器上会员状态的例子:
============================= FREE DISK SPACES: 803.7MB ============================= User ashcan logged in. Logged in to XXX.XX.XX.XXX. ncftp / > ls a$fMs@ROR/ ncftp / > site who Users Logged Onto a$fMs@ROR .-------------------------------------------------------------------------. | User Group Unfo Action | |-----------+----------+------------------+-------------------------------| | fsq | member | No Tagline Set | DL: aot_a.r07 at 22.2K/s | | zhang | member | No Tagline Set | DL: mihk_b.r28 at 20.3K/s | | ashcan | SiTEaDMi | oMG OMg | SITE who | |-----------+----------+------------+-----+-------------------------------| | Total upload speed: 0.0K/s | Total download speed: 42.5K/s | |-----------------------------------+-------------------------------------| | 3 of 50 User(s) Currently Online | `-------------------------------------------------------------------------' Command Successful. ncftp / >
site指令集根据其功能(以1.26版为例),大体可以分为四类:
用户管理,站点管理,信息查询,自定义指令。
用户管理:
Syntax: SITE ADDUSER [
1<sp> username <sp> password ]: 加用户和密码
2
3Syntax: SITE ADDIP [ <sp> username <sp> ip [...<sp> ip10] ]: 加用户的IP
4
5Syntax: SITE GRPADD [ <sp> group name <sp> group info ]: 加用户组
6
7Syntax: SITE DELUSER [ <sp> username ]: 删除用户
8
9Syntax: SITE DELIP [ <sp> username <sp> ip [...<sp> ip10] ]: 删除用户的IP
10
11Syntax: SITE GRPDEL [ <sp> group name ]: 删除用户组
12
13Syntax: SITE RENUSER [ <sp> old_username <sp> new_username ]: 更改用户名
14
15Syntax: SITE CHPASS [ <sp> user <sp> password ]: 更改用户密码
16
17Syntax: SITE READD [ <sp> username ]: 重新加被删除的用户
18
19Syntax: SITE PURGE [ <sp> user ]: 彻底去掉被删除的用户
20
21Syntax: SITE GRPLOG [ <sp> groupname <sp> Num]: 设置该组允许登录的用户数
22
23Syntax: SITE USERS [ <sp> option ]: 查看站点的用户。(option一项用于查询具有该属性的用户)
24
25Syntax: SITE USER [ <sp> username ]: 查看用户的具体信息
26
27Syntax: SITE CHANGE
28
29[ <sp> username <sp> field <sp> value ]:
30
31[ <sp> { <user1> <sp> <user2> } <sp> field <sp> value ]:
32
33[ <sp> =groupname <sp> field <sp> value ]:
34
35[ <sp> * <sp> field <sp> value ]:
36
37更改或设置用户的权限及属性
38
39其中field一栏可以有以下参数:
40
41ratio 上传/下载比例 (3表示上传1M可下载3M,0表示leech)
42
43max_dlspeed 最大下载速度 (KB/s)
44
45max_ulspeed 最大上传速度 (KB/s)
46
47max_sim_down 同时下载线数
48
49max_sim_up 同时上传线数
50
51homedir 用户的根目录 (用户不能cd到其根目录之外)
52
53startup_dir 用户的起始目录 (用户登录后所在的目录)
54
55time_limit 用户在线时间限制 (min)
56
57timeframe 用户在线时间段限制
58
59num_logins 用户允许的同时登录数 (第二个参数是从同一IP的登录数)
60
61flags 用户属性 (如1是站管理员2是组管理员8是匿名用户...)
62
63注1:glFtpD中,必须规定用户登录的IP,如果想取消次限制,把用户IP设成*@*
64
65注2:以上及以下的指令集并不完全,因为只是简介,请参看glFtpD的说明文档获取全部指令集的内容
66
67站点管理:
68
69Syntax: SITE WHO [ <sp> ]: 查看在线用户
70
71Syntax: SITE NUKE [ <sp> directory <sp> ratio <sp> message ]: NUKE一个目录
72
73Syntax: SITE DUPE [-max <num>] searchstr1 [searchstr2 ...] : 查询数据库中重复的目录及文件
74
75Syntax: SITE UNDUPE [ <sp> file ]: 在数据库中删除重复的文件
76
77Syntax: SITE KILL [ <sp> pidtokill ]: 杀掉一个进程
78
79Syntax: SITE KICK [ <sp> usertokill ]: 把一个在线用户蹬出去
80
81
82
83信息查询:
84
85Syntax: SITE TRAFFIC : 查看站点流量
86
87Syntax: SITE NEW [ <sp> num ]: 查看新建的目录
88
89Syntax: SITE RULES : 查看站点规章制度
90
91Syntax: SITE ALUP [num] [section]: 查看上传者排行榜
92
93Syntax: SITE ALDN [num] [section]: 查看下载者排行榜
94
95Syntax: SITE REQUEST [ <sp> request ]: 查看或添加Request
96
97Syntax: SITE REQFILLED [ <sp> request #]: 标记已经完成的Request
98
99Syntax: SITE MSG [ <sp> username <sp> message ]: 查看或发送消息(简单的mail box)
100
101
102
103自定义指令:
104
105除了glFtpD提供的site指令外,服务器管理员还可以自己定义增加site指令。这将在以后的章节中(服务配置)介绍。glFtpD的魅力就在于她的可扩展性,我们可以自己写许多外挂的脚本增加她的功能。
106
107
108
109
110
111在linux上安装glFtpD不是件难事,如果一切顺利得话,只要执行随其自带的安装脚本installgl.sh就可以了。虽然没有rpm那么方便,但基本上也不费什么脑子的。在这一篇里,我想通过对installgl.sh这个脚本多一点的分析,看看安装过程都究竟做了些什么,从而对glFtpD能有个更全面的了解。
112
113glFtpD的作者们没有提供程序的源代码,但是提供了以下几个不同平台上编译好的执行文件。这些平台包括:linux on x86, linux on power pc, linux on sparc, freeBSD on x86, openBSD on x86, openBSD on sparc, netBSD on x86, Solaris on sparc和AIX。所以目前,glFtpD只能安装在这些平台上。以linux on x86为例,安装glFtpD1.26的简要步骤如下:
114
1151\. 首先你要有root权限,你的kernel里有share memory的ipc support(一般都有的,除非你特意给去掉了),并且glFtpD只能安装在unix类型的文件系统下(ext2/ext3)。Tracy JJ曾介绍过如何在linux下读写windows的分区(fat,ntfs),但是glFtpD不能装在这些分区上,因为这些分区不支持set uid和set gid的操作。
116
1172\. 下载glFtpD的软件包glftpd-LNX_1.26.tgz,执行
118
119tar zxvf glftp-LNX_1.26.tgz
120
121在当前路径下解出glftpd-LNX_1.26的目录。
122
1233\. 在glftpd-LNX_1.26的目录下执行installgl.sh的脚本,脚本执行过程中会询问你把glftpd安装到哪里(不要直接装到根目录/下),以及glftpd占用的端口。系统自带的ftp服务器一般使用21号端口,建议安装时先不要用21,可以选择一个空闲的高端(如4021),这个端口在安装完成之后,可以修改。
124
1254\. 如果一切顺利,安装脚本没有报任何错误信息的话,你就已经安装好了glftpd。可以用glftpd安装后的缺省用户glftpd/glftpd测试是否能登录到服务器上。需要注意的是,此用户只能在本机上通过localhost登录,不能用你机器的IP。
126
127[ashcan@localhost ashcan]$ ftp localhost 4021 Connected to localhost.localdomain. 220 MY SITE NAME (glftpd 1.26_Linux) ready. Name (localhost:ashcan): glftpd 331 Password required for glftpd. Password:****** 230 User glftpd logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp>
128
129
130
131脚本installgl.sh支持linux和bsd平台的安装,在solaris上的安装将会在地五篇里单独介绍。下面我们来具体分析一下glftpd的安装过程。
132
133
134
135glFtpD就象是在操作系统里的一个独立王国一样,相对独立于外围的操作系统。这一切都是通过chroot来实现的。如果你把glftpd安装到/glftpd的目录下,那么在glFtpD启动后,第一件事就是chroot到/glftpd目录下。在这之后的一切操作,都会把/glftpd目录当成是根目录/,这样可以保证ftp的用户不能接触到/glftpd目录之外的文件系统。这一点和通常设置anonymous的FTP服务类似。一些重要的系统目录,如/bin /lib /dev /etc等必须存在与chroot后的根目录下以保证系统的正常运做。看一下glftpd下的目录结构就清楚了。
136
137-$glroot (安装glftpd的目录,chroot后的根目录) |__bin/ (glftpd的可执行文件及重要的系统命令、系统执行文件) |__lib/ (重要的动态连接库文件,许多系统指令执行时,需要用到动态连接库) |__dev/ (系统设备) |__etc/ (用户密码文件passwd及用户组文件group) |__ftp-data/ (用于存放用户配置,glftpd日志,及各种文本信息) |__site/ (这里面是ftp用户能看到的,用于上传下载文件的地方) |__sitebot/ (bot脚本,glftpd可以和IRC联系在一起,自动往IRC里发送该ftp站点的信息,release,dupe,etc.) cooool
138
139
140
141明白这些之后,再看安装脚本就方便了:
142
143
144
145installgl.sh解析
146
147
148
149# 用bash执行此脚本,确认是root来执行 ....略.... # 确认系统平台是linux还是bsd case $(uname -s) in Linux) os=linux ;; *[bB][sS][dD]*) os=bsd ;; *) echo "Sorry, but this installer does not support the $(uname -s) flatform." # 重要的系统命令,将copy到$glroot/bin里去 BINS="sh cat grep unzip wc find ldconfig ls bash mkdir rmdir rm mv cp \ ln basename dirname head tail grep cut tr wc sed date sleep touch gzip zip" # 读入glftpd的安装目录($glroot),确保其不是/ ...略... # 把整个目录glftpd-LNX_1.26拷贝到glftpd安装目录下 cp -Rf * .[^.]* "$glroot" # 把glftpd的配置文件glftpd.conf拷贝到/etc,glftpd.conf将在下一篇中介绍 ...略... # 把上诉重要的系统指令copy到$glroot/bin for bin in $BINS; do echo -n " $bin: " type $bin > /dev/null || { echo "FAILED! You must find & copy $bin manually." continue } cp -f "$(which $bin)" "$glroot/bin" echo "OK" done # 建立重要的系统设备/dev/null /dev/zero echo -ne "\nMaking glftpd's /dev/null & /dev/zero . . . " case $os in linux) mknod -m666 "$glroot/dev/null" c 1 3 mknod -m666 "$glroot/dev/zero" c 1 5 ;; bsd) mknod "$glroot/dev/null" c 2 2 mknod "$glroot/dev/zero" c 2 12 chmod 666 "$glroot/dev/*" ;; esac echo "Done." # 编译glftpd要用到的一些工具程序,如dupeclean, checksfv for cfile in $glroot/bin/sources/*.c; do base="$(basename "${cfile%.c}")" [ -f "$glroot/bin/$base" ] && rm -f "$glroot/bin/$base" echo -n "Compiling $cfile to $glroot/bin/$base . . . " gcc -o "$glroot/bin/$base" "$cfile" > /dev/null 2>&1 && echo 'Success' || echo -e '\033[1;31mFailed!\033[0m' done # copy需要的动态连接库文件到$glroot/lib/ ldd "$glroot"/bin/* | grep "=>" | sed 's:^.* => \\(/[^ ]*\\).*$:\1:' | sort | uniq | while read lib; do echo -n " $(basename $lib): " if [ -f "$lib" ]; then cp -f "$lib" "$glroot/lib" echo "OK" elif [ -f "/usr/compat/linux/$lib" ]; then cp -f "/usr/compat/linux/$lib" "$glroot/lib" echo "OK" else echo -e '\033[1;31mFailed!\033[0m'" You must find & copy $(basename $lib ) to $glroot/lib manually." fi done # 设置glftpd端口,修改/etc/services中对应的入口 # 设置inetd.conf或xinetd(redhat)中glftpd的服务 # 设置cron job清除每日的统计数据 ...略...
150
151在安装之后,先用glftpd的帐号登录,创建站长的帐号及其他用户帐号后,可以将glftpd的帐号删除。要修改glftpd的端口,可以在/etc/services中找到glftpd的记录,修改端口号,用
152
153killall -HUP inetd
154
155或
156
157/etc/rc.d/init.d/xinetd (redhat)
158
159来重起glftpd。
160
161
162
163在第一篇中已经简要介绍了如何使用glFtpD的site指令集实现对用户的远程管理。许多用户配置功能,如登录限制,上传下载限速,以及上传下载的线数都是通过site指令集来做的。在这一篇里,着重介绍如何使用glftpd.conf文件对服务器进行配置。
164
165
166
167glFtpD安装之后,会成为inetd中的一项服务。当用户连接到glftpd所注册的端口后,由inetd来激活glftpd,同时加载配置文件glftpd.conf给glftpd。所以修改glftpd.conf之后,不需要重启inetd,用户再次login服务器之后就会使用新的配置文件了。以下是glftpd.conf中一些常用的配置选项(不完全):
168
169
170
171[一]服务器信息:
172
173
174
175sitename_long <name>[:space:]<name>
176
177# 站点全名(注:glftpd.conf中字符串中的空格一律写成[:space:],#写成[#️⃣]),
178
179# 如 sitename_long aSHCaN:FoRieGN[:space:]MoiVe[:space:]STaTioN@ROR
180
181
182
183sitename_short <abb>
184
185# 站名缩写,如 sitename_short a$fMs@ROR
186
187
188
189login_prompt <string>
190
191# 用户连接服务器时,提示服务器信息。例如,没有设置时,
192
193$ ftp xxx.xx.xx.xxx xxxx Connected to xxx.xx.xx.xxx. 220 aSHCaN:FoReiGN MoiVe STaTioN@ROR (glftpd 1.26_Linux) ready. Name (xxx.xx.xx.xxx:ashcan):
194
195
196
197设置login_prompt ^_^Welcome[:space:]TO[:space:]a$fMs@ROR^_^后
198
199$ ftp xxx.xx.xx.xxx xxxx Connected to xxx.xx.xx.xxx. 220 ^_^Welcome TO a$fMs@ROR^_^ Name (xxx.xx.xx.xxx:ashcan):
200
201
202
203welcome_msg <path filename=""> <flags -users="" =groups="">
204
205# 用户login后,将首先显示此文件内容,如站点规章制度等,或站点介绍。
206
207# 注1:此处的path是对于glftpd安装路径的相对路径,比如glftpd安装在/glftpd下,要显示
208
209# 的文件是/glftpd/ftp-data/misc/welcome.msg,此处填写/ftp-data/misc/welcome.msg,以下
210
211# 所有的路径,除rootpath一项之外,都是相对路径。
212
213# 注2:flags是用户的属性(如1是站管理员2是组管理员8是匿名用户...),=后跟用户组名称,
214
215# -后跟用户名称,可以设置不同的文件显示给不同的用户类别。
216
217
218
219其它goodbye_msg newsfile 等设置与此类似。
220
221
222
223[三]权限设置
224
225
226
227权限设置包括download/upload/delete/deleteown/resume/overwrite/rename/renameown/makedir等,其格式都是:
228
229Function path flags/-user/=group
230
231可以对同一操作设置多个不同的权限给不同的用户类别,以makedir举例说明:
232
233
234
235makedir /site/upload/* =member -admin 1 makedir /site/download/* -admin 1 makedir * 1
236
237
238
239表示在/site/upload路径下,member组的成员,用户admin,和所有的站点管理员可以建目录,在/site/download路径下,只有用户admin和管理员可以建目录,对于其他所有路径,只有管理员可以建目录。需要注意的是,三条限制指令的顺序很重要。比如把makedir * 1放在前面的话,后两条权限设置都会失效,因为/site/download和/site/upload都包含在*下面了。所以越广泛的路径应该放在越后面。
240
241
242
243权限设置deleteown的好处是,可以设置统一上传目录,不同用户只能删除自己上传的文件而不能删除别人上传的文件,这样既方便上传者,又可以有效防止deleter。
244
245
246
247除了上述操作权限外,在glftpd.conf中还可以定义每个site指令的执行权限,格式是
248
249-sitecmd [flags|-user|=group]+,例如
250
251
252
253-adduser 1 2 =SiTEaDMiN -admin
254
255
256
257表示只有站点管理员(1)、组管理员(2)、SiTEaDMiN组的用户和用户admin可以执行site adduser指令。
258
259
260
261[四]扩展功能
262
263在glftpd.conf中还可以自定义site指令,定义格式是
264
265site_cmd <cmd name=""> <exec is="" text=""> <filename> [optional argument]
266
267exec表示执行一个执行文件或脚本,text表示显示一个文本文件,is表示执行一个内部site指令。
268
269在定义完指令后,还必须给指令加执行权限,例如:
270
271
272
273site_cmd RULES TEXT /ftp-date/misc/site.rules site_cmd RELEASE EXEC /bin/release.sh custom-rules * custom-release =SiTEaDMiN -admin 1
274
275
276
277定义了两条site指令,site rules将显示文本文件/ftp-date/misc/site.rules的内容,所有用户都可以执行;site release将执行/bin下的脚本release.sh,只有用户admin,SiTEaDMiN组内的用户和站点管理员可以执行。
278
279
280
281以下几条设置和zipscript与botscript相关
282
283calc_crc [<filemask>|<path>]
284
285pre_check /bin/dupescript [path mask]
286
287pre_dir_check /bin/dirscript [path mask]
288
289post_check /bin/zipscript [path mask]
290
291botscript_path <path>
292
293
294
295calc_crc设置对什么样的上传文件,glftpd会自动计算文件的CRC值,此CRC值将作为参数传给post_check里定义的脚本或程序。下面的calc_crc设置将自动计算所有*.rar,*.000-*.999,*.r00-*.r99及所有/site/Music/目录下上传文件的CRC值。
296
297
298
299calc_crc *.[rR][aA][rR] *.[rR0-9][0-9][0-9] /site/Music/*
300
301
302
303pre_check定义在上传文件前执行的脚本,主要用于dupe check。pre_dir_check定义在创建目录前直行的脚本,post_check定义上传完毕后执行的脚本。[path mask]定义在哪些路径下,这三个设置有效。
304
305botscript_path定义botscript所在的路径,botscript将在所MKDIR/DELDIR/NUKE后执行,可用于自动向IRC发布站点的消息。关于zipscript及botsript将在下一篇中作为glftpd高级应用来介绍。
306
307
308
309[关于cookie]
310
311glftpd中还定义了许多cookie,这些cookie可以在许多文本文件中用于显示一些和服务器有关的动态信息。很多例子可以在glftpd安装路径的ftp-data/misc和ftp-data/text目录下找到。下面简单是一些常用的cookie:
312
313%[%f]F: 当前目录下的空间MB
314
315%[%d]M: 允许的在线用户数
316
317%[%s]S: 站点全名
318
319%[%s]s: 站点缩写
320
321%[%d]B: 当前在线用户数
322
323%[%s]Iu: 用户名
324
325%[%s]Id: 用户是否有msg
326
327%[%d]If: 所有上传文件数
328
329%[%f]IG: 所有上传文件大小MB
330
331%[%d]Ii: 所有下载文件数
332
333%[%f]IJ: 所有下载文件大小MB
334
335%[%f]IU: 平均上传速度K/sec.
336
337%[%f]ID: 平均下载K/sec.
338
339%[%f]Iz: 用户允许的最大下载速度
340
341%[%f]I&: 用户允许的最大上传速度
342
343__________________
344
345There are two distinct opinions:
346
347One would say, "The love of money is the root of all evil."
348
349The other, "The lack of money is the root of all evil."
350
351Which one i should take, that is the question.
352
353
354
355
356* * *
357
358
359_由 quanliking 在 09-15-2002 17:26 发表:_
360
361
362
363****
364
365
366
367
368
369mailserver:就用qmail ,sendmail;
370
371
372
373qmail安装历程 (zt)
374
375
376
377最近公司要开展虚拟主机业务,需要在一台mail服务器上绑定多个域名,于是呢,就想到qmail这位老人家了,照ideal的方法有点问题,就只好去看老外的life with qmail了,hehe
378
379现在大约讲讲我的安装过程:
380
381如果系统运行着sendmail就要把sendmail的守护进程杀掉,然后抓了qmail1.03.tar.gz,ucspi-tcp-0.88.tar.gz,daemontools-0.70.tar.gz这三个包,把他们扔/usr/local/src下面解压开,然后要建一些必要的目录
382
383cd qmail-1.03
384
385mkdir /var/qmail
386
387ln -s /usr/man /var/qmail/man
388
389mkdir /etc/qmail
390
391ln -s /etc/qmail /var/qmail/control
392
393ln -s /usr/sbin /var/qmail/bin
394
395接着建安装qmail需要的组和用户:
396
397groupadd nofiles
398
399useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent
400
401useradd qmaild -g nofiles -d /var/qmail -s /nonexistent
402
403useradd qmaill -g nofiles -d /var/qmail -s /nonexistent
404
405useradd qmailp -g nofiles -d /var/qmail -s /nonexistent
406
407groupadd qmail
408
409useradd qmailq -g qmail -d /var/qmail -s /nonexistent
410
411useradd qmailr -g qmail -d /var/qmail -s /nonexistent
412
413useradd qmails -g qmail -d /var/qmail -s /nonexistent
414
415然后开始编译qmail:
416
417make setup check
418
419接着就配置域名了(这个需要你的机器域名能在dns上找到):
420
421./config(如果确定域名没错,也可以用./config-fast hostname.domainname)
422
423然后要编译ucspi-tcp:
424
425进入刚才ucspi-tcp解开的目录,执行:
426
427make
428
429make setup check
430
431接着编译daemontools,也是进入解压的目录,执行
432
433make
434
435make setup check
436
437下来就开始写一些qmail执行必须的脚本了,先是
438
439vi /var/qmail/rc
440
441脚本内容是:
442
443#!/bin/sh
444
445
446
447# Using stdout for logging
448
449# Using control/defaultdelivery from qmail-local to deliver messages by default
450
451
452
453exec env - PATH="/var/qmail/bin:$PATH"
454
455qmail-start "`cat /var/qmail/control/defaultdelivery`"
456
457最后
458
459chmod 755 /var/qmail/rc
460
461echo ./Maildir/ >/var/qmail/control/defaultdelivery(我用的是Maildir)
462
463然后就是log文件了:
464
465mkdir /var/log/qmail
466
467mkdir -p /var/qmail/supervise/qmail-send/log
468
469mkdir -p /var/qmail/supervise/qmail-smtpd/log
470
471chmod +t /var/qmail/supervise/qmail-send
472
473chmod +t /var/qmail/supervise/qmail-smtpd
474
475建立/var/qmail/supervise/qmail-send/run文件,内容为:
476
477#!/bin/sh
478
479exec /var/qmail/rc
480
481建立/var/qmail/supervise/qmail-send/log/run文件,内容为:
482
483#!/bin/sh
484
485exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
486
487建立/var/qmail/supervise/qmail-smtpd/run文件,内容:
488
489#!/bin/sh
490
491QMAILDUID=`id -u qmaild`
492
493NOFILESGID=`id -g qmaild`
494
495MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
496
497exec /usr/local/bin/softlimit -m 2000000
498
499/usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb
500
501-c "$MAXSMTPD" -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
502
503建立/var/qmail/supervise/qmail-smtpd/log/run文件,内容:
504
505#!/bin/sh
506
507exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd
508
509把以上四个run文件chmod 755
510
511然后执行:
512
513echo 20 > /var/qmail/control/concurrencyincoming
514
515chmod 644 /var/qmail/control/concurrencyincoming
516
517来建立qmail必须的concurrencyincoming文件
518
519同时建立标准的log目录:
520
521mkdir -p /var/log/qmail/smtpd
522
523chown qmaill /var/log/qmail /var/log/qmail/smtpd
524
525最关键的一步是建立qmail控制脚本,建立/etc/rc.d/init.d/qmail这个文件,内容:
526
527脚本的HELP那块有些折行,尽量把他们弄一行.
528
529#!/bin/sh
530
531
532
533PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
534
535export PATH
536
537
538
539case "$1" in
540
541start)
542
543echo -n "Starting qmail: svscan"
544
545cd /var/qmail/supervise
546
547env - PATH="$PATH" svscan &
548
549echo $! > /var/run/svscan.pid
550
551echo "."
552
553;;
554
555stop)
556
557echo -n "Stopping qmail: svscan"
558
559kill `cat /var/run/svscan.pid`
560
561echo -n " qmail"
562
563svc -dx /var/qmail/supervise/*
564
565echo -n " logging"
566
567svc -dx /var/qmail/supervise/*/log
568
569echo "."
570
571;;
572
573stat)
574
575cd /var/qmail/supervise
576
577svstat * */log
578
579;;
580
581doqueue|alrm)
582
583echo "Sending ALRM signal to qmail-send."
584
585svc -a /var/qmail/supervise/qmail-send
586
587;;
588
589queue)
590
591qmail-qstat
592
593qmail-qread
594
595;;
596
597reload|hup)
598
599echo "Sending HUP signal to qmail-send."
600
601svc -h /var/qmail/supervise/qmail-send
602
603;;
604
605pause)
606
607echo "Pausing qmail-send"
608
609svc -p /var/qmail/supervise/qmail-send
610
611echo "Pausing qmail-smtpd"
612
613svc -p /var/qmail/supervise/qmail-smtpd
614
615;;
616
617cont)
618
619echo "Continuing qmail-send"
620
621svc -c /var/qmail/supervise/qmail-send
622
623echo "Continuing qmail-smtpd"
624
625svc -c /var/qmail/supervise/qmail-smtpd
626
627;;</path></path></filemask></filename></exec></cmd></flags></path></string></abb></name></name></sp></sp></sp></sp></sp></sp></sp></sp></num></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></user2></sp></user1></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp></sp>