【问题标题】:How to create a ubuntu user from within node如何从节点内创建 ubuntu 用户
【发布时间】:2013-09-23 00:15:38
【问题描述】:

我正在尝试将用户添加到运行我的节点应用程序的服务器。现在我正在使用:

exec("useradd -mp {password-hash}")

使用由

创建的哈希
exec("mkpasswd -m des {password}")

这会使密码在进程列表中可见,应该不惜一切代价避免这种情况。

这就是为什么我想知道 npm 上是否有一个模块,或者以编程方式将 linux 用户添加到系统的更简单方法(这是必要的,因为我正在构建的应用程序会在用户注册时在系统上创建一个用户帐户网络)。这可以在不调用系统命令的情况下完成吗?我没有找到 npm 模块,也没有找到任何使用 node 与 ubuntu/unix 用户管理交互的信息。

解决方案

使用来自最佳答案的 Mustafa 的提示,我使用 spawn 实现了 mkpasswd 命令的一个版本。在 CoffeeScript 中,它看起来像这样:

{spawn} = require 'child_process'

child = spawn 'mkpasswd', ['-m','des','--stdin']

child.stdout.on 'data', (data)->
  console.log 'password hash arrived: ', data.toString()

child.stdin.write 'password' 

确保在调试代码时将正确的错误处理事件处理程序添加到 child.stderrchild.stdout

【问题讨论】:

    标签: node.js ubuntu npm user-management


    【解决方案1】:

    您要么使用这些命令,要么手动将您的用户添加到/etc/passwd,并将其密码添加到/etc/shadow

    /etc/passwd 条目的格式:username:passwd:UID:GID:full_name:directory:shell

    如果你想让它安全的话,密码应该是 x,所以它会从影子中读取。

    /etc/shadow 条目的格式:username:passwd:last:may:must:warn:expire:disable:reserved

    如果你正确添加它们,就不会有问题。

    但是,当您拥有所需的工具时,为什么还要手动处理它呢?如果您担心隐私,可以发出mkpasswd -m des --stdin,它将从标准输入中读取密码。而不是exec,当你使用spawn时,你还可以控制进程的stdinstdoutstdin 只是一个可写流,你可以写入它并从stdout 读取输出。或者你可以找到一个使用给定算法、DES、AES 等生成哈希的 npm 模块。

    【讨论】:

    • 感谢您的提示,尤其是带有spawn 的提示,我将尝试实现该提示。我在通过 npm 模块生成哈希时非常失败,因为 crypt(3) 似乎实现了非标准的 DES 算法。
    猜你喜欢
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 2016-01-22
    • 1970-01-01
    相关资源
    最近更新 更多