我编写了一个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;
答案 0 :(得分:3)
好吧,在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语句,添加了它。
编辑:为脚本添加了一些调试功能。