我在安全模式文档中阅读了Hadoop。现在我的所有守护进程都在一个帐户下运行。 Doc建议在不同的帐户下运行不同的守护进程。这样做的目的是什么?
答案 0 :(得分: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可执行文件,这会增加攻击面。