shell_exec("sudo useradd -m $username");
shell_exec("yes $password | sudo passwd $username");
上面的代碼片段成功創建了用戶,但它沒有設定密碼,我做錯了嗎?

$username 是影子檔案底部的 megan 用戶
uj5u.com熱心網友回復:
您不能passwd以非互動方式呼叫。時期。
不過,您可以使用該選項提供useradd預先計算的密碼哈希。-p[見:man useradd]
function os_pw_hash($password) {
$salt = base64_encode(random_bytes(12)); // 16-byte salt
return crypt('hunter2', '$6$'.$salt.'$');
}
var_dump( os_pw_hash('hunter2') );
輸出:
string(106) "$6$0LIJoQz2W0vP35Ej$kg75OyhAZb9iAbqa/sO56pXs/peA8wPd4DKv5Al0FllBApBe7BvXUA6Q6fQ3bqpxfz.XH6GWnI.mH6yLfTQil1"
您還需要運行這個 [老實說,您的所有shell 引數]escapeshellarg()以確保元字符被正確轉義。
最后:
對于這個用例,安全性不是問題
安全始終是一個問題。對于您認為不應該如此的情況,這通常是雙重事實。不幸的是,我有一些用戶我很遺憾地相信他們知道更好地利用內部應用程式中的安全漏洞來執行具有 root 權限的命令,以避免簡單地制作票證。
uj5u.com熱心網友回復:
不要這樣做。
您希望將系統的外向部分(網頁)與內部管理盡可能隔離。為此,您的腳本應該只能在您設定的約束內創建用戶。撰寫一個帶有 2 個引數的單獨腳本 - 一個用戶名和一個密碼(盡管它應該生成一個隨機密碼),它應用對輸入的徹底驗證(例如,用戶名中沒有“/”)并為您的網路服務器提供 uid sudo 權限僅那個腳本(它可以被 iwrite n PHP 直接呼叫 adduser)。
您的代碼不起作用的原因是passwd在讀取密碼之前清除了輸入緩沖區。通常它會兩次詢問新密碼 - 但提示和回復因背景關系而異。您可以使用其他程式來設定更一致的密碼 - chpasswd 在 Linux 系統上是相當標準的 - 正如 Sammitch 所說,某些版本的 useradd 允許在創建用戶時指定密碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/466193.html
上一篇:部分退款Paypal中的授權訂單
