📄 00000011.htm
字号:
在通常的情况下,我们可以像处理其他功能那样处理CGI。但是,当你的CGI程序试图 <BR>去写一个服务器上的文件时(比如说,留言板),你会发现浏览器将返回一个“服务器 <BR>内部错误”的信息。这是因为apache的服务程序缺省是使用nobody权限启动的,所以cg <BR>i程序的权限也是nobody。这样,它不能写任何服务器文件(因为没有哪个文件的属主是 <BR>nobody)。 <BR> <BR> 解决的方法有许多种,最简单的方法是更改httpd.conf中服务器的运行权限,例如, <BR>将User和Group都改成someone,然后就可以写someone的文件了。问题在于,对于一个为 <BR>许多用户提供主页空间的服务器来说,这样的方法是行不通的,除非设置为root,但这 <BR>又很容易导致安全性问题。 <BR> <BR> 常用的办法之一是使用setuid。按照我们前面讲的,setuid程序执行时按照自己的拥 <BR>有者权限执行。这个办法比较简单,但是许多时候,为了安全性和管理上的方便,系统 <BR>是不允许用户远程登陆的,因此也就无法使用chmod等等命令。 <BR> <BR> suEXEC是解决这个问题的比较好的方法,它允许下面两个功能:(1)对于虚拟主机, <BR>允许每个VirtualHost段落使用自己的User和Group子句;(2)对于<A HREF="http://www.yourdoma">http://www.yourdoma</A> <BR>in.com/~someone这样的主页服务,允许每个用户在自己的目录下设置一个cgi目录,处 <BR>于这个目录中的cgi程序自动获得对应用户的权限。 <BR> <BR> 要使用suEXEC功能,通常必须重新编译apache。可以看看我前面提到的那个编译例子 <BR>,与suEXEC相关的命令是: <BR> <BR> --enable-suexec <BR> <BR> 这个选项设置允许suEXEC功能 <BR> <BR> --suexec-caller=nobody <BR> <BR> suexec-caller是调用者的名字,通常就是httpd程序运行时缺省的权限,一般是nobo <BR>dy。 <BR> <BR> --suexec-logfile=/var/log/httpd/suexec.log <BR> <BR> suexec的记录文件的名字,以后每个调用都会被记录到/var/log/httpd/suexec.log中 <BR>。 <BR> <BR> --suexec-userdir=public_html <BR> <BR> 对于www.yourdomain.com/~someone这样的调用,缺省的suEXEC目录,例如这样设定之 <BR>后,/home/someone/public_html中的文件在调用的时候将自动赋予someone权限。注意 <BR>由于我们通常把文档和cgi脚本放在同一目录下,不要忘记设置脚本的执行权限。 <BR> <BR> --suexec-uidmin=100 <BR> <BR> --suexec-gidmin=100 <BR> <BR> 最小的suEXEC使用的uid和gid。通常你可以把它们设置成一个合适的值,使得不会有 <BR>哪个程序以root,daemon,adm之类的危险身份执行。 <BR> <BR> --suexec-safepath=/usr/bin:/bin:/usr/local/bin <BR> <BR> suEXEC程序可以安全调用的程序的目录,通常设定这个目录是为了调用/usr/bin/per <BR>l之类的cgi解释器。 <BR> <BR> --suexec-docroot=/home/ <BR> <BR> suEXEC功能的底层目录,意味着用户不能用suEXEC功能直接执行/home之外的用户cgi <BR>程序。 <BR> <BR> 重新编译apache,启动后,就可以使用suEXEC了。 <BR> <BR> 要启用suEXEC功能,如同我们说的,可以直接把cgi放到自己的suexec-userdir下面, <BR>但是对于虚拟主机用户,一般由管理员直接在httpd.conf中加入对应虚拟主机段落的权 <BR>限: <BR> <BR> <VirtualHost mail.asnc.edu.cn> <BR> <BR> User wanghy <BR> <BR> Group wanghy <BR> <BR> DocumentRoot /home/wanghy/public_html <BR> <BR> ServerName mail.asnc.edu.cn <BR> <BR> ScriptAlias /cgi-bin/ "/home/wanghy/cgi-bin/" <BR> <BR> </VirtualHost> <BR> <BR> 注意User和Group都要填写才行。 <BR> <BR> suEXEC有一个很重要的限制,就是cgi程序的拥有者、cgi程序所在的目录,VirtualH <BR>ost的设定三者必须保证user/group的完全一致,否则suEXEC将拒绝执行。这个功能主要 <BR>是为了安全。 <BR> <BR> 事实上,尽管cgi程序几乎是不可缺少的,但是它的运行必须执行大量的装入操作,特 <BR>别是装入perl解释器的过程更加耗费资源,因此通常cgi程序会成为服务器的瓶颈所在。 <BR>有一些特殊的方法用来处理这个问题,例如fast_cgi,mod_perl等等,详细的知识请参 <BR>考apache的手册。 <BR> <BR> 6.3.7 高级课题 <BR> <BR> 除了我们前面讲到的apache设置之外,还有一些Apache参数可以使用,它们对调整Ap <BR>ache的性能很重要,这里只给出比较有意义的一些: <BR> <BR> PidFile <BR> <BR> PidFile指定的文件将记录httpd主守护进程的进程号,我们以前曾经描述过守护进程 <BR>的工作方式,显然,主守护进程将控制其他进程的运行,它为其他进程的父进程,对这 <BR>个进程发送信号将影响所有的httpd进程。范例: <BR> <BR> pitfile /var/run/httpd.pid <BR> <BR> <BR> ResourceConfig <BR> <BR> AccessConfig <BR> <BR> <BR> 这两个参数用于和旧版本Apache兼容。如果定义了这两项,系统还要察看这里设定的 <BR>两个文件。通常不需要设置它们。 <BR> <BR> Timeout <BR> <BR> Timeout定义客户程序和服务器连接的超时间隔,超过相应秒数后服务器将断开与客户 <BR>机的连接。例如 <BR> <BR> Timeout 300 <BR> <BR> KeepAlive <BR> <BR> KeepAlive参数用于支持HTTP 1.1版本的一次连接、多次传输功能,这样就可以在一次 <BR>连接中传递多个HTTP请求。范例: <BR> <BR> KeepAlive ON <BR> <BR> <BR> MaxKeepAliveRequests <BR> <BR> MaxKeepAliveRequests为一次连接可以进行的HTTP请求的最大请求次数。0代表无限制 <BR>。例如: <BR> <BR> MaxKeepAlive 100 <BR> <BR> <BR> KeepAliveTimeout <BR> <BR> 同一个连接之间的两次请求之间的最大时间间隔,例如: <BR> <BR> KeepAliveTimeout 15 <BR> <BR> MinSpareServers <BR> <BR> MaxSpareServers <BR> <BR> Apache服务器使用了一个特殊技术,就是预先生成多个空余的子进程驻留在系统中, <BR>一旦有请求出现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造 <BR>成的延迟了。在运行中随着客户请求的增多,启动的子进程会随之增多,但这些子进程 <BR>在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。如果子 <BR>进程数不够,就forks出一些;如果forks出了太多的子进程,就杀死一些。这两个参数 <BR>用来设置空闲子进程数的上下限。例如 <BR> <BR> MinSpareServers 5 <BR> <BR> MaxSpareServers 10 <BR> <BR> StartServers <BR> <BR> httpd启动时启动的子进程个数,这个参数应该设置为前两个值之间的一个数值,小于 <BR>MinSpareServers和大于MaxS pareServers都没有意义。例如 <BR> <BR> StartServers 8 <BR> <BR> MaxClients <BR> <BR> 最多启动多少个子进程处理服务。例如 <BR> <BR> MaxClients 200 <BR> <BR> MaxRequestsPerChild <BR> <BR> 每个子进程最多处理多少个请求然后退出。由于许多系统会有内存泄漏或者其他的问 <BR>题,这个数值太大可能导致系统不稳定,太小又会造成不必要的forks和kill。通常的缺 <BR>省值是30,不过我们建议把它调整的稍大一些,特别由于2.2.14以后的内核已经修复了 <BR>内存泄漏的错误。例如 <BR> <BR> MaxRequestPerChild 300 <BR> <BR> 当然如果你对自己的系统有绝对的信心也可以设置成0,代表无限次请求。 <BR> <BR> <BR> 6.3.8 联机手册 <BR> <BR> 从我们对Apache的描述中就可以看出Apache是一个极端复杂的产品。要知道,世界上 <BR>有将近一半的Web服务器系统在运行Apache,而且有大量的开发者在为Apache做模块开发 <BR>。因此,Apache的联机手册采用单独的HTML文件来提供,通常,在安装Apache的时候, <BR>这些文件被安装到了/home/httpd/html/manual目录下,直接在浏览器中打开/home/htt <BR>pd/html/manual/index.html就可以看到这些使用信息了。 <BR> <BR> 6.4 BBS和MUD <BR> <BR> 6.4.1 BBS <BR> <BR> 如果你在教育网内,也许你会对BBS比其他任何Internet服务都要熟悉的多。理论上讲 <BR>,讨论组和基于页面的讨论区也不错,但是实际上学生通常更喜欢BBS。 <BR> <BR> 我们讨论的BBS一般都是基于internet和telnet协议的终端BBS,尽管也有用页面或者 <BR>拨号构成的BBS,但是通常它们总是不太受人欢迎。 <BR> <BR> 目前最常用的BBS服务工具是FireBird BBS,现在用的一般都是汉化版本。通常FireB <BR>ird的安装文档写的十分详细,很容易按照说明安装,所以我们也不想再详细地叙述这个 <BR>东西了,通常FireBird系列的BBS服务程序的安装过程都是类似的,你可以看随FireBir <BR>d的文档,主要包括下面的几步: <BR> <BR> 建立BBS相关账号,包括bbs,bbsadm,bbsuser。由于bbs账号是不需要口令的,所以 <BR>通常你可以用手工编辑/etc/passwd文件再pwconv的办法建立这么几个账号。 <BR> <BR> 展开FireBird BBS的安装包 <BR> <BR> 编译源代码,基本过程就是我们通常的办法:./configure;make;make install。然 <BR>后建立SYSOP账号和guest账号,就可以实验BBS了。如果你需要增加功能或者修改信息, <BR>可以看随安装包来的文档。 <BR> <BR> 目前的另外一个时髦的倾向是给基于终端的BBS加上从Web访问的功能。比如bbs2www等 <BR>。它们可以直接安装在已有的FireBird BBS上。 <BR> <BR> 如果你要架设一个有许多人上站的BBS,通常可以考虑把bbsd服务进程改成直接由tel <BR>net来执行,或者说用bbsd作为telnet守护进程。做法很简单,直接把inetd.conf里面的 <BR>相应部分改掉就可以了。 <BR> <BR> 6.4.2 文本MUD <BR> <BR> 文本的MUD是telnet服务中仅次于BBS的,通常我们最常用的MUD系列是ES2系列,例如 <BR>ES II,XKX等等。这个系列的Mud基本的结构是"MUDOS+MUDLIB",就是一个telnet服务程 <BR>序加上相应的资源文件。一般这种Mud,架站的基本方法就是找到一个MudOS(用来支持M <BR>ud服务的服务器程序),再下载一个已有的MUDLIB(包括故事,NPC,战斗规则等等,然后 <BR>慢慢修改)。 <BR> <BR> 如果要了解更多的信息,最好是找到一个完整的MUDOS+MUDLIB,然后自己研究,实际 <BR>上,对于架设过BBS的用户,架设文本MUD是很简单的事情。真正的问题,在于架站之后 <BR>还要经常修正MUDLIB里面的BUG,增加MUDLIB的新代码等等。 <BR> <BR> <BR> <BR>-- <BR>当我越过无尽虚空的时候,我看见星辰的欲望,光荣和毁灭,这是光辉世界的宿命, <BR>一切的一切,最终必将落入黑暗和虚无。 <BR>所以,我随着星光飞翔,去逃脱必然的终结,也许有一天,我将回到世界的原初, <BR>等待新的星辰的诞生。 <BR>尘埃是星的起源,星的终结。 <BR> <BR> <BR>※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.112.90.20] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -