Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何从节点内创建ubuntu用户_Node.js_Ubuntu_Npm_User Management - Fatal编程技术网

Node.js 如何从节点内创建ubuntu用户

Node.js 如何从节点内创建ubuntu用户,node.js,ubuntu,npm,user-management,Node.js,Ubuntu,Npm,User Management,我正在尝试向运行节点应用程序的服务器添加用户。现在我正在使用: exec("useradd -mp {password-hash}") 使用由 exec("mkpasswd -m des {password}") 这使得密码在进程列表中可见,因此应不惜一切代价避免使用 这就是为什么我想知道npm上是否有一个模块,或者是否有一种更简单的方法可以通过编程将linux用户添加到系统中(这是必要的,因为我正在构建的应用程序在用户在web上注册时会在系统上创建一个用户帐户)。这可以在不调用系统命令的情

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

exec("useradd -mp {password-hash}")
使用由

exec("mkpasswd -m des {password}")
这使得密码在进程列表中可见,因此应不惜一切代价避免使用

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

解决方案 使用顶部答案中的Mustafa提示,我使用
spawn
实现了一个版本的
mkpasswd
命令。在CoffeeScript中,它将如下所示:


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

您可以使用这些命令,也可以手动将用户添加到
/etc/passwd
,并将其密码添加到
/etc/shadow

/etc/passwd
条目的格式:
用户名:passwd:UID:GID:full\u名称:目录:shell

Passwd应该是x,如果您想让它安全,那么它将从shadow读取

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

如果添加正确,就不会有问题


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

感谢您提供的提示,特别是带有
spawn
的提示,我将尝试实现该模块。由于crypt(3)似乎实现了一个非标准的DES算法,我在通过npm模块生成散列时失败得很惨。
{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'