gpt4 book ai didi

php - useradd - 不使用 -p 选项

转载 作者:太空狗 更新时间:2023-10-29 12:37:59 28 4
gpt4 key购买 nike

我有一个试图添加用户的 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);

运行此脚本后,我在/etc/passwd 文件中看到用户 test。但是,我在/etc/shadow 文件中没有看到密码。我的直觉是我以某种方式错误地设置了密码。

知道我做错了什么吗?谢谢。

更新:

当我通过命令行创建用户并使用 passwd 命令添加密码时,我在/etc/shadow 中看到的加密字符串与 crypt 在我的 PHP 脚本中生成函数。

更新 2

根据 mario 的建议:

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

$command = "sudo useradd -G '$groupname' '$username' -p '$password' -s /bin/false";
$command = escapeshellcmd($command);
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()

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

参见 http://php.net/crypt 上的示例具有算法和盐参数。

关于php - useradd - 不使用 -p 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5294241/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com