更改Ubuntu用户密码的Php脚本
我编写了一个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) 我不知道如何实现密码更改 不幸的是,这些命令似乎不起作用
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应该可以解决您的问题。我还将向脚本添加一些调试。