QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1162|回复: 5

apache对CGI的设置都有哪些?

[复制链接]
发表于 2005-7-15 16:39:33 | 显示全部楼层 |阅读模式
下面是我的一个test.cgi 权限是777, 放在/var/www/cgi-bin/下

#!/usr/bin/perl
print "Content-type: text/plain\n\n";
$ss="/home";
if (opendir(DIR, $ss))
{
print "open $ss ok\n";
}
else
{
print "fail open $ss !\n";
}


执行的结果是:
fail open /home !

如果把/home换成 /tmp,就可以正常打开

为什么啊?怎么样才可以打开/home目录啊? 我用的是Centos 2.6.9-5.0.5.EL 。我猜测是apache设置的问题,但具体就不知道是什么原因了!

另外如果我在命令行下 #perl test.cgi   就可以正常打开/home目录

请帮忙解决下吧! 非常感谢!
 楼主| 发表于 2005-7-18 17:26:16 | 显示全部楼层
经过漫长的探索,最后还是在朋友Gary的提示下,禁用了SELINUX,问题就解决了,希望对大家有帮助!
在此,对Gary表示由衷的感谢啊!
回复

使用道具 举报

发表于 2005-7-18 21:24:10 | 显示全部楼层
CGI 之執行:
首先要來提到的是 CGI 的執行問題,這也是很多朋友想要提出的問題啦!到底要怎麼設定才可以在某些路徑裡面執行 CGI 的程式呢?而不是使用純文字將他 show 出來?!難道要執行 CGI 就非得在 /usr/local/apache2/cgi-bin 這個目錄下不可嗎?當然不是!有很多的方法可以來設定的!舉個例子來說,假設今天有個一般身份的使用者 test ,他想要可以執行 CGI ,那麼他的家目錄在 /home/test/public_html 底下,而他的程式是放在 /home/test/public_html/cgi 這個目錄中,那我可以怎麼作呢?同樣有兩種作法:
 

    * 使用 Options 及 ExecCGI

      你可以在 httpd.conf 這個檔案中,找個地方加入底下的文字:
[root@test root]# vi /usr/local/apache2/conf/httpd.conf

方法一:
# 先確認在 httpd.conf 當中,底下這一行已經將註解拿掉了!
AddHandler cgi-script .cgi
# 請注意,如果是想要讓 .pl 的檔案可以執行 ( Perl ),那麼上面那行要改寫成:
AddHandler cgi-script .cgi .pl

# 再加入底下幾行:
<Directory "/home/test/public_html/cgi">
    Options ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

方法二:
# 直接加入底下這幾行即可!
<Directory "/home/*/public_html/cgi">
    Options ExecCGI
    SetHandler cgi-script
</Directory>

[root@test root]# /usr/local/apache2/bin/apachectl stop
[root@test root]# /usr/local/apache2/bin/apachectl start

呵呵!這樣該目錄立刻就可以執行 CGI 的程式啦!當然啦,那個 cgi 的檔案,權限當中也必須要有『可執行, x 』的權限喔!而,如果你要執行某個 cgi 程式,例如 index.cgi 好了,那麼就需要填入:http://your.server.name/~test/cgi/index.cgi 囉!

# 使用 ScriptAlias 功能:

還有另外一個功能也可以達到同樣的效果,那就是使用 ScriptAlias 喔!你可以

[root@test root]# vi /usr/local/apache2/conf/httpd.conf

# 先確認在 httpd.conf 當中,底下這一行已經將註解拿掉了!
AddHandler cgi-script .cgi

# 再加入底下這一行:
ScriptAlias /testcgi/ "/home/test/public_html/cgi/"

[root@test root]# /usr/local/apache2/bin/apachectl stop
[root@test root]# /usr/local/apache2/bin/apachectl start

呵呵!這樣也是可以啦!假設你要執行的檔案仍然是 index.cgi ,那麼,你的執行網址會變成: http://your.server.name/testcgi/index.cgi !就是這點不同囉!其他的都一樣啦!
 
http://linux.vbird.org/linux_server/0360apache.php#server_personal
鳥哥的 Linux 與 ADSL 私房菜
回复

使用道具 举报

 楼主| 发表于 2005-7-18 22:09:32 | 显示全部楼层
luckisme兄答的极是,我也这样设置过了,可是我的系统(RHEL)上,如果不关了SELINUX,就是不能打开全部目录,只能打开一部分目录!更夸张的是,默认情况下SELINUX对CGI是允许的,但我关了SELINUX,就一切都正常了!

所以说,我的问题好象和CGI的运行目录没有关系!

请指教!
回复

使用道具 举报

发表于 2005-7-19 13:32:22 | 显示全部楼层
楼主的问题在于 apache 用户对 /home 目录的访问权限。

在 RH 的 SELinux 的默认规则里, apache 用户仅对 /var/www/ 目录具有足够的访问权限(r-x)。
回复

使用道具 举报

 楼主| 发表于 2005-7-19 14:33:15 | 显示全部楼层
照dannycat所说,我不曾改动 RH 的 SELinux 的默认规则,为什么我的test.cgi 还能打开/usr下的某些目录,能打开/var/www/html 但不能打开/var/www/cgi-bin目录!

另外,CGI被apache执行后,它在系统里的运行身份是nobody用户?还是www用户?还是apache用户?

但不管是什么用户,当我把/home目录的权限设为777了,也总该能打开/home吧,但事实上没有关闭selinux前,却怎么也打开不了/home.

这个内核级的防火墙,可害苦我了,为什么会这样??
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 15:52 , Processed in 0.050533 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表