TOP

Hadoop(二)---Hadoop集群的安全设置
2018-12-02 08:42:58 】 浏览:433
Tags:Hadoop ---Hadoop 集群 安全 设置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Wee_Mita/article/details/53945665

1.介绍

本文档描述如何在安全模式下配置Hadoop的身份验证。当Hadoop配置为以安全模式运行时,每个Hadoop服务和每个用户必须通过Kerberos进行身份验证。

必须正确配置所有服务主机的正向和反向主机查找,以允许服务彼此进行身份验证。可以使用DNS或/ etc / hosts文件配置主机查找。

Hadoop的安全特性包括认证服务级别授权Web控制台认证数据机密性

2.认证

2.1最终用户帐户

当启用服务级别身份验证时,最终用户必须在与Hadoop服务交互之前进行身份验证。最简单的方法是让用户使用Kerberos kinit命令进行交互式身份验证。当使用kinit的交互式登录不可行时,可以使用使用Kerberos keytab文件的程序化身份验证。

2.2Hadoop守护程序的用户帐户

确保HDFS和YARN后台驻留程序作为不同的Unix用户运行,例如hdfs和yarn。此外,请确保MapReduce JobHistory服务器以不同的用户身份运行,例如mapred。

建议他们共享一个Unix群组,例如hadoop。另请参阅“从用户映射到组”以进行组管理。

User:Group Daemons
hdfs:hadoop NameNode, Secondary NameNode, JournalNode, DataNode
yarn:hadoop ResourceManager, NodeManager
mapred:hadoop MapReduce JobHistory Server

2.3Hadoop守护程序的Kerberos主体

每个Hadoop服务实例必须配置其Kerberos主体和keytab文件位置。

服务主体的一般格式为ServiceName/_HOST@REALM.TLD。例如dn/_HOST@EXAMPLE.COM。

Hadoop通过允许将服务主体的主机名组件指定为_HOST通配符,简化了配置文件的部署。每个服务实例将在运行时用_HOST替换其自己的完全限定主机名。这允许管理员在所有节点上部署同一组配置文件。但是,keytab文件将不同。

HDFS

每个NameNode主机上的NameNode keytab文件应如下所示:

$ klist -e -k -t /etc/security/keytab/nn.service.keytab
Keytab name: FILE:/etc/security/keytab/nn.service.keytab
KVNO Timestamp         Principal
   4 07/18/11 21:08:09 nn/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 nn/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 nn/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)

该主机上的Secondary NameNode keytab文件应如下所示:

$ klist -e -k -t /etc/security/keytab/sn.service.keytab
Keytab name: FILE:/etc/security/keytab/sn.service.keytab
KVNO Timestamp         Principal
   4 07/18/11 21:08:09 sn/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 sn/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 sn/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)

每个主机上的DataNode keytab文件应如下所示:

$ klist -e -k -t /etc/security/keytab/dn.service.keytab
Keytab name: FILE:/etc/security/keytab/dn.service.keytab
KVNO Timestamp         Principal
   4 07/18/11 21:08:09 dn/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 dn/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 dn/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)

YARN

ResourceManager主机上的ResourceManager keytab文件应如下所示:

$ klist -e -k -t /etc/security/keytab/rm.service.keytab
Keytab name: FILE:/etc/security/keytab/rm.service.keytab
KVNO Timestamp         Principal
   4 07/18/11 21:08:09 rm/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 rm/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 rm/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)

每个主机上的NodeManager keytab文件应如下所示:

$ klist -e -k -t /etc/security/keytab/nm.service.keytab
Keytab name: FILE:/etc/security/keytab/nm.service.keytab
KVNO Timestamp         Principal
   4 07/18/11 21:08:09 nm/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 nm/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 nm/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)

MapReduce JobHistory Server

该主机上的MapReduce JobHistory Server keytab文件应如下所示:

$ klist -e -k -t /etc/security/keytab/jhs.service.keytab
Keytab name: FILE:/etc/security/keytab/jhs.service.keytab
KVNO Timestamp         Principal
   4 07/18/11 21:08:09 jhs/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 jhs/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 jhs/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-256 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (AES-128 CTS mode with 96-bit SHA-1 HMAC)
   4 07/18/11 21:08:09 host/full.qualified.domain.name@REALM.TLD (ArcFour with HMAC/md5)

