【问题标题】:PHP: Check if script is being ran with sudo or if user is not using `php`PHP:检查脚本是否正在使用 sudo 运行,或者用户是否没有使用 `php`
【发布时间】:2023-03-14 23:59:01
【问题描述】:

如何检查脚本是否使用 sudo 访问或不使用 PHP 运行?

【问题讨论】:

    标签: permissions php


    【解决方案1】:

    注意:这个问题在 Stack Overflow 上可能更合适,即使它指的是 Unix 和 Linux 系统上的 PHP(权限提升、权限等)。

    您可以使用 PHP 的 POSIX 函数:

    这是一个小例子:

    <?php
    $userinfo = posix_getpwuid(posix_geteuid());
    echo "This script runs with " . $userinfo["name"] . "'s privileges.";
    ?>
    

    测试...

    $ php myfile.php
    This script is run with myuser's privileges.
    $ sudo php myfile.php
    This script is run with root's privileges.
    

    顺便说一句,由于 root 总是 UID 0,你可以检查 posix_geteuid() == 0

    现在,如果您想知道用户是使用 CLI(命令行)还是通过 Web 服务器,请查看 this question on Stack Overflowphp_sapi_name() 函数。

    另一个注意事项:我很确定以 root 身份运行 PHP 脚本并不是最好的主意。您可能需要重新考虑一下您的脚本真正需要哪些权限。

    【讨论】:

    • 我不认为以 root 身份运行 php 脚本存在固有问题...它与 perl 或 shell 脚本一样危险。
    • @SailorCire 我也不建议以 root 身份运行 shell 脚本。问题是,我很确定 PHP 脚本从头到尾都不需要 root 权限,而且我相信最好不要授予多余的权限。
    • 很公平。所以我假设你的理念是不使用 root 帐户,只通过 sudo 做事?
    • @SailorCire 无论您以 root 身份运行脚本,还是以 root 身份通过 sudo 运行脚本都不会改变任何事情,您仍然设置 EUID 0。这里有一个更明显的示例:如果唯一的事情你的脚本不能做的是“写在/path/a”,那么你不应该仅仅为此授予它完全的root访问权限。相反,您应该尝试调整您的文件系统权限,并在最后的手段中设置更具体的sudo 策略。 Here is a little something you might find interesting.
    【解决方案2】:

    如果纯粹是为了判断是否使用sudosudo会在命令的环境中放入多个值:

    SUDO_COMMAND=/usr/bin/commandname
    SUDO_USER=wurtel
    SUDO_UID=1000
    SUDO_GID=1001
    

    这些可以在 php 中使用getenv() 函数进行检查。当然,将它与 posix_geteuid() 函数结合使用,以确保您确实拥有提升的权限,因为任何人都可以在环境中设置这些值。

    【讨论】:

      【解决方案3】:

      它必须只在 php 中吗?您可以将 php 目录 chmod 为只能由 root 执行,这应该会为您实现相同的结果。

      chmod 700 filename
      chmod 700 foldername -R
      

      -R

      -R 表示递归,因此任何文件或子文件夹都将获得与父文件夹相同的权限。请谨慎使用。

      为了进一步改善这一点,您可以创建一个可以拥有文件的“phpadmin”用户,这样除了 root 和 phpadmin 之外没有其他用户可以执行它们。

      useradd phpadmin
      chown phpadmin:phpadmin foldername -R
      

      警告

      使用 chmod & chown 命令时请务必小心。确保在使用这些命令之前定位正确的文件夹和文件名。

      【讨论】:

      • 是的,总是发出警告......如果在答案中使用命令 chmod 和 chown,我们应该自动发出警告。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 2011-09-06
      • 1970-01-01
      • 2015-04-24
      相关资源
      最近更新 更多