hadoop集群kerberos认证
时间: 2023-09-26 18:06:02 浏览: 194
Hadoop集群的Kerberos认证是在Hadoop1.0.0或者CDH3版本后引入的一种安全机制。它可以确保集群中的节点是可信的,并防止未经认证的节点与集群内部的节点通信。在集群部署时,Kerberos可以将认证的密钥预先放置在可信任的节点上。在集群运行时,节点使用这些密钥进行认证。只有通过认证的节点才能正常使用,并与其他节点进行通信。未经认证的节点由于没有获得密钥信息,无法与集群内的其他节点进行通信。因此,Kerberos认证可以防止恶意使用或篡改Hadoop集群,确保集群的可靠性和安全性。在Hadoop集群中启用Kerberos认证的方法是在core-site.xml文件中进行相应的配置,即将hadoop.security.authorization属性设置为true,并将hadoop.security.authentication属性设置为kerberos。这样,集群就可以使用Kerberos进行认证来确保安全性。
相关问题
hadoop集群kerberos认证怎么配置客户端
要配置Hadoop集群的Kerberos客户端认证,您可以按照以下步骤进行操作:
1. 在Hadoop集群的每个节点上,使用命令"hadoop org.apache.hadoop.security.HadoopKerberosName"来验证Kerberos身份。例如,执行命令"hadoop org.apache.hadoop.security.HadoopKerberosName hdfs/[email protected]"来验证hdfs用户的Kerberos身份。
2. 在krb5.conf文件中配置信任关系。可以通过设置capaths来定义信任关系。
3. 如果您的Hadoop集群需要与其他集群进行互操作,即使它们都开启了Kerberos认证,您还需要实现集群之间的互信关系。这可以通过使用一个集群的客户端访问另一个集群的服务来实现。在实际操作中,您需要使用Kerberos Realm A上的Ticket来访问Realm B上的服务。
请注意,这只是配置Hadoop集群的Kerberos客户端认证的基本步骤,具体配置可能因您的环境和需求而有所不同。建议您查阅Hadoop官方文档或相关资料以获取更详细的配置指南和示例。
Hadoop集群Kerberos安装
<think>我们正在处理一个关于在Hadoop集群中安装和配置Kerberos认证的问题。根据提供的引用内容,我们可以总结出以下步骤:
1. **在Kerberos KDC中创建必要的principal**:包括HDFS、YARN、MapReduce、Hive等服务的principal,以及HTTP服务的principal(因为Web UI也需要Kerberos认证)。例如:
- HDFS: `hdfs/<hostname>@REALM`
- YARN: `yarn/<hostname>@REALM`
- MapReduce JobHistory: `mapred/<hostname>@REALM`
- Hive: `hive/<hostname>@REALM`
- HTTP: `HTTP/<hostname>@REALM`
2. **生成keytab文件**:为每个principal生成keytab文件,并将keytab文件分发到对应的节点上,并设置适当的权限(通常为400,属主为对应的服务用户)。
3. **修改Hadoop配置文件**:在`core-site.xml`, `hdfs-site.xml`, `yarn-site.xml`等文件中配置Kerberos相关的属性。主要配置包括:
- 启用Kerberos认证:`hadoop.security.authentication`设置为`kerberos`
- 启用授权:`hadoop.security.authorization`设置为`true`
- 配置Kerberos的realm和KDC服务器地址(通常在`krb5.conf`中配置)
- 配置principal到本地用户的映射规则(`hadoop.security.auth_to_local`)
4. **配置环境变量**:在`hadoop-env.sh`中设置`KRB5_HOME`和`KRB5_CONFIG`环境变量,指向Kerberos客户端的安装路径和配置文件。
5. **配置HTTP认证**:由于Hadoop的Web UI使用HTTP SPNEGO认证,因此需要为每个节点生成HTTP的principal,并在`hdfs-site.xml`和`yarn-site.xml`中配置HTTP的principal和keytab文件位置。
6. **重启Hadoop服务**:配置完成后,需要重启Hadoop集群以使配置生效。
下面我们将按照这些步骤详细说明。
### 步骤1: 安装Kerberos KDC
如果还没有安装Kerberos KDC,需要在KDC服务器上安装Kerberos。这里假设已经安装好KDC,并且配置了realm(例如`HADOOP.CN`)。
### 步骤2: 创建Kerberos Principal和Keytab
在KDC服务器上,使用`kadmin`工具创建principal并生成keytab文件。以下是一些示例命令(请根据实际情况替换主机名和realm):
```bash
kadmin.local -q "addprinc -randkey hdfs/[email protected]"
kadmin.local -q "addprinc -randkey yarn/[email protected]"
kadmin.local -q "addprinc -randkey mapred/[email protected]"
kadmin.local -q "addprinc -randkey hive/[email protected]"
kadmin.local -q "addprinc -randkey HTTP/[email protected]"
# 生成keytab文件
kadmin.local -q "ktadd -k /etc/security/keytabs/hdfs.service.keytab hdfs/[email protected] HTTP/[email protected]"
kadmin.local -q "ktadd -k /etc/security/keytabs/yarn.service.keytab yarn/[email protected]"
kadmin.local -q "ktadd -k /etc/security/keytabs/mapred.service.keytab mapred/[email protected]"
kadmin.local -q "ktadd -k /etc/security/keytabs/hive.service.keytab hive/[email protected]"
kadmin.local -q "ktadd -k /etc/security/keytabs/HTTP.service.keytab HTTP/[email protected]"
```
然后将这些keytab文件复制到对应节点的`/etc/security/keytabs/`目录下,并设置权限:
```bash
chown hdfs:hadoop /etc/security/keytabs/hdfs.service.keytab
chmod 400 /etc/security/keytabs/hdfs.service.keytab
# 同理设置其他keytab的权限
```
### 步骤3: 配置Hadoop集群
#### 3.1 配置core-site.xml
```xml
<configuration>
<!-- 启用Kerberos认证 -->
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<!-- 启用授权 -->
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
<!-- 设置Kerberos realm -->
<property>
<name>hadoop.security.auth_to_local.mechanism</name>
<value>MIT</value>
</property>
<!-- 配置principal到本地用户的映射规则 -->
<property>
<name>hadoop.security.auth_to_local</name>
<value>
RULE:[2:$1/$2@$0]([ndj]n\/.*@HADOOP\.CN)s/.*/hdfs/
RULE:[2:$1/$2@$0]([rn]m\/.*@HADOOP\.CN)s/.*/yarn/
RULE:[2:$1/$2@$0](jhs\/.*@HADOOP\.CN)s/.*/mapred/
DEFAULT
</value>
</property>
</configuration>
```
#### 3.2 配置hdfs-site.xml
```xml
<configuration>
<!-- 配置NameNode的Kerberos principal -->
<property>
<name>dfs.namenode.kerberos.principal</name>
<value>hdfs/[email protected]</value>
</property>
<!-- 配置NameNode的keytab文件位置 -->
<property>
<name>dfs.namenode.keytab.file</name>
<value>/etc/security/keytabs/hdfs.service.keytab</value>
</property>
<!-- 配置DataNode的Kerberos principal -->
<property>
<name>dfs.datanode.kerberos.principal</name>
<value>hdfs/[email protected]</value>
</property>
<!-- 配置DataNode的keytab文件位置 -->
<property>
<name>dfs.datanode.keytab.file</name>
<value>/etc/security/keytabs/hdfs.service.keytab</value>
</property>
<!-- 配置HTTP Web UI的认证 -->
<property>
<name>dfs.web.authentication.kerberos.principal</name>
<value>HTTP/[email protected]</value>
</property>
<property>
<name>dfs.web.authentication.kerberos.keytab</name>
<value>/etc/security/keytabs/HTTP.service.keytab</value>
</property>
</configuration>
```
#### 3.3 配置yarn-site.xml
```xml
<configuration>
<!-- 配置ResourceManager的Kerberos principal -->
<property>
<name>yarn.resourcemanager.principal</name>
<value>yarn/[email protected]</value>
</property>
<!-- 配置ResourceManager的keytab文件位置 -->
<property>
<name>yarn.resourcemanager.keytab</name>
<value>/etc/security/keytabs/yarn.service.keytab</value>
</property>
<!-- 配置NodeManager的Kerberos principal -->
<property>
<name>yarn.nodemanager.principal</name>
<value>yarn/[email protected]</value>
</property>
<!-- 配置NodeManager的keytab文件位置 -->
<property>
<name>yarn.nodemanager.keytab</name>
<value>/etc/security/keytabs/yarn.service.keytab</value>
</property>
<!-- 配置Web UI的认证 -->
<property>
<name>yarn.web-proxy.principal</name>
<value>HTTP/[email protected]</value>
</property>
<property>
<name>yarn.web-proxy.keytab</name>
<value>/etc/security/keytabs/HTTP.service.keytab</value>
</property>
</configuration>
```
#### 3.4 配置mapred-site.xml
```xml
<configuration>
<!-- 配置MapReduce JobHistory Server的Kerberos principal -->
<property>
<name>mapreduce.jobhistory.principal</name>
<value>mapred/[email protected]</value>
</property>
<!-- 配置JobHistory Server的keytab文件位置 -->
<property>
<name>mapreduce.jobhistory.keytab</name>
<value>/etc/security/keytabs/mapred.service.keytab</value>
</property>
<!-- 配置Web UI的认证 -->
<property>
<name>mapreduce.jobhistory.webapp.kerberos.principal</name>
<value>HTTP/[email protected]</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.kerberos.keytab</name>
<value>/etc/security/keytabs/HTTP.service.keytab</value>
</property>
</configuration>
```
#### 3.5 配置hadoop-env.sh
在`hadoop-env.sh`中设置Kerberos环境变量:
```bash
export KRB5_HOME=/path/to/kerberos/client # 根据实际安装路径设置
export KRB5_CONFIG=$KRB5_HOME/etc/krb5.conf
```
### 步骤4: 分发配置和keytab文件
将修改后的配置文件以及keytab文件分发到集群的所有节点上,并确保每个节点上的keytab文件路径和权限正确。
### 步骤5: 重启Hadoop集群
按照Hadoop集群的启动顺序,先启动HDFS,再启动YARN和MapReduce JobHistory Server。
### 验证
使用`kinit`获取凭证,然后使用Hadoop命令访问集群,例如:
```bash
kinit -kt /etc/security/keytabs/hdfs.service.keytab hdfs/[email protected]
hdfs dfs -ls /
```
如果能够正常列出目录,则说明Kerberos认证配置成功。
### 注意事项
- 确保所有节点的时间同步(NTP),Kerberos对时间敏感。
- 确保`/etc/krb5.conf`文件在所有节点上配置正确,包括KDC和realm信息。
以上就是在Hadoop集群中安装和配置Kerberos认证的主要步骤[^1][^2][^3][^4]。
§§相关问题§§
1. Kerberos认证中常见的问题有哪些?
2. 如何为Hadoop集群中的Hive服务配置Kerberos认证?
3. 在Kerberos环境下,如何提交MapReduce作业?</think>### Hadoop集群安装与配置Kerberos认证指南
#### 1. Kerberos环境准备
- **安装KDC服务器**:在KDC节点执行
```bash
# CentOS示例
yum install krb5-server krb5-workstation
```
- **配置krb5.conf**(所有节点):
```ini
[libdefaults]
default_realm = HADOOP.CN
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
[realms]
HADOOP.CN = {
kdc = kdc-server.hadoop.cn
admin_server = kdc-server.hadoop.cn
}
```
#### 2. 创建Kerberos主体和Keytab
在KDC节点执行:
```bash
kadmin.local -q "addprinc -randkey hdfs/[email protected]"
kadmin.local -q "addprinc -randkey yarn/[email protected]"
kadmin.local -q "addprinc -randkey HTTP/[email protected]" # Web UI认证
kadmin.local -q "addprinc -randkey hive/[email protected]"
# 生成keytab文件
kadmin.local -q "ktadd -k /etc/security/keytabs/hdfs.service.keytab hdfs/[email protected]"
kadmin.local -q "ktadd -k /etc/security/keytabs/yarn.service.keytab yarn/[email protected]"
kadmin.local -q "ktadd -k /etc/security/keytabs/hive.service.keytab hive/[email protected]"
# 设置权限(所有节点)
chown hdfs:hadoop /etc/security/keytabs/hdfs.service.keytab
chmod 400 /etc/security/keytabs/*.keytab
```
#### 3. Hadoop核心配置
**core-site.xml**:
```xml
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
<property>
<name>hadoop.security.auth_to_local</name>
<value>
RULE:[2:$1/$2@$0]([ndj]n\/.*@HADOOP\.CN)s/.*/hdfs/
RULE:[2:$1/$2@$0]([rn]m\/.*@HADOOP\.CN)s/.*/yarn/
DEFAULT
</value>
</property>
```
**hdfs-site.xml**:
```xml
<property>
<name>dfs.namenode.kerberos.principal</name>
<value>hdfs/[email protected]</value>
</property>
<property>
<name>dfs.namenode.keytab.file</name>
<value>/etc/security/keytabs/hdfs.service.keytab</value>
</property>
<property>
<name>dfs.web.authentication.kerberos.principal</name>
<value>HTTP/[email protected]</value>
</property>
```
**yarn-site.xml**:
```xml
<property>
<name>yarn.resourcemanager.principal</name>
<value>yarn/[email protected]</value>
</property>
<property>
<name>yarn.resourcemanager.keytab</name>
<value>/etc/security/keytabs/yarn.service.keytab</value>
</property>
```
#### 4. 环境变量配置
**hadoop-env.sh**:
```bash
export KRB5_HOME=/usr/kerberos # 实际路径根据安装调整
export KRB5_CONFIG=/etc/krb5.conf
export HADOOP_OPTS="$HADOOP_OPTS -Djava.security.krb5.conf=/etc/krb5.conf"
```
#### 5. 启动与验证
1. **初始化Kerberos凭证**:
```bash
kinit -kt /etc/security/keytabs/hdfs.service.keytab hdfs/[email protected]
```
2. **启动HDFS**:
```bash
start-dfs.sh
```
3. **验证服务**:
```bash
hdfs dfsadmin -report # 需已获取有效kerberos ticket
```
4. **Web UI访问**:
浏览器访问`http://<namenode>:9870`,需配置支持SPNEGO的浏览器
#### 6. 常见问题排查
- **时钟偏差**:确保所有节点时间同步(NTP服务)
- **DNS解析**:所有节点必须能正确解析主机名
- **Keytab权限**:检查`ls -l /etc/security/keytabs`
- **日志检查**:查看`/var/log/hadoop-*/*.log`中的Kerberos错误
> **关键原理**:Kerberos通过票据授予票据(TGT)和服务票据(ST)实现三方认证,解决网络中的身份验证问题。其安全性基于对称加密和可信第三方(KDC)[^1][^2]。
阅读全文
相关推荐














