【问题标题】:PHP Shell_exec for certain commands onlyPHP Shell_exec 仅适用于某些命令
【发布时间】:2012-10-09 15:48:07
【问题描述】:

有没有办法禁用shell_exec,除了某些可以列入白名单的命令?

我想我可以随时进入并将这些命令放入mod_sec,这是我不想运行的主要命令。但是这样的配置是不够的。我想禁用shell_exec,但允许shell_exec 仅使用某些命令运行,确切地说是两个。

我正在运行 CentOS、Cpanel 和 PHP 5.2.17。

【问题讨论】:

  • 系统管理员 (root) 通常可以配置用户 shell 中可用的命令。 PHP 将使用运行它的用户创建 shell,所以我看不出有什么理由不应该这样做。到目前为止,您尝试过什么?
  • 如果您只想允许 2 个特定命令,为什么不对其进行硬编码并抽象出调用它们的机制,这样您就不会将用户输入直接传递给shell_exec()? CentOS、cpanel 和 PHP 5.2.17 闻起来像老式的 WHM 安装,对于这样的东西可能很难配置,除非您是服务器管理员,否则您将无法自己完成。
  • SE Linux 的 HTTPD 上下文也可能有用:en.wikipedia.org/wiki/Selinux
  • 到目前为止,除了 php.ini 中的 disable_functions 之外,我还没有尝试过任何东西。这就是为什么我想知道是否有可能只为整个服务器启用某些命令。我是 root,旧的 WHM 安装不,PHP 有点旧,因为 5.3 仍然存在我们尚未升级的错误。但是 WHM 和 Apache 都是最新的。我在谷歌上到处搜索,但没有找到任何东西。
  • 不,disable_functions 是关于 PHP 函数的,而不是您可以通过 通过 shell_exec 访问的函数。这些命令在操作系统(或者更准确地说是要创建的 shell 环境)的控制之下。我不知道存在一个现成的解决方案,您可以使用它来扩展 PHP,以便可以在 PHP 中配置这样的功能。

标签: php linux shell-exec


【解决方案1】:

这本身不是可禁用/白名单,但如果操作正确,它可以让用户仅对您在代码中指定的那些 shell 命令进行受监督和严格控制的访问。

    $Ops = array(
            'function1'  => function($parameter){ 
                    DO PARAMETER CHECK HERE; 
                    shell_exec("CommandThatIsSafetoPerform" + parameter here);
                },
            'function2'  => function($parameter){ 
                    DO PARAMETER CHECK HERE; 
                    shell_exec("CommandThatIsSafetoPerform" + parameter here);
                },
            'function3'  => function($parameter){ 
                    DO PARAMETER CHECK HERE; 
                    shell_exec("CommandThatIsSafetoPerform" + parameter here);
                },

    );

然后调用 use 这样的东西:

call_user_func(Ops["function1"], "your parameter here");

一些特别说明:让用户访问参数是自找麻烦。您最好对所有内容进行硬编码,而不是让用户能够修改任何参数。

【讨论】:

    猜你喜欢
    • 2012-05-25
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多