如何从节点内创建ubuntu用户

时间:2013-09-21 20:51:24

标签: node.js ubuntu npm user-management

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

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.stderrchild.stdout添加正确的错误处理事件处理程序。

1 个答案:

答案 0 :(得分: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,它将从标准输入中读取密码。使用spawn时,您还可以控制进程的stdinstdout,而不是exec。 stdin只是一个可写流,您可以写入它并从stdout读取输出。或者你可以找到一个npm模块,它使用给定的算法,DES,AES等生成哈希值。