2013-09-21 11 views
0

我想將用戶添加到運行我的節點應用程序的服務器。現在我使用:如何從節點內創建一個Ubuntu用戶

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

與得到由

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

這將使密碼在進程列表中可見創建一個哈希,而應該不惜一切代價避免。

這就是爲什麼我想知道在npm上是否有一個模塊或更容易的方式來以編程方式向系統添加linux用戶(這是必要的,因爲我正在構建的應用程序在用戶註冊時在系統上創建用戶帳戶在網上)。這可以不用像我現在正在做的那樣喚起系統命令呢?我沒有找到npm模塊,也沒有發現任何使用節點與ubuntu/unix用戶管理進行交互的信息。

解決方案

從頂部答案使用穆斯塔法的提示,我實現了一個版本使用spawnmkpasswd命令。在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

您可以使用這些命令或手動將您的用戶添加到/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,而不是執行。 stdin只是一個可寫的流,你可以寫入它並從stdout讀取輸出。或者你可以找到一個npm模塊,用給定算法,DES,AES等生成哈希。

+0

謝謝你的提示,特別是帶'spawn'的提示,我會嘗試實現那個。 因爲crypt(3)似乎實現了一個非標準的DES算法,所以我通過npm模塊生成散列失敗了。 – arvidkahl