CDH-5.2.0-1.cdh5.2.0安装成功,已经运行了几个月了。如今把确实的认证安装配置上。下面是详细的安装配置过程,已通过程中遇到的问题解决办法。html
1. 背景java
在Hadoop1.0.0或 者CDH3 版本以前, hadoop并不存在安全认证一说。默认集群内全部的节点都是可靠的,值得信赖的。用户与HDFS或者M/R进行交互时并不须要进行验证。致使存在恶意用 户假装成真正的用户或者服务器入侵到hadoop集群上,恶意的提交做业,修改JobTracker状态,篡改HDFS上的数据,假装成NameNode 或者TaskTracker接受任务等。 尽管在版本0.16之后, HDFS增长了文件和目录的权限,可是并无强认证的保障,这些权限只能对偶然的数据丢失起保护做用。恶意的用户能够轻易的假装成其余用户来篡改权限,致 使权限设置形同虚设。不可以对Hadoop集群起到安全保障。shell
在Hadoop1.0.0或 者CDH3版本后,加入了Kerberos认证机制。使得集群中的节点就是它们所宣称的,是信赖的。Kerberos能够将认证的密钥在集群部署时事先放 到可靠的节点上。集群运行时,集群内的节点使用密钥获得认证。只有被认证过节点才能正常使用。企图冒充的节点因为没有事先获得的密钥信息,没法与集群内部 的节点通讯。防止了恶意的使用或篡改Hadoop集群的问题,确保了Hadoop集群的可靠安全。数据库
2. 安装过程(须要以下8个步骤)vim
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
4、配置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
5、配置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个步骤:分别截图以下:
整个过程完毕。