[英]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.