2014-05-19 39 views
1

我已經寫了一個PHP腳本,以允許用戶創建帳戶的郵件服務。現在PHP腳本來更改Ubuntu用戶密碼

shell_exec("sudo useradd -m ".escapeshellcmd($user_name)." -s /sbin/nologin"." -p ".crypt(escapeshellcmd($user_password),"abcd"));

我想允許用戶更改/刪除其密碼/帳戶。我試着用

shell_exec("sudo deluser --remove-all-files -f ".$username);

我不知道如何實現密碼更改。

不幸的是,這些命令似乎沒有工作。我怎樣才能實現這些?

更新:一段代碼來處理密碼更改

case 'change': 
    $username = $_POST['value']; 
    $newpwd = $_POST['Pwd']; 

    // Berry Langerak's code 
    $out = shell_exec(
     sprintf(
     "echo '%s:%s' | chpasswd", 
      escapeshellarg($username), 
      escapeshellarg($newpwd) 
     ) 
    ); 
echo(json_encode($username." password has been updated")); 
break; 
+1

你可以檢查這個http://stackoverflow.com/questions/127459/using-shell-execpasswd-to-change-a-users-password – leticia

+2

有希望,你的用戶不能被稱爲「; rm -rf/*」 –

回答

2

好,在Ubuntu,改變普通用戶的密碼將是命令:

passwd $username 

但隨後, shell是交互式的,這可能會讓PHP腳本非常煩人。還有,雖然非交互式替代:

echo '$username:$password' | sudo chpasswd 

在你的PHP腳本,你可以這樣做:

<?php 
$username = 'foo'; 
$password = 'foo'; 

$command = sprintf(
    "echo '%s:%s' | sudo chpasswd", 
    escapeshellarg($username), 
    escapeshellarg($password) 
); 

exec($command, $output, $return); 

if ($return === 0) { 
    // success. 
} 
else { 
    var_dump($return, $output); // failure. 
} 

免責聲明:當你執行這條線,注意該命令將在.bash_history和進程列表中可見。在執行shell命令之前,您可能需要加密密碼,並將-e標誌發送到chpasswd以減輕這些風險。

編輯:忘了echo語句,添加它。

編輯:增加了一些調試腳本。

+0

我試過了,但不幸的是它不工作。我錯過了什麼? –

+0

@curious_coder對不起,我忘了echo語句,這意味着shell試圖執行該字符串。我添加了echo語句並對其進行了測試。 –

+0

我試過了,但是我無法讓它工作。密碼保持不變。我已添加更新到問題 –