PHP:检查脚本是否使用sudo运行,或者用户是否未使用“PHP”


PHP: Check if script is being ran with sudo or if user is not using `php`

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

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

您可以使用PHP的POSIX函数:

  • posix_geteuid()以获取有效的用户ID
  • posix_getpwuid()从UID中获取用户信息

这里有一个小例子:

<?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.

顺便说一句,由于根总是UID0,您可以只检查posix_geteuid() == 0

现在,如果您想知道用户是在使用CLI(命令行)还是在使用web服务器,请查看关于Stack Overflow和php_sapi_name()函数的这个问题。

另一个注意事项:我确信以root身份运行PHP脚本不是最好的想法。您可能需要重新考虑您的脚本真正需要什么权限

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

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

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

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

chmod 700 filename
chmod 700 foldername -R

-R

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

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

useradd phpadmin
chown phpadmin:phpadmin foldername -R

警告

使用chmod&chown命令。在使用这些命令之前,请确保目标文件夹和文件名正确。