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
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ファイルを生成します。