Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php useradd-不使用-p选项_Php_Linux - Fatal编程技术网

Php useradd-不使用-p选项

Php useradd-不使用-p选项,php,linux,Php,Linux,我有一个PHP脚本,试图添加一个用户。下面是一个简化的片段: <?php $groupname = 'mygroup'; $username = 'test'; $password = crypt('Pass123!'); var_dump($password); $command = "sudo useradd -G $groupname $username -p $password -s /bin/false"; var_dump(

我有一个PHP脚本,试图添加一个用户。下面是一个简化的片段:

<?php
    $groupname = 'mygroup';
    $username  = 'test';
    $password  = crypt('Pass123!');
    var_dump($password);

    $command = "sudo useradd -G $groupname $username -p $password -s /bin/false";
    var_dump($command);

    $output = array();
    $return = 0;
    exec($command, $output, $return);

    var_dump($output);
    var_dump($return);

注意:这并没有为我解决任何问题。问题仍然是一样的。

您的主要问题是
crypt()
哈希通常以
$1$abc..
开头。并且您的
exec()
命令参数不会转义。至少引用他们的话:

$command = "sudo useradd -G '$groupname' '$username' -p '$password'  ";
但是您应该优先在每种类型上使用
escapeshellcmd()

从PHPs
crypt()
返回的哈希值不一定与
passwd
实用程序生成的哈希值相同。有不同的散列函数。PHP为您提供MD5版本(从
$1$
开始),而
passwd
可能默认生成SHA512哈希(从
$6$
开始)


请参阅关于算法和salt参数的示例。

尝试使用perl脚本加密密码:


$command=“sudo useradd-G”。$groupname。”“$username。”-p$(perl-e'print crypt($ARGV[0],\“password\”)”).password。”)-s/bin/false”

您不应该在整个$command上使用escapeshellcmd,而应该在每个参数上单独使用($username,$password)。但现在就不谈了。引用足以让它工作。哪个用户正在执行php脚本,他有权不使用密码执行sudo useradd吗?
$command = "sudo useradd -G '$groupname' '$username' -p '$password'  ";