3.从Kerberos主体映射到OS用户帐户

Hadoop使用hadoop.security.auth_to_local指定的规则将Kerberos主体映射到操作系统用户(系统)帐户。这些规则的工作方式与Kerberos配置文件(krb5.conf)中的auth_to_local相同。此外,Hadoop auth_to_local映射支持/ L标志,用于小写返回的名称。

如果领域与default_realm(通常在/etc/krb5.conf中定义)匹配,则默认选择主体名称的第一个组件作为系统用户名。例如默认规则将主机host/full.qualified.domain.name@REALM.TLD映射到系统用户主机。默认规则将不适用于大多数集群。

在典型的集群中,HDFS和YARN服务将分别作为系统hdfs和yarn用户启动。

hadoop.security.auth_to_local可以配置如下:

<property>
  <name>hadoop.security.auth_to_local</name>
  <value>
    RULE:[2:$1@$0](nn/.*@.*REALM.TLD)s/.*/hdfs/
    RULE:[2:$1@$0](jn/.*@.*REALM.TLD)s/.*/hdfs/
    RULE:[2:$1@$0](dn/.*@.*REALM.TLD)s/.*/hdfs/
    RULE:[2:$1@$0](nm/.*@.*REALM.TLD)s/.*/yarn/
    RULE:[2:$1@$0](rm/.*@.*REALM.TLD)s/.*/yarn/
    RULE:[2:$1@$0](jhs/.*@.*REALM.TLD)s/.*/mapred/
    DEFAULT
  </value>
</property>

可以使用hadoop kerbname命令测试自定义规则。此命令允许指定主体并应用Hadoop的当前auth_to_local规则集。

4.从用户映射到组

系统用户到系统组映射机制可以通过hadoop.security.group.mapping配置。有关详细信息,请参阅HDFS权限指南。

实际上,您需要在安全模式下使用Kerberos和LDAP为Hadoop管理SSO环境。

5.代理用户

一些产品,如Apache Oozie,代表最终用户访问Hadoop的服务需要能够模仿最终用户。有关详细信息,请参阅代理用户的文档。

6.安全DataNode

因为DataNode数据传输协议不使用Hadoop RPC框架,DataNode必须使用由dfs.datanode.addressdfs.datanode.http.address指定的特权端口进行身份验证。此身份验证基于以下假设:攻击者将无法在DataNode主机上获得root权限。

以root用户身份执行hdfs datanode命令时,服务器进程首先绑定特权端口,然后删除特权并以HADOOP_SECURE_DN_USER指定的用户帐户运行。此启动过程使用安装到JSVC_HOMEjsvc程序。您必须在启动时(在hadoop-env.sh中)指定HADOOP_SECURE_DN_USERJSVC_HOME作为环境变量。

从版本2.6.0起,SASL可用于验证数据传输协议。在此配置中,安全集群不再需要使用jsvc以root身份启动DataNode并绑定到特权端口。要启用SASL数据传输协议,请在hdfs-site.xml中设置dfs.data.transfer.protection,为dfs.datanode.address设置非特权端口,将dfs.http.policy设置为HTTPS_ONLY,并确保HADOOP_SECURE_DN_USER环境变量未定义。 请注意,如果dfs.datanode.address设置为特权端口,则不能在数据传输协议上使用SASL。 出于向后兼容性的原因,这是必需的。

为了迁移使用根认证开始使用SASL的现有集群,请首先确保已将2.6.0或更高版本部署到所有集群节点以及需要连接到集群的任何外部应用程序。只有HDFS客户端的2.6.0和更高版本可以连接到使用SASL进行数据传输协议认证的DataNode,因此在迁移之前所有调用者都必须具有正确的版本。在任何地方部署版本2.6.0或更高版本后,更新任何外部应用程序的配置以启用SASL。如果为SASL启用了HDFS客户端,则它可以成功连接到使用根认证或SASL认证运行的DataNode。更改所有客户端的配置可确保DataNodes上的后续配置更改不会中断应用程序。最后,可以通过更改其配置和重新启动来迁移每个单独的DataNode。在此迁移期间,可以混合使用一些以root身份验证运行的DataNode和一些以SASL身份验证运行的DataNode,因为启用了SASL的HDFS客户端可以连接到这两个。

