2015-12-21 89 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可执行文件将不得不被更大的一组帐户访问,这会增加攻击面。