2013-11-22 2 views
0

У меня есть этот 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; 

} 


?> 

пароль Isnt работает правильно, хотя. когда я запускаю его с терминала, я получаю

 Enter new UNIX password: Retype new UNIX password: passwd: Authentication token manipulation error
теперь, конечно, лучший способ сделать это, не подвергая как useradd И passwd, не нуждающимся в паролях в sudo?

ответ

0

Вы должны использовать двойные кавычки в second shell_exec, иначе PHP не преобразует экранированные символы для управления символами.

+0

right Я вижу, но нет ли способа сделать это без необходимости этого passwd вообще (возможно, используя флаг -p в useradd, но я понятия не имею, как обрабатывать шифрование) –

1

Это не будет ответом, но действительно важным предупреждением. Ваш скрипт может позволить пользователю получить полный доступ к вашему серверу, так как он может ввести «../» в качестве $fullname. Передача пользовательского ввода в качестве аргумента без предварительной обработки - это самоубийство.

Решение вашей проблемы может создать задачу crontab, которая будет создавать пользователей из базы данных каждый определенный период времени. Таким образом, ваш пароль не будет открыт.

+0

Я понимаю это, для начала это внутренние веб-серверы, принимающие известные значения с внешнего ориентированного веб-сервера, у него нет конечного пользователя. Это на данный момент также является лишь доказательством вещи типа понятия, я добавлю меры безопасности, как только я получу код, работающий в его исходной форме. –

+0

Вы можете добавить HTTP-разрешение для использования команды adduser, но это опасно. –

+0

Что именно вы имеете в виду? –

Смежные вопросы