【问题标题】:Don't want php script to execute the shell command as apache user when it is executed through browser?不希望 php 脚本在通过浏览器执行时以 apache 用户身份执行 shell 命令?
【发布时间】:2013-08-25 05:50:08
【问题描述】:

我创建了一个生成一些 .gz 文件的 PHP 脚本,当我通过命令行 (cli) 执行 PHP 脚本时,它会生成具有“沙漠”作为用户的 .gz 文件,但是当通过浏览器执行脚本时它使用“nobody”作为用户生成 .gz 文件,这是不应该发生的。当通过浏览器执行脚本时,我希望生成的文件具有“沙漠”用户而不是“无人”用户。

这是我创建的代码:

$file='test';
$newFileGZipCommand = 'cat '.$file.'_new | gzip > '.$file.'.gz';
//$newFileGZipCommand = 'sudo -u desert cat '.$file.'_new | gzip > '.$file.'.gz'; // This does not work
$newFileGZipCommandExecute = shell_exec($newFileGZipCommand);
//chmod($file.'.gz',0777) or die("Unable to change file permission");
//chown($file.'.gz', 'directu') or die("Unable to change file Owner");

我尝试通过 php 中的 chmod() 和 chown() 函数更改文件权限和所有者,但它显示“chown(): operation not allowed”。

高度赞赏任何指向此的指针。

[注意:我无法更改 httpd.conf 或任何其他配置文件]

【问题讨论】:

    标签: php apache shell unix webserver


    【解决方案1】:

    Sudo 通常需要一个交互式 shell 来输入您的密码。这显然不会在 PHP 脚本中发生。如果您确定自己知道自己在做什么并且已经解决了安全问题,请尝试允许 Apache 用户在没有密码的情况下运行 sudo,但仅限于某些命令。

    例如,在您的 sudoers 文件中添加以下行将允许 Apache 在没有密码的情况下运行 sudo,仅适用于 gzip 命令。

    nobody ALL=NOPASSWD: gzip
    

    调整路径并添加任何参数以满足您的需要。

    注意:

    1. 由于 PHP 调用 shell 的方式,可能仍会出现复杂情况 命令。
    2. 请记住,允许 Web 服务器 以 root 身份运行命令!

    另一种选择:

    编写一个带有 suid 位的 shell 脚本,使其以 root 身份运行,无论谁调用它。

    可能是更好的选择:

    将命令写入队列并让 cron 提取它们、验证它们(仅允许已知的良好请求)并运行它们,然后用日期和结果标记该队列完成。

    然后您的最终用户可以点击/等待使用 ajax 进行更新。

    希望它有助于解决您的问题。

    【讨论】:

    • @MahavirM​​unot 您尝试了哪个选项?我认为最后一个选择会是更好的选择。您将在其中运行可以为您执行所有 GZIP 的 shell 脚本
    • yes shell 脚本还生成了用户为nobody 的文件。还是没有进展
    • 您是否以desert 用户身份运行shell 脚本?
    • :是的,我临时试了一下,还是不行。
    猜你喜欢
    • 2023-03-28
    • 2010-10-07
    • 2012-09-26
    • 1970-01-01
    • 2015-11-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    相关资源
    最近更新 更多