更改Ubuntu用户密码的Php脚本

更改Ubuntu用户密码的Php脚本,php,linux,bash,ubuntu,Php,Linux,Bash,Ubuntu,我编写了一个php脚本,允许用户为邮件服务创建帐户 shell_exec(“sudo useradd-m”.escapeshellcmd($user_name)。”-s/sbin/nologin.“-p”.crypt(escapeshellcmd($user_password),“abcd”) 现在我想允许用户更改/删除他们的密码/帐户。我试着用 shell_exec(“sudo deluser——删除所有文件-f”。$username) 我不知道如何实现密码更改 不幸的是,这些命令似乎不起作用

我编写了一个php脚本,允许用户为邮件服务创建帐户

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

现在我想允许用户更改/删除他们的密码/帐户。我试着用

shell_exec(“sudo deluser——删除所有文件-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
但是,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.
}

您可以检查这一点,希望您的用户不能被称为“rm-rf/*”我尝试过它,但不幸的是它不起作用。有什么我遗漏的吗?@好奇的程序员对不起,我忘了echo语句,这意味着shell试图执行字符串。我已经添加了echo语句并对其进行了测试。我尝试了它,但无法使其正常工作。密码保持不变。我已经在问题中添加了更新,我们需要添加sudo吗?@quentious_coder啊,是的,你需要有实际执行该语句的权限。使用sudo应该可以解决您的问题。我还将向脚本添加一些调试。