gpt4 book ai didi

php - 使用 PHP shell_exec() 执行 BASH 脚本,无法写入文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:28 26 4
gpt4 key购买 nike

我正在使用 PHP 编写 API 以通过 POST 将 JSON 参数传递给 BASH 脚本。这是我正在做的事情的精炼版本:

<?php

$params = json_decode(file_get_contents('php://input'), true);

$cmd = "/bin/bash /path/to/myscript " . $params["value1"] . " " . $params["value2"] . " " . $params["value3"];
$output = "Command: " . $cmd . "\n\nResponse: " . shell_exec($cmd);

print($output);

?>

'myscript' 是一个简单的测试脚本,包含以下内容:

#!/bin/bash

echo -e "Executing script...your parameters are: [$1] [$2] [$3]\n"
echo -e "test" > /tmp/test.txt

执行脚本有效,我收到第一个回显,显示参数已成功传递。但是,尝试在写入文件系统(第二个 echo )的脚本中执行任何操作都不会发生。好像权限是个问题,但我确保写入“apache”用户具有完全权限的目录。我还尝试将 apache 和我的脚本命令添加到 sudoers 并通过 sudo passwordless 运行,但没有成功。我已经按照已经发布的数百万个其他问题的建议,通过将适当的调试命令添加到我的 php 和 bash 脚本中,验证了路径是明确和正确的,用户是正确的等等。如果我从命令行运行该脚本,它显然可以正常工作。如果我“sudo -u apache”来运行脚本,它也可以工作(并且可以写入文件系统),所以我知道权限不是问题。我卡住了。有什么想法吗?

编辑更多信息:我还尝试禁用 SELinux,验证所有者/权限,尝试写入具有 777 权限的其他目录,并使用 apache 用户从命令行(PHP 之外)执行脚本,所有这些都没有问题.只有在 shell_exec 中执行时,我才能向文件系统写入任何内容。

如果有帮助,我正在使用 Centos7。

最佳答案

罪魁祸首最终还是 SELinux。禁用后我可以写入特定目录,但仍然不能写入其他目录。不知道为什么,但即使禁用了 SELinux,我也无法在通过 shell_exec 执行脚本时写入/tmp,尽管在通过 cmd 行执行时可以。但是 shell_exec 可以毫无问题地写入我的 httpd 根目录。

关于php - 使用 PHP shell_exec() 执行 BASH 脚本,无法写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45723289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com