从PHP在ubuntu中创建用户WITH密码


Creating user WITH password in ubuntu from PHP

我有这个PHP代码

<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

if(!empty($_GET) && !empty($_GET['user']) && !empty($_GET['mem']) && !empty($_GET['id']) &&!empty($_GET['k'])) {
    $user = $_GET['user'];
    $mem = $_GET['mem'];
    $id = $_GET['id'];
    $pass = $_GET['k'];
    $fullname=  escapeshellarg($user."-".$id);
    echo $user; 
    echo $mem;
    echo $id; 
    echo $pass;
    echo "<br/>";
    mkdir("/home/servers/".$fullname, 0, true);
    $outputuser = shell_exec("sudo useradd -d /home/$fullname $fullname");
    $outputpass = shell_exec('echo -e '.$pass.''n'.$pass.''n" | sudo passwd '.$fullname);
    echo $outputpass;
}

?>

不过密码不起作用。当我从终端运行它时,我得到

输入新的UNIX密码:重新键入新的UNIX口令:passwd:身份验证令牌操作错误
现在肯定有更好的方法可以做到这一点,而不会在sudo中将useradd和passwd都暴露为不需要密码?

这不是一个答案,而是一个非常重要的警告。您的脚本可能允许用户完全访问您的服务器,因为他可以输入"../"作为$fullname。将用户输入作为参数传递而不使用escapeshellarg()是自杀。

解决问题的方法可能是创建一些crontab任务,该任务将在每个定义的时间段从数据库中创建用户。这样你的密码就不会暴露。

必须在second shell_exec中使用双引号,否则PHP无法将转义字符转换为控制字符。