通常,一个Hadoop集群的安全使用kerberos来进行保障。在启用Kerberos后,需要用户进行身份验证。用户通过验证后可以使用GRANT/REVOKE语句来进行基于角色的访问控制。本文介绍一下在CDH集群中如何配置kerberos。
1.KDC安装和配置脚本
脚本install_kerberos.sh可以完成kerberos服务器所有安装配置和相应的参数配置
1 1 #!/bin/bash 2 2 3 3 # 4 4 echo "ready to install and config kerberos" 5 5 6 6 # 使用root权限运行 7 7 cd /root 8 8 chmod 755 /etc 9 9 chmod 755 /etc/hadoop 1010 1111 # 安装kerberos组件 1212 yum install -y krb5-server 1313 yum install -y openldap-clients 1414 yum -y install krb5-workstation 1515 1616 # 在配置文件中更新域名和主机名 1717 1818 # 设置域名 1919 sed -i.orig 's/EXAMPLE.COM/CLOUDERA/g' /etc/krb5.conf 2020 # 设置kerberos server主机名 2121 sed -i.m1 's/kerberos.example.com/quickstart.cloudera/g' /etc/krb5.conf 2222 # 设置域名为cloudera 2323 sed -i.m2 's/example.com/cloudera/g' /etc/krb5.conf 2424 2525 # 从Oracle官网下载JDK到root目录 2626 2727 mkdir jce 2828 cd jce 2929 unzip ../UnlimitedJCEPolicyJDK7.zip 3030 # 保存原始jar文件做备份 3131 cp /usr/java/jdk1.7.0_67-cloudera/jre/lib/security/local_policy.jar local_policy.jar.orig 3232 cp /usr/java/jdk1.7.0_67-cloudera/jre/lib/security/US_export_policy.jar US_export_policy.jar.orig 3333 3434 # 将新的jar包拷贝进来 3535 cp /root/jce/UnlimitedJCEPolicy/local_policy.jar /usr/java/jdk1.7.0_67-cloudera/jre/lib/security/local_policy.jar 3636 cp /root/jce/UnlimitedJCEPolicy/US_export_policy.jar /usr/java/jdk1.7.0_67-cloudera/jre/lib/security/US_export_policy.jar 3737 3838 # 创建kerberos数据库 3939 echo suggested password is cloudera 4040 4141 kdb5_util create -s 4242 4343 # 更新kdc.conf 4444 sed -i.orig 's/EXAMPLE.COM/CLOUDERA/g' /var/kerberos/krb5kdc/kdc.conf 4545 # 票据文件中增加一行 4646 sed -i.m1 '/dict_file/a max_life = 1d' /var/kerberos/krb5kdc/kdc.conf 4747 # 增加可创建的最大文件数 4848 sed -i.m2 '/dict_file/a max_renewable_life = 7d' /var/kerberos/krb5kdc/kdc.conf 4949 # 将新增加的两行缩进 5050 sed -i.m3 's/^max_/ max_/' /var/kerberos/krb5kdc/kdc.conf 5151 5252 # acl文件需要admin权限 5353 sed -i 's/EXAMPLE.COM/CLOUDERA/' /var/kerberos/krb5kdc/kadm5.acl 5454 5555 # 修改kdc.conf文件 5656 sed -i.m3 '/supported_enctypes/a default_principal_flags = +renewable, +forwardable' /var/kerberos/krb5kdc/kdc.conf 5757 # 设置缩进 5858 sed -i.m4 's/^default_principal_flags/ default_principal_flags/' /var/kerberos/krb5kdc/kdc.conf 5959 6060 6161 # 启动krb5kdc和kadmin服务 6262 service krb5kdc start 6363 service kadmin start 6464 6565 kadmin.local <# cloudera-scm/admin@YOUR-LOCAL-REALM.COM 6666 6767 # 在集群中添加admin用户 6868 kadmin.local <
2.Cloudera Manager Kerberos配置
在运行脚本之后,我们现在拥有一个正在运行的Kerberos服务器,可以使用它来保护Hadoop集群。ClouderaManager封装了大部分工作,我们只需要配置一些参数值。
通过浏览器访问http://<your.cm.manager>:7180登录到Cloudera Manager。

直接进入管理> 安全>Kerberos,如下图所示

点击“启用Kerberos”按钮
列表中这四个选项全部已经由运行的脚本完成。然后选择“继续”。

Kerberos向导需要知道脚本的配置项的值。需要我们填写以下选项:
-
KDC服务器主机: <your_kdc_server>
-
Kerberos安全领域: <your_safe_realm>
-
Kerberos加密类型: aes256-cts-hmac-sha1-96
点击“继续”。

勾选通过Cloudera Manager管理krb5.conf。点击继续

输入创建的用户名和密码。点击继续,之后提示成功可需要重启集群。重启后我们就构建了一个使用kerberos进行安全保护的hadoop集群。
3.启动kerberos后集群使用方式
未开启kerberos时,hdfs用户是hdfs的超级用户,用户可以通过su hdfs来获取对hdfs操作的权限,启用kerberos后使用方式如下:
kinit hdfs@HADOOP
使用hdfs命令进行验证
1hadoop fs -mkdir /kongc 2hadoop fs -rmdir /kongc
使Kerberos·token无效
kdestroy
现在已经成功构建了一个正在运行的Kerberos集群!