【转贴】RED HAT 下面的FTP和MAIL软件

由 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&gt;   
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 &gt; /dev/null || { echo "FAILED! You must find &amp; copy $bin manually." continue } cp -f "$(which $bin)" "$glroot/bin" echo "OK" done # 建立重要的系统设备/dev/null /dev/zero echo -ne "\nMaking glftpd's /dev/null &amp; /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" ] &amp;&amp; rm -f "$glroot/bin/$base" echo -n "Compiling $cfile to $glroot/bin/$base . . . " gcc -o "$glroot/bin/$base" "$cfile" &gt; /dev/null 2&gt;&amp;1 &amp;&amp; echo 'Success' || echo -e '\033[1;31mFailed!\033[0m' done # copy需要的动态连接库文件到$glroot/lib/ ldd "$glroot"/bin/* | grep "=&gt;" | sed 's:^.* =&gt; \\(/[^ ]*\\).*$:\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 &amp; 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  
155156  
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&amp;: 用户允许的最大上传速度 
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/ &gt;/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&gt;&amp;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 &gt; /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 &amp;   
548  
549echo $! &gt; /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>
Published At
Categories with 服务器类
Tagged with
comments powered by Disqus