CDH5.X安装配置kerberos认证过程

//CDH安装配置kerberos认证过程---coco

# by coco
# 2014-12-23

CDH-5.2.0-1.cdh5.2.0安装成功,已经运行了几个月了。现在把确实的认证安装配置上。下面是详细的安装配置过程,已经过程中遇到的问题解决办法。
1. 背景
在Hadoop1.0.0或者CDH3 版本之前, hadoop并不存在安全认证一说。默认集群内所有的节点都是可靠的,值得信赖的。用户与HDFS或者M/R进行交互时并不需要进行验证。导致存在恶意用户伪装成真正的用户或者服务器入侵到hadoop集群上,恶意的提交作业,修改JobTracker状态,篡改HDFS上的数据,伪装成NameNode 或者TaskTracker接受任务等。 尽管在版本0.16以后, HDFS增加了文件和目录的权限,但是并没有强认证的保障,这些权限只能对偶然的数据丢失起保护作用。恶意的用户可以轻易的伪装成其他用户来篡改权限,致使权限设置形同虚设。不能够对Hadoop集群起到安全保障。
在Hadoop1.0.0或者CDH3版本后,加入了Kerberos认证机制。使得集群中的节点就是它们所宣称的,是信赖的。Kerberos可以将认证的密钥在集群部署时事先放到可靠的节点上。集群运行时,集群内的节点使用密钥得到认证。只有被认证过节点才能正常使用。企图冒充的节点由于没有事先得到的密钥信息,无法与集群内部的节点通信。防止了恶意的使用或篡改Hadoop集群的问题,确保了Hadoop集群的可靠安全。

2. 安装过程(需要如下8个步骤)
Configuring a Kerberos 5 Server
When setting up Kerberos, install the KDC first. If it is necessary to set up slave servers, install the master first.
To configure the first Kerberos KDC, follow these steps:
1.确保正常时间同步和DNS配置Kerberos之前所有的客户机和服务器。特别注意Kerberos服务器和客户之间的时间同步。如果服务器和客户端之间的时间差大于5分钟(这是可配置Kerberos 5),Kerberos客户端不能到服务器进行身份验证。这个时间同步是必要的,以防止攻击者使用一个古老的Kerberos票据冒充合法用户。
建议建立一个网络时间协议(NTP)兼容的客户端/服务器网络即使Kerberos是没有被使用。Red Hat Enterprise Linux包括国家结核控制规划方案。指/usr/share/doc/ntp——<版本号> /索引。html(<版本号>是国家结核控制规划的版本号包安装在您的系统)的细节如何设置网络时间协议服务器,和http://www.ntp.org有关国家结核控制规划的更多信息。
2. 安装krb5-libs,krb5-server和krb5-workstation包在专用的机器上运行KDC。这台机器需要很安全——如果可能的话,它不应该运行KDC以外的任何服务。
3. 编辑/etc/krb5.conf和/var/kerberos/krb5kdc/kdc.conf配置文件反映了域名和domain-to-realm映射。一个简单的域可以被取代的实例构造的例子。COM和example.com使用正确的域名,一定保持大写和小写名称正确的格式,通过改变从kerberos.example.com KDC Kerberos服务器的名称。按照惯例,所有领域名称大写和DNS主机名和域名是小写的。关于这些配置文件格式的完整细节,请参考各自的手册页。
4. Create the database using the kdb5_util utility from a shell prompt:
/usr/kerberos/sbin/kdb5_util create -s
创建命令创建数据库存储Kerberos领域的钥匙。-s强制创建一个隐藏文件的主服务器密钥存储。如果没有存在隐藏文件的阅读的关键,Kerberos服务器(krb5kdc)提示用户的主服务器密码(可用于再生的关键)每次开始。
5. 编辑 /var/kerberos/krb5kdc/kadm5.acl文件,这个文件是用于kadmind使用这个文件来确定哪个最重要的管理者获得Kerberos数据库的访问级别。大多数组织可以靠一行:
*/admin@EXAMPLE.COM  *
大多数用户表示在数据库由一个主体(NULL或空的,实例,如joe@EXAMPLE.COM)。在这个配置中,用户与第二个主要管理的实例(例如,乔/ admin@EXAMPLE.COM)能够使用全功率领域的Kerberos数据库。
  
  kadmind服务器上已经开始后,任何用户都可以访问它的服务的任何客户机或服务器上运行的kadmin领域。然而,只有用户kadm5中列出。acl文件可以以任何方式修改数据库,除了更改自己的密码。
  请注意
  kadmin实用与kadmind服务器通过网络、通信和使用Kerberos来处理身份验证。因此,首先校长必须已经存在的连接到服务器之前通过网络来管理它。创建第一个和kadmin本金。本地命令,它是专门设计用于在同一个主机上KDC和不使用Kerberos身份验证。
以下的kadmin类型。本地命令创建第一个主KDC终端:  
/usr/kerberos/sbin/kadmin.local -q "addprinc username/admin"

