我正在尝试使用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;
答案 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