我有一台 CentOS 6 服务器,并且正在尝试让 apache web 服务器git pull
在目录中运行。
该 php 文件非常简单:
<?php
shellexec('cd /var/www/vhosts/domain;git pull');
但是,git pull
通过浏览器请求该文件时,该命令不会运行。
通过运行暂时关闭 SELinuxsetenforce 0
可以允许其运行,但这不是一个安全的解决方案。
请求该文件时,/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
答案1
暂时使用 SELinux 以 Permissive 模式 (setenforce 0) 运行您的系统。执行您的正常操作,以便将错误记录到 audit.log 中。
然后您可以使用审计为什么获取问题的解释。您可以使用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文件和一个可读的.te文件。