7.数据机密性

7.1RPC上的数据加密

在hadoop服务和客户端之间传输的数据可以在线上加密。在core-site.xml中将hadoop.rpc.protection设置为privacy会激活数据加密。

7.2块数据传输上的数据加密

您需要在hdfs-site.xml中将dfs.encrypt.data.transfer设置为true,以便为DataNode的数据传输协议激活数据加密。

或者,您可以将dfs.encrypt.data.transfer.algorithm设置为3des或rc4,以选择特定的加密算法。如果未指定,则使用系统上配置的JCE默认值,这通常为3DES。

dfs.encrypt.data.transfer.ciphersuites设置为AES / CTR / NoPadding将激活AES加密。默认情况下,这是未指定的,因此不使用AES。当使用AES时,在初始密钥交换期间仍使用dfs.encrypt.data.transfer.algorithm中指定的算法。AES密钥位长度可以通过将dfs.encrypt.data.transfer.cipher.key.bitlength设置为128,192或256来配置。默认值为128

AES提供最大的加密强度和最佳性能。此时,3DES和RC4在Hadoop集群中更频繁地使用。

7.3HTTP上的数据加密

Web控制台和客户端之间的数据传输使用SSL(HTTPS)进行保护。建议使用SSL配置,但不需要使用Kerberos配置Hadoop安全性。

8.配置

8.1HDFS和本地文件系统路径的权限

下表列出了HDFS和本地文件系统(在所有节点上)上的各种路径和建议的权限:

Filesystem Path User:Group Permissions
local dfs.namenode.name.dir hdfs:hadoop drwx——
local dfs.datanode.data.dir hdfs:hadoop drwx——
local $HADOOP_LOG_DIR hdfs:hadoop drwxrwxr-x
local $YARN_LOG_DIR yarn:hadoop drwxrwxr-x
local yarn.nodemanager.local-dirs yarn:hadoop drwxr-xr-x
local yarn.nodemanager.log-dirs yarn:hadoop drwxr-xr-x
local container-executor root:hadoop –Sr-s–*
local conf/container-executor.cfg root:hadoop r——-*
hdfs / hdfs:hadoop drwxr-xr-x
hdfs /tmp hdfs:hadoop drwxrwxrwxt
hdfs /user hdfs:hadoop drwxr-xr-x
hdfs yarn.nodemanager.remote-app-log-dir yarn:hadoop drwxrwxrwxt
hdfs mapreduce.jobhistory.intermediate-done-dir mapred:hadoop drwxrwxrwxt
hdfs mapreduce.jobhistory.done-dir mapred:hadoop drwxr-x—

8.2Common 配置

为了在hadoop中打开RPC身份验证,将hadoop.security.authentication属性的值设置为“kerberos”,并正确设置下面列出的安全相关设置。

以下属性应在集群中所有节点的core-site.xml中。

Parameter Value Notes
hadoop.security.authentication kerberos simple:无认证。 (默认值)kerberos:启用Kerberos认证。
hadoop.security.authorization true 启用RPC服务级别授权
hadoop.rpc.protection authentication 认证:仅认证(默认);完整性:除了认证之外的完整性检查;隐私:数据加密除了完整性
hadoop.security.auth_to_local RULE:exp1 RULE:exp2 … DEFAULT 值为包含新行字符的字符串。有关exp的格式,请参阅Kerberos文档
hadoop.proxyuser.superuser.hosts 逗号分隔的允许超级用户访问的主机进行模拟。 *表示通配符。
hadoop.proxyuser.superuser.groups 由超级用户模拟的用户所属的逗号分隔组。 *表示通配符。

8.3NameNode

