首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >useradd -不使用-p选项

useradd -不使用-p选项
EN

Stack Overflow用户
提问于 2011-03-14 02:49:38
回答 2查看 2.2K关注 0票数 2

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

代码语言:javascript
复制
<?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/影子文件中看到密码。我的直觉是我不正确地设置了密码。

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

更新:

当我通过命令行创建用户并使用passwd命令添加密码时,我在/etc/阴影中看到的加密字符串与我的crypt脚本中的crypt函数非常不同。

更新2

根据mario的建议:

代码语言:javascript
复制
<?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);

注意:这没有为我修复任何东西。问题还是一样的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-14 02:56:29

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

代码语言:javascript
复制
$command = "sudo useradd -G '$groupname' '$username' -p '$password'  ";

但是,您应该更好地对每个用户使用escapeshellcmd()

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

请参阅带有算法和salt参数的http://php.net/crypt示例。

票数 1
EN

Stack Overflow用户

发布于 2013-07-18 13:47:14

尝试用perl脚本加密您的密码:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5294241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档