检查用户是否是root用户

时间:2011-01-17 13:19:01

标签: php linux root

如何验证用户是否是PHP脚本中的root用户?命令是什么? 我尝试过类似的东西:

exec("su -l login < `echo password`");

但是su命令无法接收密码......

请注意,该计算机与Internet隔离,因此我可以根据需要以root用户身份运行PHP。

编辑: 我不想知道运行该脚本的当前用户是否是root用户。 我的PHP脚本中有一个用户列表,如果他有root权限,我想知道每次登录。

6 个答案:

答案 0 :(得分:18)

posix_getuid()怎么样?

if (0 == posix_getuid()) {
    echo "Running as root.";
} else {
    echo "not root";
}

答案 1 :(得分:3)

试试这个。

<?php
    if (posix_getuid() == 0){
        echo "This is root !";
        // add more for root
    } else {
        echo "This is non-root";
    }
?>

答案 2 :(得分:3)

首先,问问自己究竟是什么定义了具有root权限的登录名。 AFAICT有2种基本解决方案。

老派的方式,系统管理员用uid 0创建多个帐户,我 - 我当然不是唯一的 - 认为这是一场噩梦。在这种情况下,您可以使用posix_getpwnam检查列表中的所有用户,并查看他们的uid是否与0匹配。

以下代码片段就是这样,$ privileged将包含具有root权限的用户:

$logins = array('root', 'john', 'guest', 'foo');
$privileged = array();
foreach($logins as $login) {
    $userInfo = posix_getpwnam($login);
    if ($userInfo !== FALSE) {
        if ($userInfo['uid'] == 0) {
          $privileged[] = $login;
        }
    }
}

执行此操作的另一种方法是:将具有root /管理权限的所有用户添加到特定组( wheel admin 已被使用在不同的Linux发行版中,找出哪一个适合你)。这种情况甚至更简单,因为您可以使用posix_getgrnam来获取特定组中的所有成员。

以下代码段将匹配您提供的登录数组,并查看具有特定权限的成员,同时$ privileged将包含结果(即列表中属于您指定的组成员的用户) :

$logins = array('root', 'john', 'guest', 'foo');
$privileged = array();
$groupInfo = posix_getgrnam('admins');
if ($groupInfo !== FALSE) {
    $privileged = array_intersect($logins, $groupInfo['members']);
}

答案 3 :(得分:1)

在您发表评论后重写

  

“我不想知道用户是谁   运行脚本是root还是no。我有   检查一些PHP脚本   登录/密码,如果他们是root或   不是“

我现在明白你需要在PHP中执行 root身份验证

我建议使用pwauth代替whoami / login等。

Here是一个关于如何从PHP使用它的示例,我相信可以有一种更简单的测试方法。

答案 4 :(得分:1)

如果你的意思是“是根”,那么你可以检查whoami,看看它是否出现'root'

exec("whoami");

如果聪明的事情是另一个问题;)

答案 5 :(得分:1)

如果您想查看某个系统用户(而不是网络服务用户)是否具有root权限,您可以使用posix_getpwnam()功能:

<?php
    $u = posix_getpwnam("username");

    if ($u == FALSE) {
        print "no-such-user";
    } elseif ($u["uid"] == 0) {
        print "root";
    } else {
        print "non-root";
    };
?>

请注意,这只会检查用户名。如果您还需要检查密码,则必须尝试对系统进行身份验证。