Parameter Value Notes
dfs.block.access.token.enable true 为安全操作启用HDFS块访问令牌。
dfs.namenode.kerberos.principal nn/_HOST@REALM.TLD NameNode的Kerberos主体名称。
dfs.namenode.keytab.file /etc/security/keytab/nn.service.keytab NameNode的Kerberos keytab文件。
dfs.namenode.kerberos.internal.spnego.principal HTTP/_HOST@REALM.TLD NameNode用于Web UI SPNEGO身份验证的服务器主体。 SPNEGO服务器主体以常规前缀HTTP /开头。 如果值为“*”,则Web服务器将尝试使用keytab文件dfs.web.authentication.kerberos.keytab中指定的每个主体登录。 对于大多数部署,可以将其设置为$ {dfs.web.authentication.kerberos.principal},即使用dfs.web.authentication.kerberos.principal的值。
dfs.web.authentication.kerberos.keytab /etc/security/keytab/spnego.service.keytab NameNode的SPNEGO keytab文件。在HA群集中,此设置与“日志节点”共享。

以下设置允许配置对NameNode Web UI的SSL访问(可选)。

Parameter Value Notes
dfs.http.policy HTTP_ONLY or HTTPS_ONLY or HTTP_AND_HTTPS HTTPS_ONLY关闭http访问。 此选项优先于已弃用的配置dfs.https.enable和hadoop.ssl.enabled。 如果使用SASL来验证数据传输协议,而不是以root用户身份运行DataNode并使用特权端口,则此属性必须设置为HTTPS_ONLY以保证HTTP服务器的身份验证。 (请参阅dfs.data.transfer.protection。)
dfs.namenode.https-address nn_host_fqdn:50470
dfs.https.port 50470
dfs.https.enable true 此值已弃用。 使用dfs.http.policy

8.4Secondary NameNode

Parameter Value Notes
dfs.namenode.secondary.http-address snn_host_fqdn:50090
dfs.secondary.namenode.keytab.file /etc/security/keytab/sn.service.keytab Secondary NameNode的Kerberos keytab文件。
dfs.secondary.namenode.kerberos.principal sn/_HOST@REALM.TLD Secondary NameNode的Kerberos主体名称。
dfs.secondary.namenode.kerberos.internal.spnego.principal HTTP/_HOST@REALM.TLD Secondary NameNode用于Web UI SPNEGO身份验证的服务器主体。 SPNEGO服务器主体以常规前缀HTTP /开头。 如果值为“*”,则Web服务器将尝试使用keytab文件dfs.web.authentication.kerberos.keytab中指定的每个主体登录。 对于大多数部署,可以将其设置为$ {dfs.web.authentication.kerberos.principal},即使用dfs.web.authentication.kerberos.principal的值。
dfs.namenode.secondary.https-port 50470

8.5JournalNode

Parameter Value Notes
dfs.journalnode.kerberos.principal jn/_HOST@REALM.TLD JournalNode的Kerberos主体名称。
dfs.journalnode.keytab.file /etc/security/keytab/jn.service.keytab JournalNode的Kerberos keytab文件。
dfs.journalnode.kerberos.internal.spnego.principal HTTP/_HOST@REALM.TLD 启用Kerberos安全时由JournalNode用于Web UI SPNEGO身份验证的服务器主体。 SPNEGO服务器主体以常规前缀HTTP /开头。 如果值为“*”,则Web服务器将尝试使用keytab文件dfs.web.authentication.kerberos.keytab中指定的每个主体登录。 对于大多数部署,可以将其设置为$ {dfs.web.authentication.kerberos.principal},即使用dfs.web.authentication.kerberos.principal的值。
dfs.web.authentication.kerberos.keytab /etc/security/keytab/spnego.service.keytab JournalNode的SPNEGO keytab文件。 在HA群集中,此设置与名称节点共享。

8.6DataNode

