2009-10-21 251 views
15

我第一次嘗試CGI腳本但沒有成功。我已閱讀了許多教程,並在不同的論壇中遵循了可能的線程,但我無法使其工作。 我在Fedora 10機器上使用appache web服務器。 我總是有問題(13)權限被拒絕:訪問/cgi-bin/test.cgi被拒絕

[Wed Oct 21 20:47:36 2009] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0 
[Wed Oct 21 20:47:36 2009] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 
[Wed Oct 21 20:47:36 2009] [notice] Digest: generating secret for digest authentication ... 
[Wed Oct 21 20:47:36 2009] [notice] Digest: done 
[Wed Oct 21 20:47:36 2009] [notice] Apache/2.2.11 (Unix) DAV/2 PHP/5.2.9 mod_ssl/2.2.11 OpenSSL/0.9.8g configured -- resuming normal operations 

我需要幫助。 這就是我的環境。

uname -a 
Linux localhost.localdomain 2.6.27.5-117.fc10.i686 #1 SMP Tue Nov 18 12:19:59 EST 2008 i686 i686 i386 GNU/Linux 

ls -l /var/www/cgi-bin/ 
total 36 
-rwxrwxrwx 1 root root 106 2009-10-21 18:29 index.html 
-rwxr-xr-x 1 root root 11089 2009-02-24 20:11 squidGuard.cgi 
-rwxr-xr-x 1 root root 5720 2009-02-24 20:11 squidGuard-simple.cgi 
-rwxr-xr-x 1 root root 5945 2009-02-24 20:11 squidGuard-simple-de.cgi 
-rwxrwxrwx 1 root root 110 2009-10-21 17:38 test.cgi 

apachectl -v 
Server version: Apache/2.2.11 (Unix) 
Server built: Mar 6 2009 09:12:25 

perl -version 
This is perl, v5.10.0 built for i386-linux-thread-multi 
Copyright 1987-2007, Larry Wall 

我的腳本

cat test.cgi 
#!/usr/bin/perl 
print "Content-Type: text/html\n\n"; 
print "Hello, world!\n"; 

該錯誤消息我創,當我嘗試訪問該網頁服務器「http://192.168.50.29/cgi-bin/test.cgi」看起來是這樣的:

[Wed Oct 21 21:00:27 2009] [error] [client 192.168.50.69] (13)Permission denied: access to /cgi-bin/test.cgi denied 

我已經添加了一行:

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" 

到/etc/httpd/conf/httpd.conf

我只是不能讓它工作。 任何人都可以幫助我嗎?

+0

該錯誤消息我創,當我嘗試訪問該網頁服務器「http://192.168.50.29/test。cgi「看起來像這樣: [Wed Oct 21 22:31:32 2009] [error] [client 192.168.50.69](13)Permission denied:exec of'/var/www/html/test.cgi'failed [Wed Oct 21 22:31:32 2009] [error] [client 192.168.50.69]腳本標題提前結束:test.cgi – 2009-10-21 11:19:44

+1

爲什麼哦,爲什麼root擁有這些文件? – 2009-10-31 13:18:19

+0

找出哪個用戶/組擁有apache服務器進程並確保它擁有你的CGI腳本並擁有exec權限 – heferav 2009-10-31 14:20:58

回答

11

檢查你的os權限test.cgi,並確保你正在使用的用戶或組來運行你的apache它有讀權限。

編輯 - 問題與權限有關,但與讀取權限無關,因爲您使用的是SELinux,所以您需要擔心文件上下文。在fedora論壇上檢查這個thread,它解釋了很多選項來解決你的問題。

+0

根據問題test.cgi擁有777個權限 - 即讀,寫,執行用戶,組和其他 - 所有用戶都可以做任何事情 – 2009-10-21 09:54:22

+0

真的,我在第一次閱讀時忽略了這一點,使用未格式化的代碼。 – pedromarce 2009-10-21 10:15:28

5

首先檢查HTTPD.CONF文件。在httpd.conf中按如下所示設置腳本目錄。
在這裏,您需要確保找到正確的httpd.conf文件。例如,在我的Debian中,默認的httpd.conf是/ etc/apache2/sites-avaialbe/default。

 
<Directory "dir_name"> 
    Options All 
    AllowOverride All 
    Order allow,deny 
    Allow from all 
<Directory> 

OR你可以只使用默認的/ cgi-bin文件夾。

。爲測試腳本設置執行權限

 
chmod +x script_name 
+1

facepalm,在我的情況下忘記了執行權限 – elhombre 2015-12-08 15:15:16

4

檢查你的fstab如果掛載文件系統有權執行

UUID=xxx-xxx-xxx-xx-xx  /mnt/mountpoint  ext4  rw,user,exec  0  0 

EXEC部分是很重要的

4

的SELinux防止阿帕奇從我的情況下訪問CGI腳本。 快速正骯髒的修復,對我的工作是關閉SELinux的:

vim /etc/sysconfig/selinux 
set "SELINUX=disabled" 
reboot 
+1

好吧,現在你的問題是你沒有運行wi thin SELinux;)我相信你的情況下,你已經在另一個位置創建了一個cgi-bin目錄,這意味着你必須使用命令'semange fcontext -a -t httpd_sys_script_exec_t「/添加一個新的文件上下文到策略列表中path/to/directory(/.*)?'',然後'restorecon -Rv/path/to/directory'將新的文件上下文應用於文件。查看man semanage-fcontext並進入示例部分,這裏有一個很好的例子。 – elhombre 2015-12-08 15:25:45