簡體   English   中英

PHP腳本更改Ubuntu用戶密碼

[英]Php script to change Ubuntu user password

我寫了一個php腳本,允許用戶創建郵件服務帳戶。

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;

好吧,在Ubuntu中,用於更改普通用戶密碼的命令為:

passwd $username

但是,外殼是交互式的,對於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,以減輕這些風險。

編輯 :忘記了回聲語句,將其添加。

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

暫無
暫無

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

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