我在安全模式文档中阅读了Hadoop。现在,我所有的守护进程都在一个帐户下运行。Doc建议在不同的帐户下运行不同的守护进程。这样做的目的是什么?
发布于 2015-12-21 20:33:37
通常,在可能的情况下,为不同的服务器进程使用单独的专用服务帐户是很好的做法。这限制了攻击者破坏其中一个进程时的攻击面。例如,如果攻击者破坏进程A,则攻击者可以访问运行进程A的帐户所拥有的文件。如果进程B与进程A使用相同的帐户,则进程B创建的文件也会受到破坏。通过对进程B使用单独的帐户,我们可以限制漏洞的影响。
除了这一一般原则外,在实现Hadoop时还有其他特定的考虑因素,因此需要使用单独的帐户。
HDFS有一个超级用户的概念。HDFS超级用户是运行NameNode进程的帐户.超级用户拥有运行HDFS管理命令和访问HDFS中所有文件的特殊权限,而不管这些文件上的权限设置如何。纱线和MapReduce守护进程不需要HDFS超级用户权限.它们可以作为HDFS的非特权用户进行操作,只访问它们拥有权限的文件。使用同一个帐户运行所有东西都会无意中提升YARN和MapReduce守护进程的权限。
在安全模式下运行时,纱线NodeManager利用LinuxContainerExecutor作为提交纱线应用程序的用户启动容器进程。这是通过使用特殊的塞图德可执行文件来实现的,它允许运行NodeManager的用户切换到以提交应用程序的用户的身份运行进程。这确保提交应用程序的用户不能通过在不同用户帐户的上下文中运行代码来提升权限。但是,setuid可执行文件本身是强大的工具,如果使用不当,会导致权限提升问题。LinuxContainerExecutor文档描述了在设置这个setuid可执行文件的权限和配置时需要采取的非常具体的步骤。如果没有单独的帐户来运行纱线守护进程,那么这个setuid可执行文件必须被一组更大的帐户访问,这将增加攻击面。
https://stackoverflow.com/questions/34401524
复制相似问题