1、Kerberos主从配置文档1. Kerberos主从同步机制2. 搭建 Kerberos3.1 环境我们在两个备用NameNode节点上实现Kerberos主从,并在其它需要接入认证的主机上安装Kerberos客户端。 操作系统:CentOS 6.7/RedHart 6.7 运行用户:root3.2 安装包我们是基于RedHart 6.7/CentOS 6.7操作系统,相关Kerberos安装包可在系统包中获取,相关rpm包列表如下:krb5-app1-clients*.rpmkrb5-libs*.rpmkrb5-app1-servers*.rpmkrb5-pkinit-openssl*.r
2、pmkrb5-auth-dialog*.rpmkrb5-server*.rpmkrb5-dev1*.rpmkrb5-server-ldap*.rpmkrb5-workstation*.rpm3.2 安装过程3.2.1 准备工作确认添加主机名解析到 /etc/hosts 文件中。Master111.111.241.210Slave111.111.241.211Krb5kdcKadminkpropd在Master上通过以下命令同步数据:kdb5_util dump /var/kerberos/krb5kdc/slave_dbkprop -f /var/kerberos/krb5kdc/slave_
3、db $ cat /etc/hosts127.0.0.1 localhost111.111.241.210 - master KDC111.111.241.211 - slave KDC注意: hostname 请请 使用小写,要不然在集成使用小写,要不然在集成 kerberos 时时 会出会出 现现 一些一些 错误错误。3.2.2 安装 kdc server在 KDC (这里是master 和 slave) 上安装包 krb5、krb5-server 和 krb5-client。rpm -ivh krb5-server*.rpmrpm ivh krb5-libs*.rpmrpm -ivh
4、 krb5-auth-dialog*.rpmrpm -ivh krb5-workstation*.rpm在其他节点(kerberos 所有认证客户端)安装 krb5-libs 、krb5-workstation rpm ivh krb5-libs*.rpmrpm -ivh krb5-workstation*.rpm3.2.3 修改配置文件kdc 服务器涉及到三个配置文件:/etc/krb5.conf/var/kerberos/krb5kdc/kdc.conf/var/kerberos/krb5kdc/kadm5.acl配置 Kerberos 的一种方法是编辑配置文件 /etc/krb5.con
5、f。默认安装的文件中包含多个示例项。$ cat /etc/krb5.confloggingdefault = FILE:/var/log/krb5libs.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.loglibdefaultsdefault_realm = HADOOP.COMdns_lookup_realm = falsedns_lookup_kdc = falseclockskew = 120ticket_lifetime = 24hrenew_lifetime = 7dforwardabl
6、e = truerenewable = trueudp_preference_limit = 1default_tgs_enctypes = arcfour-hmacdefault_tkt_enctypes = arcfour-hmacrealmsHADOOP.COM = kdc = :88kdc = :88admin_server = :749domain_ = HADOOP.COM = HADOOP.COMkdcprofile=/var/kerberos/krb5kdc/kdc.conf说明: logging:表示 server 端的日志的打印位置 libdefaults:每种连接的默认配
7、置,需要注意以下几个关键的小配置 default_realm = HADOOP.COM:设置 Kerberos 应用程序的默认领域。如果您有多个 领域,只需向 realms 节添加其他的语句。 udp_preference_limit= 1:禁止使用 udp 可以防止一个Hadoop 中的错误 clockskew:时钟 偏差是不完全符合主机系统时钟的票据时戳的容差,超过此容差将不接受此票据。通常,将时钟扭斜设置为 300 秒( 5 分钟)。这意味着从服务器的角度看,票 证的时间戳与它的偏差可以是在前后 5 分钟内。 ticket_lifetime: 表明凭证生效的时限,一般为24小时。 ren
8、ew_lifetime: 表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后, 对安全认证的服务的后续访问则会失败。 realms:列举使用的 realm 。 kdc:代表要 kdc 的位置。格式是 机器:端口 admin_server:代表 admin 的位置。格式是 机器: 端口 default_domain:代表默认的域名 appdefaults:可以设定一些 针对特定应用的配置,覆盖默 认配置。修改 /var/kerberos/krb5kdc/kdc.conf ,该文件包含 Kerberos 的配置信息。例如, KDC 的位置,Kerbero 的 admin 的realms
9、等。需要所有使用的 Kerberos 的机器上的配置文件都同步。这里仅列举需要的基本配置。详细参考:http:/web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html$ cat /var/kerberos/krb5kdc/kdc.confkdcdefaultsv4_mode = nopreauthkdc_ports = 88kdc_tcp_ports = 88realmsHADOOP.COM = master_key_type = aes256-ctsacl_file = /var/kerberos/krb5kdc
10、/kadm5.acldict_file = /usr/share/dict/wordsadmin_keytab = /var/kerberos/krb5kdc/kadm5.keytabsupported_enctypes = des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc-crc:afs3max_life = 24hmax_renewable_life = 10ddefault_principal
11、_flags = +renewable, +forwardable说明: HADOOP.COM: 是设定的 realms 。名字随意。 Kerberos 可以支持多个 realms,会增加复杂度。大小写敏感,一般为了识别使用全部大写。这个 realms 跟机器的 host 没有大关系。 master_key_type:和 supported_enctypes 默认使用 aes256-cts。由于,JAVA 使用 aes256-cts 验证 方式需要安装额外的 jar 包(后面再做说明)。推荐不使用,并且删除 aes256-cts。 acl_file:标注了 admin 的用户权限,需要用 户自
12、己 创建。文件格式是: Kerberos_principal permissions target_principal restrictions supported_enctypes:支持的校验方式。 admin_keytab:KDC 进行校验的 keytab 。关于AES-256 加密:对于使用 centos5. 6及以上的系统,默认使用 AES-256 来加密的。这就需要集群中的所有节点上安装 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File。下载的文件是一个 zip 包,解开后,将里
13、面的两个文件放到下面的目录中:$JAVA_HOME/jre/lib/security为了能够不直接访问 KDC 控制台而从 Kerberos 数据 库添加和删除主体,请对 Kerberos 管理服务器指示允许哪些主体执行哪些操作。通过编辑文件 /var/lib/kerberos/krb5kdc/kadm5.acl 完成此操作。 ACL(访问控制列表)允许您精确指定特权。$ cat /var/kerberos/krb5kdc/kadm5.acl*/adminHADOOP.COM *3.2.4 同步配置文件将 kdc 中的 /etc/krb5.conf 拷贝到集群中其他服务器即可。$ scp /e
14、tc/krb5.conf hods-d01:/etc/krb5.conf$ scp /etc/krb5.conf hods-d02/etc/krb5.conf$ scp /etc/krb5.conf hods-d03:/etc/krb5.conf请确认集群如果关闭了 selinux。3.2.5 创建数据库在 cdh1 上运行初始化数据库命令。其中 -r 指定对应 realm。$ kdb5_util create -r HADOOP.COM -s出现 Loading random data 的时 候另开个终端执行点消耗 CPU的命令如 cat /dev/sda /dev/urandom 可以加快
15、随机数采集。该命令会在 /var/kerberos/krb5kdc/ 目录下创建 principal 数据库。如果遇到数据库已经存在的提示,可以把 /var/kerberos/krb5kdc/ 目录下的 principal 的相关文件都删除掉。默认的数据库名字都是 principal。可以使用 -d 指定数据库名字。3.2.6 启动服务在 master 节点上运行:$ chkconfig -level 35 krb5kdc on$ chkconfig -level 35 kadmin on$ service krb5kdc start$ service kadmin start3.2.7 创建
16、 kerberos 管理员关于 kerberos 的管理,可以使用 kadmin.local 或 kadmin,至于使用哪个,取决于 账户和访问权限: 如果有访问 kdc 服务器的 root 权限,但是没有 kerberos admin 账户,使用 kadmin.local 如果没有访问 kdc 服务器的 root 权限,但是用 kerberos admin 账户,使用 kadmin在 master 上创建远程管理的管理员:#手 动输 入两次密 码 ,这 里密 码为 root$ kadmin.local -q “addprinc root/admin“# 也可以不用手 动输 入密 码$ ech
17、o -e “rootnroot“ | kadmin.local -q “addprinc root/admin“系统会提示输入密码,密码不能为空,且需妥善保存3.2.8 Slave KDC配置1 创建host keytab 文件在master服务器上rootkerberos # kadminkadmin: addprinc -randkey host/ #添加principalkadmin:ktadd host/ #生成keytab文件在slave服务器上rootkerberos2 # kadminkadmin: addprinc -randkey host/ #添加principalkadm
18、in: ktadd host/ #生成keytab文件2 将master 上的几个文件拷贝到从服务器文件: krb5.conf、kdc.conf、 kadmin5.acl、master key stash filerootkerberos # scp /etc/krb5.conf kerberos2:/etc/.rootkerberos # cd /var/kerberos/krb5kdcrootkerberos # scp kdc.conf kadmin5.acl .k5.HADOOP.COMKerberos2:/var/kerberos/krb5kdc/.3 在slave服务器上创建kpr
19、opd.acl文件rootkerberos2 # touch /var/kerberos/krb5kdc/kpropd.acl添加如下内容:host/HADOOP .COMhost/HADOOP .COM4 在slave上启动kpropd服务rootkerberos2 # kpropd S至此,slave上的kdc服务还不能启动,因为无 kdc的database数据5 在master 上将相关数据同步到slave上rootkerberos #kdb5_util dump /var/kerberos/krb5kdc/slave_datatransrootkerberos #kprop -f /v
20、ar/kerberos/krb5kdc/slave_db 成功后,会出现以下信息:Database propagation to : SUCCEEDED以上命令,可以封装成一个bash,定 时运行,即定时更新slave 上的database 。6 slave上/var/kerberos/krb5kdc/会多出一些文件,如:from_master、principal、pricipal.kadm5、principal.kadmin5.lock、 principal.ok至此,可以启动slave上的kdc服务7 测试主从是否生效1)从第三台服务器,使用kinit 获取ticket,正常情况下会从ma
21、ster上获取2)关闭master上的kdc服务3)再次从第三台服务器上,使用kinit 获取ticket,如果成功,说明生效。也可以观察kdc 的日志,在 /var/log/krb5kdc.log3.2.9 测试 kerberos查看当前的认证用户:# 查 看 principals$ kadmin: list_principals# 添加一个新的 principalkadmin: addprinc testWARNING: no policy specified for user1JAVACHEN.COM; defaulting to no policyEnter password for
22、principal “testHADOOP.COM“:Re-enter password for principal “testJHADOOP.COM“:Principal “testHADOOP.COM“ created.# 删 除 principalkadmin: delprinc testAre you sure you want to delete the principal “testHADOOP.COM“? (yes/no): yesPrincipal “testHADOOP.COM“ deleted.Make sure that you have removed this pri
23、ncipal from all ACLs before reusing.kadmin: exit也可以直接通过下面的命令来执行:# 提示需要 输 入密 码$ kadmin -p root/admin -q “list_principals“$ kadmin -p root/admin -q “addprinc test“$ kadmin -p root/admin -q “delprinc test“# 不用 输 入密 码$ kadmin.local -q “list_principals“$ kadmin.local -q “addprinc test“$ kadmin.local -q “
24、delprinc test“创建一个测试用户 test,密码设置为 test:$ echo -e “testntest“ | kadmin.local -q “addprinc test“获取 test 用户的 ticket:# 通 过 用 户 名和密 码进 行登 录$ kinit testPassword for testJAVACHEN.COM:a$ klist -eTicket cache: FILE:/tmp/krb5cc_0Default principal: testJAVACHEN.COMValid starting Expires Service principal11/07/
25、14 15:29:02 11/08/14 15:29:02 krbtgt/JAVACHEN.COMJAVACHEN.COMrenew until 11/17/14 15:29:02, Etype (skey, tkt): AES-128 CTS mode with 96-bit SHA-1 HMAC, AES-128 CTS mode with 96-bit SHA-1 HMACKerberos 4 ticket cache: /tmp/tkt0klist: You have no tickets cached销毁该 test 用户的 ticket:$ kdestroy$ klistklist
26、: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0)Kerberos 4 ticket cache: /tmp/tkt0klist: You have no tickets cached更新 ticket:$ kinit root/adminPassword for root/adminJAVACHEN.COM:$ klistTicket cache: FILE:/tmp/krb5cc_0Default principal: root/adminJAVACHEN.COMValid starting Expires Serv
27、ice principal11/07/14 15:33:57 11/08/14 15:33:57 krbtgt/JAVACHEN.COMJAVACHEN.COMrenew until 11/17/14 15:33:57Kerberos 4 ticket cache: /tmp/tkt0klist: You have no tickets cached$ kinit -R$ klistTicket cache: FILE:/tmp/krb5cc_0Default principal: root/adminJAVACHEN.COMValid starting Expires Service pri
28、ncipal11/07/14 15:34:05 11/08/14 15:34:05 krbtgt/JAVACHEN.COMJAVACHEN.COMrenew until 11/17/14 15:33:57Kerberos 4 ticket cache: /tmp/tkt0klist: You have no tickets cached抽取密钥并将其储存在本地 keytab 文件 /etc/krb5.keytab 中。这个文件由超级用户拥有,所以您必 须是 root 用户才能在 kadmin shell 中执行以下命令:$ kadmin.local -q “ktadd kadmin/admin“$ klist -k /etc/krb5.keytabKeytab name: FILE:/etc/krb5.keytabKVNO Principal- -3 kadmin/adminHADOOP.COM3 kadmin/adminHADOOP .COM3 kadmin/adminHADOOP .COM3 kadmin/adminHADOOP .COM3 kadmin/adminHADOOP .COM3.2.10 CDH集群启用kerberos(略)