computer 版 (精华区)
发信人: Aug (如风), 信区: network
标 题: CGI的安全<转载> (6)
发信站: 听涛站 (Tue Mar 14 16:00:55 2000), 转信
1-2-4.例子:安全的配置NCSA服务器
我将通过讨论NCSA服务器(v1.4.2)来论证怎样着手正确地配置Unix环境下的
通用的Web服务器。有很多Web服务器可以运行在Unix系统下,NCSA是最早的服
务器之一,被广泛使用并且属于自由软件,而且相当容易配置。我仅说明我认
为对Web服务器安全方面有关的配置;想获得有关配置NCSA httpd更多详细的说
明,请参照它的站点:
http://hoohoo.ncsa.uiuc.edu/
你可以将这里说明的原则应用到几乎所有的Unix Web服务器中。
首先,我需要表明我的目标。在这个方案中,我想将NCSA服务器架设在一个很
小的名为MyCompany的ISP的安全的Unix机器上。这台机器的域名为
www.mycompany.net。我需要我的机器中的每一个拥有帐号的人能够将他或她的
Web文件用于服务并可以使用CGI或其他的特性。
我绝对应该需要什么特性呢?这里,因为我是一个很小的ISP,我不能让用户自
行将其CGI用于服务。如果他们想写出并使用他们自己的CGI程序,他们必须将其
提交给我来检查;如果CGI程序没问题,我就安装它。另外,我要提供一些通常
需要的一般的程序,比如留言本和各类表单处理的应用程序。现在,这个方案里
我不需要其他任何的特性了,包括服务器嵌入指令。
我们来看一下我将如何配置我的Web服务器。我将建立用户和www组;这些将拥
有所有恰当的目录。我将建立一个目录来存放我的服务器文件
(/usr/local/etc/httpd/)和存放Web文件的目录
(/usr/local/etc/httpd/htdocs/)。
所有这些目录对全球是可读的对所建立的用户和组是可写的。
现在,我将要配置服务器。NCSA HTTPD有三个配置文件:access.conf,httpd.
conf
和srm.conf。首先,你需要告诉httpd你的Server和HTML的目录所在。在httpd.
conf
中,以如下一行来指定Server的目录:
ServerRoot /usr/local/etc/httpd
在srm.conf中,这样指定文件目录:
DocumentRoot /usr/local/etc/httpd/htdocs
因为我想指定在/usr/local/etc/httpd/cgi-bin目录中的所有文件为CGI程序,
在srm.conf中包含如下一行:
ScriptAlias /cgi-bin/ /usr/local/etc/httpd/cgi-bin
注意我的cgi-bin目录的实际位置在我的服务器目录而不是文件目录。因为我想
要使我的服务器目录(包括包含CGI的目录)尽量为私有,我将它放到文件目录以外。
如果你在该目录中有一个名为mail.cgi的CGI,我可以通过如下的URL访问它:
http://www.mycompany.net/cgi-bin/mail.cgi
在srm.conf中需要编辑另一行;它对我们追求特定的服务器安全不是特别有关系
,
但是为了彻底的安全,我还是要提到它:
Alias /icons/ /usr/local/etc/httpd/icons
这个Alias指令允许我们为你的文件目录树内部或以外的目录指定一个别名。与
ScriptAlias指令不同,Alias并不改变目录的含义。
因为我需要禁止服务器嵌入指令,并不允许CGI在cgi-bin以为的目录运行,在
srm.conf中我通过在行首插入一个英镑符号(#)注释掉几行:
#AddType text/x-server-parsed-html.shtml
#AddType application/x-httpd-cgi.cgi
AddType可以帮助你在MIME类型和文件扩展名间建立关联。
text/x-server-parsed-html
对parsed HTML来说是MIME类型,而application/x-httpd-cgi则是CGI应用程序
类型。这里,我不需要为这种MIME类型指定扩展名,因为在配置服务器的时候,
我们忽略cgi-bin中的所有文件扩展名,一律被视为CGI。
最后,我需要通过编辑全局的access.conf文件来设置某些目录的属性和访问
权限。为了为所有的目录定义全局的参数,仅仅将没有任何环境标记的指令放到
文件中。为了为特定的目录指定参数,在directoryname是目录的全路径时,通过
来包含指令。
缺省情况下,下面的全局选项这样设置:
Options Indexes FollowSymLinks
当URL指定的目录里没有要查找的文件时,Indexes允许你指定一个文件。缺
省情况下,这个变量为index.html,通过srm.conf中的DirectoryIndex来指定,
很符合我们的意图。FollowSymLinks意指服务器会返回符号连接指向的数据。
我没看到这个特性的必要性,所以我禁止了它。现在,这一行看起来象这样:
Options Indexes
如果我想在任何目录中使CGI程序有效,我可以通过包含ExecCGI选项来设置:
Options Indexes ExecCGI
这一行,结合在srm.conf中的AddType指令,可以允许我通过在任何目录中给所
有的CGI程序添加.cgi的扩展名来执行一个CGI。
缺省情况下NCSA httpd的配置,通过在一个具有适当的属性和访问限制的特
定目录中创建.htaccess文件使access.conf中的所有设置都可以被超越。在这
种情况下,我不介意用户改变它们的访问限制。然而,我不想赋予用户在他们
自己的目录里执行CGI和.htaccess文件的能力。
AddType application/x-httpd-cgi .cgi
Options Indexes ExecCGI
因此,我编辑access.conf来允许用户超越除了选项外所有的设置:
AllowOverride FileInfo AuthConfig Limit
现在,我的服务器安全的配置了。我只允许在cgi-bin目录中运行CGI,并且
使服务器嵌入指令完全无效。服务器以nobody用户运行,一个我的系统中不存
在的用户。我禁止了所有我不需要的特性,并且用户不能超越这些年特殊的限
制。想了解很多的其他的配置信息,包括详尽的访问限制,请参照NCSA服务器
说明文件。
--
※ 来源:.听涛站 cces.net.[FROM: 匿名天使的家]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:0.956毫秒