PHP exec() SELinux 命令
PHP exec() SELinux commands
我的目标是在数组中接收命令“semanage login -l”消息并在浏览器中显示结果。
我在 class Ausearch 中创建了一行,其中有一个函数 processSudoInput(),其内容为:
public function processSudoInput()
{
exec("echo password | /usr/bin/sudo -S semanage login -l ",$output);
return $output;
}
问题是当我在终端中打印 $output 时,我得到了很好的结果(一个带有字符串的数组)。 Class ausearch 在单独的 .php 文件 CommandHandler.php 中被调用,其中包含:
use Commands\Ausearch;
include 'Commands/Ausearch.php';
function displayLogData()
{
$ausearch = new Ausearch();
$result = $ausearch->processSudoInput();
var_dump($result);
}
displayLogData();
当我在 PHPStorm 中执行此 php 代码时,我得到结果:
[0]=>
string(0) ""
[1]=>
string(70) "Login Name SELinux User MLS/MCS Range Service"
[2]=>
string(0) ""
并继续下去。
但是当我在浏览器中调用这个函数时(在 HTML 文件中)然后它 returns
array(0) { }
在浏览器中。
到目前为止,我已经尝试执行 visudo
并添加
%www-data ALL=NOPASSWD:ALL
甚至尝试过 chown -R apache:apache /var/www
和 chown -R 777 /var/www
没有运气。
甚至将 selinux 设置为 permissive
目前正在使用CentOS8,目标是不惜一切代价在浏览器中实现一个包含上述数据的数组,无论安全性如何。
在 CentOS8 发行版和其他使用 httpd
进程的发行版上,没有这样的系统主题(用户)www-data
也没有 httpd
。在“PHPStorm”中执行 sudo 命令时,有用户 A,他拥有执行这些命令所需的所有权限,尽管在执行 sudo 命令并在 web 上显示它们时,用户 B 负责对于它和那个用户 B 是 Apache
,因此如果需要 运行 该命令,强烈建议创建 shell 脚本来执行特定的 sudo 命令,也就是封装该命令。在 visudo
里面必须有一行:
%apache ALL=NOPASSWD: /path/to/shell/file.sh
在许多 Internet 示例中,没有提及 %apache
组件(据我搜索)。 Shell 文件是可建议的,因此要避免使用这是一个巨大的安全漏洞(以上解决方案都不是一个好的解决方案,也不是很好但不可怕)
%apache ALL=NOPASSWD: ALL
在 visudo
中添加上面的行之后,可以在 PHP
中添加 运行 行
exec('sudo /path/to/shell/file.sh`, $output)
或
shell_exec('sudo /path/to/shell/file.sh')
取决于您的目标
重要的是,sudo
是执行这些脚本的功能所必需的。
我的目标是在数组中接收命令“semanage login -l”消息并在浏览器中显示结果。 我在 class Ausearch 中创建了一行,其中有一个函数 processSudoInput(),其内容为:
public function processSudoInput()
{
exec("echo password | /usr/bin/sudo -S semanage login -l ",$output);
return $output;
}
问题是当我在终端中打印 $output 时,我得到了很好的结果(一个带有字符串的数组)。 Class ausearch 在单独的 .php 文件 CommandHandler.php 中被调用,其中包含:
use Commands\Ausearch;
include 'Commands/Ausearch.php';
function displayLogData()
{
$ausearch = new Ausearch();
$result = $ausearch->processSudoInput();
var_dump($result);
}
displayLogData();
当我在 PHPStorm 中执行此 php 代码时,我得到结果:
[0]=>
string(0) ""
[1]=>
string(70) "Login Name SELinux User MLS/MCS Range Service"
[2]=>
string(0) ""
并继续下去。 但是当我在浏览器中调用这个函数时(在 HTML 文件中)然后它 returns
array(0) { }
在浏览器中。
到目前为止,我已经尝试执行 visudo
并添加
%www-data ALL=NOPASSWD:ALL
甚至尝试过 chown -R apache:apache /var/www
和 chown -R 777 /var/www
没有运气。
甚至将 selinux 设置为 permissive
目前正在使用CentOS8,目标是不惜一切代价在浏览器中实现一个包含上述数据的数组,无论安全性如何。
在 CentOS8 发行版和其他使用 httpd
进程的发行版上,没有这样的系统主题(用户)www-data
也没有 httpd
。在“PHPStorm”中执行 sudo 命令时,有用户 A,他拥有执行这些命令所需的所有权限,尽管在执行 sudo 命令并在 web 上显示它们时,用户 B 负责对于它和那个用户 B 是 Apache
,因此如果需要 运行 该命令,强烈建议创建 shell 脚本来执行特定的 sudo 命令,也就是封装该命令。在 visudo
里面必须有一行:
%apache ALL=NOPASSWD: /path/to/shell/file.sh
在许多 Internet 示例中,没有提及 %apache
组件(据我搜索)。 Shell 文件是可建议的,因此要避免使用这是一个巨大的安全漏洞(以上解决方案都不是一个好的解决方案,也不是很好但不可怕)
%apache ALL=NOPASSWD: ALL
在 visudo
中添加上面的行之后,可以在 PHP
exec('sudo /path/to/shell/file.sh`, $output)
或
shell_exec('sudo /path/to/shell/file.sh')
取决于您的目标
重要的是,sudo
是执行这些脚本的功能所必需的。