web-dev-qa-db-ja.com

Apacheがgitを実行できるようにSELinuxを設定する方法

CentOS 6サーバーがあり、ApacheWebサーバーをディレクトリでgit pullを実行させようとしています。

Phpファイルは単純です:

<?php
    shellexec('cd /var/www/vhosts/domain;git pull');

ただし、ブラウザからファイルを要求された場合、git pullコマンドは実行されません。

setenforce 0を実行してSELinuxを一時的にオフにすると、SELinuxを実行できますが、これは安全な解決策ではありません。

/ var/log/auditは、ファイルが要求されたときに次のエラーを示します。

type=AVC msg=audit(1401182476.567:363184): avc:  denied  { read } for  pid=11082 comm="ssh" name="known_hosts" dev=dm-0 ino=11272197 scontext=system_u:system_r:httpd_sys_script_t:s0 tcontext=unconfined_u:object_r:default_t:s0 tclass=file
2
wyred

SELinuxを許可モード(setenforce 0)で一時的にシステムを実行します。エラーがaudit.logに記録されるように、通常の操作を実行します。

次に、 audit2why を使用して、問題の説明を取得できます。 audit2allow を使用して、ロード可能なポリシーモジュールを生成できます。だから例えば

audit2allow <wyred.log
type=AVC msg=audit(1401182476.567:363184): avc:  denied  { read } for  pid=11082 comm="ssh" name="known_hosts" dev=dm-0 ino=11272197 scontext=system_u:system_r:httpd_sys_script_t:s0 tcontext=unconfined_u:object_r:default_t:s0 tclass=file

    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this 
            access.

その後

audit2allow -M wyred <wyred.log
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i wyred.pp

.ppファイルとreadable.teファイルを生成します。

4
user9517