26886


Perl の CGI です。

[code]

    cgi-bin/hello.cgi
    
[/code]

だと動作するのですが、サブディレクトリを置いて

[code]

    cgi-bin/folder/hello.cgi
    
[/code]

という感じにすると

[code]

    Forbidden
    
    You don't have permission to access /cgi-bin/0_search/hello.cgi on this server.
    
[/code]

と表示されて動作がしません。  
folder と cgi のパーミッションは 755 です。

hello.cgi の中身

[code]

    #!/usr/bin/perl
    
    print "Content-type: text/html \n\n";
    print "Hello";
    
[/code]

Apache のバージョン確認

[code]

    [vagrant@localhost 0_search]$ httpd -v
    Server version: Apache/2.4.6 (CentOS)
    Server built:   May 12 2016 10:27:23
    [vagrant@localhost 0_search]$
    
[/code]

CentOS7 です。


CC BY-SA 3.0
2016-06-20T08:06:39.070
26885
2016-06-20T15:46:56.770
2016-06-20T10:22:03.487
15420
question
apache perl
cgi-binのサブディレクトリのcgiが動作しない


SELinuxが有効になっていたら無効にしてみてください。

production環境で運用するときにSELinuxを有効にしたい場合はその時点で判らないところを別途質問たててください。

追記：  
cgi-binが/var/www/cgi-bin だとして

[code]

    # ls -Z /var/www/cgi-bin/folder/
    
[/code]

の結果、該当ファイルが「httpd_sys_script_exec_t」になっていないからでしょう。

[code]

    # chcon system_u:object_r:httpd_sys_script_exec_t /var/www/cgi-bin -R
    または
    # semanage fcontext -a -t httpd_sys_script_exec_t "/var/www/cgi-bin(/.*)?"
    
[/code]

を行い、cgi-bin ディレクトリ配下に対して httpd_sys_script_exec_t
を設定してやれば質問に記載のスクリプトであればSELinuxが有効でも動くと思います。

SELinux有効にしてcgiなどで色々やろうとするとファイル(ディレクトリ)へのラベル(タイプ？)の設定がかなり邪魔臭いです。ちょっと複雑な構成のものになると何がどうなってるのか解らなくなって苦労します。

こんなの↓があるくらいなので

<https://access.redhat.com/documentation/ja-
JP/Red_Hat_Enterprise_Linux/6/html/Managing_Confined_Services/sect-
Managing_Confined_Services-The_Apache_HTTP_Server-Types.html>

> httpd_unconfined_script_exec_t  
>  このタイプのラベルを付けたスクリプトは SELinux の保護なしで実行されます。 このタイプの使用は、
> これ以外の手段を試したがいずれもうまくいかない複雑なスクリプトを使用する場合に限ってください。 httpd に対して SELinux
> の保護をオフにする、 またはシステム全体に対して SELinux の保護をオフにするよりは、 このタイプを使用した方がよいでしょう。


CC BY-SA 3.0
2016-06-20T08:59:54.393
26886
2016-06-20T15:46:56.770
2016-06-20T15:46:56.770
7343
7343
26885
answer