Php useradd-不使用-p选项
我有一个PHP脚本,试图添加一个用户。下面是一个简化的片段: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
$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()
从PHPscrypt()
返回的哈希值不一定与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' ";