PHP: 如何检测用户是否为root/sudo?

10

我有一个需要在Linux系统上以root权限运行的命令行PHP脚本。

在我们旧的Redhat Enterprise 2 Linux发行版上,这段代码是有效的:

// If we are linux, make sure we're root
if ($bIsLinux && $_ENV['USER'] != 'root')
    die("This script must be run as root.\n");

然而,我们已经升级了服务器,并且现在使用的是一个更现代化的Linux版本(Amazon Linux)。 这很棒,但上述方法不再起作用。在AML上,您实际上没有root密码,但您可以从ec2-user使用sudo。我甚至尝试过sudo -i,但这不会更改环境变量-因此上述代码会失败。

因此,在继续之前,我需要一种新的方法来确保具有根级别权限。

有人有什么想法吗?

谢谢!


你看过这个问题吗?检查用户是否为root - Amal Murali
2个回答

22
使用posix_getuid函数,您可以检查用户是否为root用户。
<?php
    if (posix_getuid() === 0){
        echo "This is root !";
    } else {
        echo "This is non-root";
}
?>

0 是根目录,其他任何东西都不是。


4
请不要使用 == 0 进行判断,如果在检查时出现错误并返回 FALSE 或 NULL,它仍将被视为类似于 0 的值,并显示 "root"。请在此处使用 === 0 - hanshenrik
在PHP中(使用sudo命令),实现$_SERVER环境变量是$_SERVER ['SUDO_USER'],$_SERVER ['SUDO_GID'],$_SERVER ['SUDO_UID']这意味着,包含“SUDO_XX”的地方可能会作为“sudo”运行。 - ArrayIterator

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接