Parameter Value Notes
dfs.datanode.data.dir.perm 700
dfs.datanode.address 0.0.0.0:1004 安全DataNode必须使用特权端口,以确保服务器安全启动。 这意味着服务器必须通过jsvc启动。 或者,如果使用SASL来验证数据传输协议,则必须将其设置为非特权端口。 (请参阅dfs.data.transfer.protection。)
dfs.datanode.http.address 0.0.0.0:1006 安全DataNode必须使用特权端口,以确保服务器安全启动。 这意味着服务器必须通过jsvc启动。
dfs.datanode.https.address 0.0.0.0:50470
dfs.datanode.kerberos.principal dn/_HOST@REALM.TLD DataNode的Kerberos主体名称。
dfs.datanode.keytab.file /etc/security/keytab/dn.service.keytab DataNode的Kerberos keytab文件。
dfs.encrypt.data.transfer false 使用数据加密时设置为true
dfs.encrypt.data.transfer.algorithm 当使用数据加密来控制加密算法时,可选择设置为3des或rc4
dfs.encrypt.data.transfer.cipher.suites 可选择设置为AES / CTR / NoPadding,以在使用数据加密时激活AES加密
dfs.encrypt.data.transfer.cipher.key.bitlength 可选设置为128,192或256,以便在使用带数据加密的AES时控制密钥位长度
dfs.data.transfer.protection 认证:仅认证; 完整性:除了认证之外的完整性检查; privacy:除完整性之外的数据加密默认情况下未指定此属性。 设置此属性会启用SASL来验证数据传输协议。 如果启用,则dfs.datanode.address必须使用非特权端口,dfs.http.policy必须设置为HTTPS_ONLY,并且在启动DataNode进程时必须取消定义HADOOP_SECURE_DN_USER环境变量。

8.7WebHDFS

Parameter Value Notes
dfs.web.authentication.kerberos.principal http/_HOST@REALM.TLD WebHDFS的Kerberos主体名称。在HA群集中,此设置通常由JournalNodes用于使用SPNEGO安全访问JournalNode HTTP服务器。
dfs.web.authentication.kerberos.keytab /etc/security/keytab/http.service.keytab WebHDFS的Kerberos keytab文件。在HA群集中,此设置通常用于JournalNodes,用于使用SPNEGO安全地访问JournalNode HTTP服务器。

8.8ResourceManager

Parameter Value Notes
yarn.resourcemanager.principal rm/_HOST@REALM.TLD ResourceManager的Kerberos主体名称。
yarn.resourcemanager.keytab /etc/security/keytab/rm.service.keytab ResourceManager的Kerberos keytab文件。

8.9NodeManager

Parameter Value Notes
yarn.nodemanager.principal nm/_HOST@REALM.TLD NodeManager的Kerberos主体名称。
yarn.nodemanager.keytab /etc/security/keytab/nm.service.keytab NodeManager的Kerberos keytab文件。
yarn.nodemanager.container-executor.class org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor 使用LinuxContainerExecutor。
yarn.nodemanager.linux-container-executor.group hadoop Unix组的NodeManager。
yarn.nodemanager.linux-container-executor.path /path/to/bin/container-executor Linux容器执行程序的可执行文件的路径。

8.10Configuration for WebAppProxy

WebAppProxy在应用程序导出的Web应用程序和最终用户之间提供一个代理。如果启用了安全性,则会在访问可能不安全的Web应用程序之前警告用户。使用代理的身份验证和授权就像任何其他特权Web应用程序一样处理。

Parameter Value Notes
yarn.web-proxy.address WebAppProxy host:port for proxy to AM web apps. host:port如果这与yarn.resourcemanager.webapp.address相同,或者没有定义,那么ResourceManager将运行代理,否则需要启动独立的代理服务器。
yarn.web-proxy.keytab /etc/security/keytab/web-app.service.keytab WebAppProxy的Kerberos keytab文件。
yarn.web-proxy.principal wap/_HOST@REALM.TLD WebAppProxy的Kerberos主体名称。

8.11LinuxContainerExecutor

YARN框架使用的ContainerExecutor,它定义了任何容器的启动和控制方式。

以下是可用的Hadoop YARN:

ContainerExecutor Description
DefaultContainerExecutor YARN用于管理容器执行的默认执行程序。容器进程具有与NodeManager相同的Unix用户。
LinuxContainerExecutor 仅在GNU / Linux上支持,此执行程序作为提交应用程序的YARN用户(启用完全安全性时)运行容器,或在未启用完全安全性时作为专用用户(默认为nobody)运行容器。启用完全安全性后,此执行程序需要在启动容器的集群节点上创建所有用户帐户。它使用包含在Hadoop分发中的setuid可执行文件。 NodeManager使用此可执行文件启动和终止容器。 setuid可执行文件切换到已提交应用程序并启动或杀死容器的用户。为了最大的安全性,此执行程序设置容器使用的本地文件和目录的受限权限和用户/组所有权,例如共享对象,jar,中间文件,日志文件等。特别注意,因为这一点,除了应用程序所有者和NodeManager,没有其他用户可以访问任何本地文件/目录,包括作为分布式缓存的一部分本地化的本地文件/目录。

