2011-05-15 18 views
8

想象執行兩個主要功能的網絡應用程序:在node.js中,我將如何遵循最低特權原則?

  1. 從需要更高特權從
  2. 讀取從需要權限讀取文件供應的數據的文件供應數據從

我的假設:要允許從這兩個文件讀取,我會ne編輯使用可以讀取這兩個文件的帳戶運行節點。

如果節點在可以訪問這兩個文件的帳戶下運行,那麼由於Web應用程序代碼中存在安全漏洞,無法讀取任何需要更高權限的文件的用戶可能會讀取這些文件。這將導致在我虛構的web應用程序世界中造成災難性後果

理想節點進程可以運行使用一組最小的權利,然後暫時訪問系統資源之前升級的權利。

問題: CAN節點暫時提升權限?或者,還有更好的方法?

轉發請求之前如果沒有,我正在考慮運行兩個不同的服務器(一個具有更高的權限,並具有較低),然後把它們都落後驗證代理服務器/授權。

謝謝。

+0

我認爲你更關心的是安全缺陷。如果你的代碼沒有安全漏洞,這不會成爲問題。 – Raynos 2011-05-15 18:17:39

+0

啊,是的,現在如果我能證明我的軟件沒有安全缺陷。 ;)http://c2.com/cgi/wiki?ProofOfCorrectness – 2011-05-15 19:48:46

+0

如果您需要驗證負載平衡器的兩個不同高架節點進程的負載均衡器,則無缺陷;) – Raynos 2011-05-15 20:33:45

回答

1

這確實是一個棘手的情況。最後文件權限是一種元數據。我的建議不是直接訪問文件,而是以數據庫表的形式在文件之間建立一些層,或者將用戶類型映射到文件的任何東西,以及如果文件存在則將文件流式傳輸給用戶。

這將意味着所謂的Web應用程序不能只是繞過文件系統的權限一樣容易。你甚至可以設置它,以便所述文件沒有服務器可讀的權限,而只能在兩者之間讀取。它所能做的只是撥打電話,並查看具有給定權限的用戶是否可以訪問這些文件。這可讓您在您選擇的多個Web應用程序之間共享。同樣因爲層之間的內容非常具體,您可以執行一組非常有限的調用。

現在,如果較低特權用戶以某種方式訪問​​較高特權用戶的帳戶,他們將能夠看到該文件,並且沒有辦法真正解決鎖定用戶帳戶的問題。然而這是開發過程的一部分。

0

不,我懷疑node.js-不在框中 - 可以保證最小權限。

可以想象,如果node.js以root身份運行,它可以通過系統調用來旋轉操作系統權限,以允許或限制對某些資源的訪問,但之後再以root身份運行將會破壞原始目標。

一個可能的解決方案可能運行節點的三個實例,一個代理(沒有特殊權限)來直接調用一個或其他兩臺服務器在不同權限級別運行。 (嘿,因爲你已經提了。我真的需要跳進了戰鬥之前閱讀到文章結尾!)

相關問題