6.Start Kerberos using the following commands:
/sbin/service krb5kdc start
/sbin/service kadmin start
/sbin/service krb524 start

7. 为用户添加主体使用addprinc命令。在kadmin.kadmin和kaadmin.local KDC的命令行接口。因此,许多命令——例如addprinc——发射后可用kadmin程序。指kadmin手册页获得更多信息。

8. 确认KDC发行彩票。首先,运行kinit获得一张票并将其存储在一个凭证高速缓存文件。接下来,使用列表中查看凭证在缓存中,并使用kdestroy破坏缓存和它所包含的凭证。
请注意
  默认情况下,kinit试图使用相同的系统登录验证用户名(不是Kerberos服务器)。如果用户名不对应于主要在Kerberos数据库中,kinit问题一条错误消息。如果出现这种情况,kinit提供正确的名称主要作为参数的命令行(kinit <主要>)。

1. 安装Kerberos。
⁠3.2. Installing Kerberos
Kerberos packages may be installed by default, but make sure that the appropriate packages are installed for the Kerberos server or client being configured.
To install packages for a Kerberos server:
# yum install krb5-server krb5-libs krb5-auth-dialog
To install packages for a Kerberos client:
# yum install krb5-workstation krb5-libs krb5-auth-dialog
If the Red Hat Enterprise Linux system will use Kerberos as part of single sign-on with smart cards, then also install the required PKI/OpenSSL package:
# yum install krb5-pkinit-openssl


//下载jce替换ocal_policy.jar and US_export_policy.jar files on each host by extracting the contents of the downloaded package into the $JAVA_HOME/jre/lib/security/ directory.
http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html    //下载完毕后,解压得到的如下.jar拷贝到java_home/jre/lib/security/文件目录下:
[root@master ~]# ll
总用量 16
-rw-rw-r-- 1 root root 3035 12月 21 2013 local_policy.jar
-rw-r--r-- 1 root root 7323 12月 21 2013 README.txt
-rw-rw-r-- 1 root root 3023 12月 21 2013 US_export_policy.jar
[root@master ~]# 
[root@master ~]# cp /root/UnlimitedJCEPolicyJDK8/*.jar /usr/java/default/jre/lib/security/

[root@slave1 ~]# yum install krb5-server krb5-libs krb5-auth-dialog   //安装server端 由于master服务器上放的服务比较多,现在把其中一个slave作为一个kerberos服务器。
//服务器端安装完毕后,在客户端安装如下对应的客户端。
[root@slave2 ~]#  yum install krb5-workstation krb5-libs krb5-auth-dialog
[root@master ~]#  yum install krb5-workstation krb5-libs krb5-auth-dialog

//修改/etc/krb5.conf
vim /etc/krb5.conf
[root@master ~]# cat /etc/krb5.conf 
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = master
dns_lookup_kdc = false
dns_lookup_realm = false
clockskew = 120
ticket_lifetime = 86400
renew_lifetime = 604800
forwardable = true
renewable = true

#default_tgs_enctypes = rc4-hmac
#default_tkt_enctypes = rc4-hmac
#permitted_enctypes = rc4-hmac
#udp_preference_limit = 1
[realms]
master = {
kdc = 192.168.8.94:88
admin_server = 192.168.8.94:749
}
[domain_realm]
[kdc]
profile=/var/kerberos/krb5kdc/kdc.conf

修改完毕后,拷贝到机器其他机器上。

//修改/var/kerberos/krb5kdc/kdc.conf
vim /var/kerberos/krb5kdc/kdc.conf
[root@master ~]# cat /var/kerberos/krb5kdc/kdc.conf 
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 master = {
  master_key_type = aes256-cts
  max_life = 25h
  max_renewable_life = 4w
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
  max_life = 24h
  max_renewable_life = 10d
  #default_principal_flags = +renewable, +forwardable
 }

//修改/etc/
[root@master ~]# vim /var/kerberos/krb5kdc/kadm5.acl
*/admin@master  *

以上三个文件配置完毕后,只需拷贝krb5.conf到集群中其他机器上即可。
[root@master ~]# scp /etc/krb5.conf slave1:/etc/
krb5.conf                                                                             100%  422     0.4KB/s   00:00    
[root@master ~]# scp /etc/krb5.conf slave2:/etc/
krb5.conf                                                                             100%  422     0.4KB/s   00:00    
[root@master ~]# 

//启动kdc服务器
/sbin/service krb5kdc start
/sbin/service kadmin start