要构建LinuxContainerExecutor可执行文件,请运行:

 $ mvn package -Dcontainer-executor.conf.dir=/etc/hadoop/

Dcontainer-executor.conf.dir中传递的路径应该是集群节点上setuid可执行文件的配置文件所在的路径。可执行文件应安装在$ HADOOP_YARN_HOME / bin中。

可执行文件必须具有特定权限:6050或–Sr-s —用户由root(超级用户)拥有的权限和由特殊组(例如hadoop)拥有的组,其中NodeManager Unix用户是组成员 而没有普通的应用程序用户。 如果任何应用程序用户属于此特殊组,则安全性将受到影响。 应为conf / yarn-site.xml和conf / container-executor.cfg中的配置属性yarn.nodemanager.linux-container-executor.group指定此特殊组名。

例如,假设NodeManager作为用户yarn运行,它们是users和hadoop组的一部分,它们都是主组。 还让用户同时拥有yarn和另一个用户(应用程序提交者)alice作为其成员,并且alice不属于hadoop。 通过上面的描述,setuid / setgid可执行文件应设置为6050或–Sr-s —,用户所有者为yarn,组用户为hadoop,其中有yarn作为其成员(而不是有alice的用户 作为除纱线以外的成员)。

LinuxTaskController需要包含并导向到yarn.nodemanager.local-dirsyarn.nodemanager.log-dirs中指定的目录的路径,以设置755权限,如上面关于目录权限的表所述。

  • conf/container-executor.cfg

可执行文件需要一个名为container-executor.cfg的配置文件,以存在于传递给上述mvn目标的配置目录中。

配置文件必须由运行NodeManager的用户拥有(上例中的用户yarn),由任何人拥有的组拥有,并且应具有权限0400或r ——–。

可执行文件需要以下配置项才能出现在conf / container-executor.cfg文件中。这些项应该被提及为简单的键=值对,每行一个:

Parameter Value Notes
yarn.nodemanager.linux-container-executor.group hadoop Unix组的NodeManager。 container-executor二进制文件的组所有者应该是这个组。 应该与配置NodeManager的值相同。 此配置是验证container-executor二进制文件的安全访问所必需的。
banned.users hdfs,yarn,mapred,bin 禁止用户。
allowed.system.users foo,bar 允许的系统用户。
min.user.id 1000 防止其他超级用户。

要重新覆盖,这里是与LinuxContainerExecutor相关的各种路径所需的本地文件系统权限:

Filesystem Path User:Group Permissions
local container-executor root:hadoop –Sr-s–*
local conf/container-executor.cfg root:hadoop r——-*
local yarn.nodemanager.local-dirs yarn:hadoop drwxr-xr-x
local yarn.nodemanager.log-dirs yarn:hadoop drwxr-xr-x

8.12MapReduce JobHistory Server

Parameter Value Notes
mapreduce.jobhistory.address MapReduce JobHistory Server host:port 默认端口为10020。
mapreduce.jobhistory.keytab /etc/security/keytab/jhs.service.keytab MapReduce JobHistory服务器的Kerberos keytab文件。
mapreduce.jobhistory.principal jhs/_HOST@REALM.TLD MapReduce JobHistory Server的Kerberos主体名称。

9.多宿主

其中每个主机在DNS中具有多个主机名(例如,对应于公共和专用网络接口的不同主机名)的多宿主设置可能需要附加配置以使Kerberos认证工作。 请参阅HDFS对多宿主网络的支持

10.参考文献

  1. O’Malley O et al. Hadoop Security Design
  2. O’Malley O, Hadoop Security Architecture
  3. Troubleshooting Kerberos on Java 7
  4. Troubleshooting Kerberos on Java 8
  5. Java 7 Kerberos Requirements
  6. Java 8 Kerberos Requirements
  7. Loughran S., Hadoop and Kerberos: The Madness beyond the Gate

Hadoop(二)---Hadoop集群的安全设置 https://www.cppentry.com/bencandy.php?fid=114&id=193013

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hadoop+Hive+Mysql环境搭建 下一篇安装spark,基于hadoop的