我有一個「簡單」問題:如何在不授予Apache root特權或引入其他瘋狂安全漏洞的情況下如何從PHP腳本中安全更改用戶密碼?從PHP腳本更改Linux用戶密碼
背景: CentOS 6的,阿帕奇2.2.13,PHP 5.3.3
我知道的pam_chpasswd()命令,該命令是PECL PAM庫的一部分的。但是,除非主機進程(httpd)具有對/ etc/shadow文件的讀取權限,否則此功能將失敗。 (不好意思!不知道這個庫如果需要這麼高的權限,它如何提供幫助......)
據我所見,理想情況是讓PHP調用一個shell腳本,其中包含'sudo -u [username用戶更改密碼]' 這將運行腳本「AS」用戶,所以他應該有權限更改自己的密碼。並且sudo會要求用戶發送他的現有密碼以進行身份驗證,從而防止一個用戶更改另一個用戶的密碼。
但由於某些原因,這不起作用......當用popen打開進程時,進程從不執行。我將shell腳本設置爲將一些文本轉儲到/ tmp中的可公開寫入的文件中。但它從來沒有達到這一點。
$cmd = "/usr/bin/sudo -S -u$username /file_to_execute.sh";
$handle = popen ($cmd, "w"); // Open the process for writing
fwrite ($handle, "$current_password\n"); // Send the user's current password to sudo (-S option)
fwrite .... (write the username, current password, and new password, so the script can change it)
$result = pclose($handle);
如果我訪問此PHP腳本(HTTP://server/script.php),該函數立即失敗,和$結果= 1
如果我修改sudoers文件(visudo命令),並添加行:
$
默認值:阿帕奇requiretty
腳本凍結約10秒鐘,然後失敗($結果= 1)
這樣做的任何建議都非常感謝!
任何這些工作? http://stackoverflow.com/questions/127459/using-shell-execpasswd-to-change-a-users-password?rq=1 – Aknosis 2012-07-24 16:34:38