2015-12-21 86 views

回答

1

它通常是儘可能使用單獨的專用服務帳戶不同的服務器進程很好的做法。這在攻擊者危害其中一個進程的情況下限制了攻擊面。例如,如果攻擊者破壞了進程A,那麼攻擊者可以執行諸如運行進程A的帳戶所擁有的訪問文件之類的東西。如果進程B使用與進程A相同的帳戶,那麼由進程B創建的文件也將被破壞。通過爲流程B使用單獨的帳戶,我們可以限制漏洞的影響。

除了這個一般原則之外,還有其他特定於Hadoop實施的考慮因素,因此希望使用單獨的帳戶。

HDFS有一個概念super-user。 HDFS超級用戶是運行NameNode進程的帳戶。超級用戶擁有運行HDFS管理命令和訪問HDFS中所有文件的特權,而不管這些文件的權限設置如何。 YARN和MapReduce守護進程不需要HDFS超級用戶權限。他們可以作爲HDFS的非特權用戶運行,只訪問他們有權限的文件。使用相同的帳戶運行所有內容會無意中提升YARN和MapReduce守護進程的權限。

在安全模式下運行時,YARN NodeManager利用LinuxContainerExecutor作爲提交YARN應用程序的用戶啓動容器進程。這可以通過使用特殊的setuid可執行文件來運行,該可執行文件允許運行NodeManager的用戶切換到以提交應用程序的用戶身份運行進程。這確保了提交應用程序的用戶不能通過在不同用戶帳戶的上下文中運行代碼來提升權限。但是,setuid可執行文件本身是功能強大的工具,如果使用不當,可能會導致特權升級問題。 LinuxContainerExecutor文檔描述了爲setuid可執行文件設置權限和配置的具體步驟。如果沒有單獨的帳戶用於運行YARN守護進程,那麼這個setuid可執行文件將不得不被更大的一組帳戶訪問,這會增加攻擊面。