从PHP在ubuntu中创建具有密码的用户
我有这个PHP代码从PHP在ubuntu中创建具有密码的用户,php,ubuntu,sudo,Php,Ubuntu,Sudo,我有这个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(
<?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;
}
?>
这不是答案,而是非常重要的警告。您的脚本可能允许用户获得对服务器的完全访问权限,因为他可以输入“./”作为$fullname
。将用户输入作为参数传递而不使用是自杀
解决问题的方法可能是创建一些crontab任务,该任务将在每个定义的时间段从数据库创建用户。这样您的密码就不会被公开。您必须在第二个shell_exec中使用双引号,否则PHP不会将转义字符转换为控制字符。我理解这一点,首先,这是一个面向内部的Web服务器,从面向外部的Web服务器获取已知值,它没有最终用户控制。此时此刻,这也只是一个概念验证类型的东西,我将在代码以原始形式运行时添加安全措施。您可以添加http用户权限以使用adduser命令,但这是危险的。您的确切意思是什么?类似于http ALL=NOPASSWD:/usr/sbin/useradd,/bin/mkdir,/bin/ln,/bin/chown,/bin/cp、/bin/sed
withvisudo
www-data
已经可以使用useradd
和passwd
而不需要sudo上的密码,它可以创建用户,但密码更改失败,因为passwd
在echo-e.$pass.\n.$pass.\n“$fullname
我明白了,但是如果不需要密码,就没有办法做到这一点吗?(可能在useradd中使用-p标志,但我不知道如何处理加密)
Enter new UNIX password: Retype new UNIX password: passwd: Authentication token manipulation error