簡體   English   中英

檢查用戶是否是root用戶

[英]Check if a user is root

如何驗證用戶是否是PHP腳本中的root用戶? 命令是什么? 我試過這樣的事情:

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

但是su命令無法接收密碼......

請注意,該計算機與Internet隔離,因此我可以根據需要以root身份運行PHP。

編輯:我不想知道運行該腳本的當前用戶是否是root用戶。 我的PHP腳本中有一個用戶列表,如果他有root權限,我想知道每次登錄。

posix_getuid()怎么樣?

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

嘗試這個 。

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

首先,問問自己究竟什么定義了“擁有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;
        }
    }
}

另一種(和imho唯一理智)方法是將具有root /管理權限的所有用戶添加到特定組( 輪盤管理員已經在不同的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']);
}

在評論后重寫

“我不想知道運行該腳本的用戶是root還是no。如果他們是root用戶,我必須在PHP腳本中檢查一些登錄名/密碼”

我現在明白你需要在PHP中執行root身份驗證

我建議使用pwauth而不是whoami / login等。

是一個如何從PHP使用它的示例,而我相信可以有一種更簡單的測試方法。

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

exec("whoami");

如果這是一個聰明的事情是一個不同的問題;)

如果要查看某個系統用戶(而不是Web服務用戶)是否具有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";
    };
?>

請記住,這只會檢查用戶名。 如果您還需要檢查密碼,您實際上必須嘗試通過系統進行身份驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM