【问题标题】:Get apache linux user from php从 php 获取 apache linux 用户
【发布时间】:2010-10-22 19:08:54
【问题描述】:

我在一个外国的 linux 系统上,需要确定运行 apache 的用户(php 也是如此)。

目标: 我需要获取脚本的所有者(这没问题,因为我可以使用 SplFileInfo)并将其与 apache 进程的所有者进行比较。

我对任何替代建议持开放态度。

问候, 马里奥

编辑: 附加信息:

该脚本是一个缩略图生成器,它使用 XML 文件从较大的图像生成缩略图。该脚本需要创建文件夹和写入文件。由于我无法影响 php 配置并且我没有任何 shell 访问权限,因此必须非常安静地完成此操作。 创建过程通过异常停止并在失败时发送邮件。由于大多数 php 的函数不能在失败时抛出异常,我需要一些手动检查来确定我所处的环境。因此我需要 apache 用户将其与某个目录或文件所有者进行比较。

【问题讨论】:

  • 作为选项,您可以简单地使用 /tmp,每个人都可以写。
  • 这对我们的案例没有用处,因为我们无法从 docroot 之外提供任何生成的图像。

标签: php apache


【解决方案1】:

可以调用phpexec函数执行whoami

<?php echo exec('whoami'); ?>

【讨论】:

  • 感谢赠款!感谢匿名。这里提供的两种方法都非常适合。我将使用grant 的方法,因为我无法断言posix 函数可用。
  • exec() 如果启用了 safe_mode 并且 whoami 在 safe_mode_exec_dir 之外,则不会工作。
  • 绝对正确,但对于我的目标环境,这是最好的解决方案。 (没有安全模式;))
  • 这适用于 linuxunix,不过我还没有在 windows 上测试过。
  • 我刚刚在 Windows (XAMPP) 上对此进行了测试,令人惊讶的是它可以正常工作,在我的情况下返回 msedgewin10\ieuser,即 machine_name\user_name。然后我去尝试在一个简单的 DOS 提示符whoami 上输入,它的工作原理是一样的。酷。
【解决方案2】:

参见 posix_getuid() 和 posix_getpwuid()

【讨论】:

    【解决方案3】:

    这里有一些复杂的答案。

    这对我有用:

    $user = getenv('APACHE_RUN_USER');
    

    不确定这是否只是自提出此问题以来添加到 apache 的新事物,但现在肯定存在。

    【讨论】:

    • 就我而言,它不起作用。它只是返回一个空字符串。
    【解决方案4】:

    phpinfo 会转储大量系统信息。对于 apache2 安装,有一个部分显示 apache 用户和组 ID。尝试创建一个只有一行的 php 脚本,调用 phpinfo(),然后在 Web 浏览器中打开它。

    【讨论】:

    • 那不是目的 ;) 我知道如何通过 php info 获取用户...我需要从脚本中获取名称作为字符串。
    • ... 并且解析 phpinfo(INFO_MODULES) 不是替代方案;)
    【解决方案5】:

    某些 php 脚本必须在 apache 用户 (cli) 上运行,在这种情况下 whoami 不合适。 这是我的解决方案:

    $output = exec('apachectl -S 2>/dev/null | grep User');
    $apacheUser = preg_match('/name="([^"]+)"/', $output, $match) ? $match[1] : 'www-data';
    

    【讨论】:

      猜你喜欢
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 2020-12-28
      • 2022-01-08
      • 2015-09-29
      • 1970-01-01
      相关资源
      最近更新 更多