用于SELinux管理的PHP Shell_exec和sudo命令

时间:2014-06-10 19:10:25

标签: php selinux

我正在尝试使用SELinux为开发环境中的某个网站构建一个非常简单的管理工具

我需要使用shell_exec运行chcon或具有相同效果的东西。输出表明安全上下文已更改,但“ls -lZ”表示安全上下文未更改。

$temp =  "chcon -v -R -t httpd_sys_content_t " . $_POST['site'];
echo $temp;
$test = shell_exec($temp);
echo $test;

我已将apache用户添加到chcon

的sudoer列表中
apache  ALL=(ALL)       NOPASSWD: /usr/bin/chcon

并更改为此

的代码
$temp =  "sudo -u apache chcon -v -R -t httpd_sys_content_t " . $_POST['site'];
echo $temp;
$test = shell_exec($temp);
echo $test;

现在我收到没有输出

我还使用以下内容创建了bash脚本作为解决方法。 bash脚本是从控制台运行的,但是当从php运行时它没有做任何事情

bash脚本

#!/bin/bash
sudo -u apache chcon -v -R -t httpd_sys_content_rw_t $1

修改代码

$temp = '/path/to/script/test.sh ' . $_POST['site'];
echo $temp . "<br />";
$test = shell_exec($temp);
echo $test;

1 个答案:

答案 0 :(得分:2)

在挖掘并进行一些测试后,我找到了答案。

这是一些有助于生成错误的php,因此您可以追踪修复

$temp = 'sudo mkdir test 2>&1';
echo $temp . "<br />";
$test = shell_exec($temp);
echo $test;

要求sudoers需要被注释掉

#Defaults   requiretty

需要制定auit2allow政策。

如果当前未安装audit2allow。

 yum install policycoreutils-python

以下内容将创建一个策略,该策略需要在没有密码的情况下执行sudoers列表中允许的命令

setenforce 0
echo "" > /var/log/audit/audit.log
/etc/init.d/auditd restart
<execute your php code that requires sudo>
setenforce 1
cat /var/log/audit/audit.log | audit2allow -M httpd_sudo
semodule -i httpd_sudo.pp