0

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

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

使用由创建的哈希

exec("mkpasswd -m des {password}")

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

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

解决方案

使用来自最佳答案的 Mustafa 的提示,我mkpasswd使用spawn. 在 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.stderr的错误处理事件处理程序。child.stdout

4

1 回答 1

1

您要么使用这些命令,要么手动将您的用户添加/etc/passwd/etc/shadow.

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

如果你想让它变得安全,Passwd 应该是 x,所以它会从影子中读取。

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

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

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

于 2013-09-21T23:11:52.863 回答