//创建kerberos数据库 密码输入的是:123456
[root@master ~]#  /usr/sbin/kdb5_util create -r master -s
[root@master ~]#  kadmin.local     //创建远程管理的管理员账户
[root@master ~]# kadmin.local 
Authenticating as principal test/admin@master with password.
kadmin.local:  listprincs       //列出所有用户listprincs
K/M@master
hdfs/slave1@master
kadmin/admin@master
kadmin/changepw@master
kadmin/master@master
krbtgt/master@master
test@master
kadmin.local:  addprinc hadoop/admin@master   //创建测试用户hadoop
WARNING: no policy specified for wwn@master; defaulting to no policy
Enter password for principal "hadoop@master": 
Re-enter password for principal "hadoop@master": 
Principal "hadoop@master" created.
kadmin.local:  listprincs         //查看,最后一个wwn@master用户创建成功。  
K/M@master
hdfs/slave1@master
kadmin/admin@master
kadmin/changepw@master
kadmin/master@master
krbtgt/master@master
test@master
hadoop/admin@master
[root@master ~]# kinit hadoop     //测试:使用之前创建的wwn用户,输入密码后,没有报错即可。
Password for wwn@master: 
[root@master ~]# klist -e      //查看缓存的票据认购:可以看到,已经以hadoop@master登陆成功。
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hadoop@master

Valid starting     Expires            Service principal
12/26/14 08:24:48  12/27/14 08:24:48  krbtgt/master@master
        renew until 12/26/14 08:24:52, Etype (skey, tkt): arcfour-hmac, arcfour-hmac 
[root@master krb5kdc]# kinit hadoop
kinit: Client not found in Kerberos database while getting initial credentials
[root@master krb5kdc]# kinit hadoop/admin@master
Password for hadoop/admin@master: 
[root@master krb5kdc]# klist -e
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hadoop/admin@master

Valid starting     Expires            Service principal
01/05/15 11:16:56  01/06/15 11:16:56  krbtgt/master@master
        renew until 01/05/15 11:17:00, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96 

四、配置KDC
1.创建票据账号
[root@master ~]# kadmin.local 
addprinc -randkey hdfs/master@master
addprinc -randkey hdfs/slave1@master
addprinc -randkey hdfs/slave2@master
addprinc -randkey mapred/master@master
addprinc -randkey mapred/slave1@master
addprinc -randkey mapred/slave2@master
addprinc -randkey host/master@master
addprinc -randkey host/slave1@master
addprinc -randkey host/slave2@master

2.创建keytab 文件,该文件是包括票据账号+票据账号密码加密的密钥
[root@master ~]# kadmin.local 
xst -norandkey -k hdfs.keytab hdfs/master host/master
xst -norandkey -k hdfs.keytab hdfs/slave1 host/slave1
xst -norandkey -k hdfs.keytab hdfs/slave2 host/slave2
xst -norandkey -k mapred.keytab mapred/master host/master
xst -norandkey -k mapred.keytab mapred/slave1 host/slave1
xst -norandkey -k mapred.keytab mapred/slave2 host/slave2

3.验证
[root@master ~]# kinit -k -t /root/hdfs.keytab hdfs/master@master
没报错即可。

4. 将hdfs.keytab 和mapred.keytab 拷贝到集群的/usr/lib/hadoop-0.20/conf/
[root@master ~]# cp hdfs.keytab /etc/hadoop/conf/
[root@master ~]# cp mapred.keytab /etc/hadoop/conf/
[root@master conf]# chown hdfs:hadoop hdfs.keytab
[root@master conf]# chown mapred:hadoop mapred.keytab
[root@master conf]# chmod 400 ./*.keytab

五、配置hadoop  (手动配置比较复杂,需要修改如下文件。)
停止hadoop 集群

vim /etc/hadoop/conf/core-site.xml   //修改simple为:kerberos,把第二项的false更改为true
<property>
  <name>hadoop.security.authentication</name>
  <value>kerberos</value>
</property>
<property>
  <name>hadoop.security.authorization</name>
  <value>true</value> 

[root@master conf]# vim /etc/hadoop/conf/hdfs-site.xml


最后配置完成后查看生成的用户为:
[root@master ~]# kadmin.local 
Authenticating as principal root/admin@master with password.
kadmin.local:  listprincs
HTTP/master@master
HTTP/slave1@master
HTTP/slave2@master
K/M@master
hadoop/admin@master
hbase/master@master
hbase/slave1@master
hbase/slave2@master
hdfs/master@master
hdfs/slave1@master
hdfs/slave2@master
hive/master@master
host/master@master
host/slave1@master
host/slave2@master
httpfs/master@master
hue/master@master
impala/master@master
impala/slave1@master
impala/slave2@master
kadmin/admin@master
kadmin/changepw@master
kadmin/master@master
krbtgt/master@master
mapred/master@master
mapred/slave1@master
mapred/slave2@master
oozie/master@master
solr/master@master
solr/slave1@master
solr/slave2@master
spark/master@master
test@master
yarn/master@master
yarn/slave1@master
yarn/slave2@master
zookeeper/master@master
zookeeper/slave1@master
zookeeper/slave2@master


CDH配置步骤比较简单:需要如下8个步骤:分别截图如下:








整个过程完毕。








  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wulantian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值