如何验证用户是否是PHP脚本中的root用户?命令是什么? 我尝试过类似的东西:
exec("su -l login < `echo password`");
但是su命令无法接收密码......
请注意,该计算机与Internet隔离,因此我可以根据需要以root用户身份运行PHP。
编辑: 我不想知道运行该脚本的当前用户是否是root用户。 我的PHP脚本中有一个用户列表,如果他有root权限,我想知道每次登录。
答案 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";
};
?>
请注意,这只会检查用户名。如果您还需要检查密码,则必须尝试对系统进行身份验证。