1、环境说明 系统说明: 操作系统:centos 6.6 Hadoop版本:CDH 5.5 JDK版本: 1.7.0_67 kerberos安装的组件分配: 74作为master节点,其他
1、环境说明
系统说明:
- 操作系统:centos 6.6
- Hadoop版本:CDH 5.5
- JDK版本: 1.7.0_67
kerberos安装的组件分配:
74作为master节点,其他节点作为slave节点。我们在74节点安装kerberos Server,在其他节点安装kerberos client.
2、安装和配置kerberos
2.1安装kerberos
在74上安装包 krb5、krb5-server 和 krb5-client。
# yum install krb5-server -y
在其他节点(74、75、76、77)安装 krb5-devel、krb5-workstation:
# yum install krb5-devel krb5-workstation -y
2.2修改配置文件
kdc 服务器涉及到三个配置文件:
/etc/krb5.conf/var/kerberos/krb5kdc/kdc.conf/var/kerberos/krb5kdc/kadm5.acl
配置 Kerberos 的一种方法是编辑配置文件 /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 = BIGDATA.COM dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true clockskew = 120 udp_preference_limit = 1[realms] BIGDATA.COM = { kdc = bd-ops-test-74 admin_server = bd-ops-test-74 }[domain_realm] .bigdata.com = BIGDATA.COM bigdata.com = BIGDATA.COM
说明:
[logging]
:表示 server 端的日志的打印位置[libdefaults]
:每种连接的默认配置,需要注意以下几个关键的小配置default_realm = BIGDATA.COM
:设置 Kerberos 应用程序的默认领域。如果您有多个领域,只需向 [realms] 节添加其他的语句。ticket_lifetime
: 表明凭证生效的时限,一般为24小时。renew_lifetime
: 表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败。clockskew
:时钟偏差是不完全符合主机系统时钟的票据时戳的容差,超过此容差将不接受此票据。通常,将时钟扭斜设置为 300 秒(5 分钟)。这意味着从服务器的角度看,票证的时间戳与它的偏差可以是在前后 5 分钟内。udp_preference_limit= 1
:禁止使用 udp 可以防止一个 Hadoop 中的错误
[realms]
:列举使用的 realm。kdc
:代表要 kdc 的位置。格式是机器:端口
admin_server
:代表 admin 的位置。格式是机器:端口
[default_domain]
:代表默认的域名[appdefaults]
:可以设定一些针对特定应用的配置,覆盖默认配置。
修改 /var/kerberos/krb5kdc/kdc.conf
,该文件包含 Kerberos 的配置信息。例如,KDC 的位置,Kerbero 的 admin 的realms 等。需要所有使用的 Kerberos 的机器上的配置文件都同步。这里仅列举需要的基本配置。详细介绍参考:krb5conf
[kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88[realms] BIGDATA.COM = { #master_key_type = aes256-cts 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 default_principal_flags = +renewable, +forwardable max_renewable_life = 10d }
说明:
BIGDATA.COM
: 是设定的 realms。名字随意。Kerberos 可以支持多个 realms,会增加复杂度。大小写敏感,一般为了识别使用全部大写。这个 realms 跟机器的 host 没有大关系。master_key_type
:和supported_enctypes
默认使用aes256-cts
。JAVA 使用aes256-cts
验证方式需要安装 JCE 包,见下面的说明。为了简便,你可以不使用aes256-cts
算法,这样就不需要安装 JCE 。acl_file
:标注了 admin 的用户权限,需要用户自己创建。文件格式是:Kerberos_principal permissions [target_principal] [restrictions]
supported_enctypes
:支持的校验方式。admin_keytab
:KDC 进行校验的 keytab。
关于AES-256加密:
对于使用 centos5. 6 及以上的系统,默认使用 AES-256
来加密的。这就需要集群中的所有节点上安装 JCE,如果你使用的是 JDK1.6 ,则到 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for JDK/JRE 6 页面下载,如果是 JDK1.7,则到 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for JDK/JRE 7 下载。
下载的文件是一个 zip 包,解开后,将里面的两个文件放到下面的目录中:$JAVA_HOME/jre/lib/security
为了能够不直接访问 KDC 控制台而从 Kerberos 数据库添加和删除主体,请对 Kerberos 管理服务器指示允许哪些主体执行哪些操作。通过编辑文件 /var/lib/kerberos/krb5kdc/kadm5.acl 完成此操作。ACL(访问控制列表)允许您精确指定特权。
#cat kadm5.acl */[email protected] *
2.3同步配置文件
将 kdc 中的 /etc/krb5.conf
拷贝到集群中其他服务器即可。
# scp /etc/krb5.conf bd-ops-test-75:/etc/krb5.conf# scp /etc/krb5.conf bd-ops-test-76:/etc/krb5.conf# scp /etc/krb5.conf bd-ops-test-77:/etc/krb5.conf
2.4创建数据库
在 bd-ops-test-74 上运行初始化数据库命令。其中 -r
指定对应 realm。
# kdb5_util create -r BIGDATA.COM -s
出现 Loading random data
的时候另开个终端执行点消耗CPU的命令如 cat /dev/sda > /dev/urandom
可以加快随机数采集。该命令会在 /var/kerberos/krb5kdc/
目录下创建 principal 数据库。
如果遇到数据库已经存在的提示,可以把 /var/kerberos/krb5kdc/
目录下的 principal 的相关文件都删除掉。默认的数据库名字都是 principal。可以使用 -d
指定数据库名字。
2.5启动服务
在74节点上运行:
# chkconfig --level 35 krb5kdc on# chkconfig --level 35 kadmin on# service krb5kdc start# service kadmin start
2.6创建kerberos管理员
关于 kerberos 的管理,可以使用 kadmin.local
或 kadmin
,至于使用哪个,取决于账户和访问权限:
- 如果有访问 kdc 服务器的 root 权限,但是没有 kerberos admin 账户,使用
kadmin.local
- 如果没有访问 kdc 服务器的 root 权限,但是用 kerberos admin 账户,使用
kadmin
在 74 上创建远程管理的管理员:
#手动输入两次密码,这里密码为 bigdata# kadmin.local -q "addprinc root/admin"
密码务必记住,妥善保存。
2.7 kerberos基本操作
查看当前的认证用户:
# 查看principals$ kadmin: list_principals # 添加一个新的 principal kadmin: addprinc user1 WARNING: no policy specified for [email protected]; defaulting to no policy Enter password for principal "[email protected]": Re-enter password for principal "[email protected]": Principal "[email protected]" created. # 删除 principal kadmin: delprinc user1 Are you sure you want to delete the principal "[email protected]"? (yes/no): yes Principal "[email protected]" deleted. Make sure that you have removed this principal from all ACLs before reusing. kadmin: exit
也可以直接通过下面的命令来执行:
# 提示需要输入密码$ kadmin -p root/admin -q "list_principals"$ kadmin -p root/admin -q "addprinc user2"$ kadmin -p root/admin -q "delprinc user2"# 不用输入密码$ kadmin.local -q "list_principals"$ kadmin.local -q "addprinc user2"$ kadmin.local -q "delprinc user2"
创建一个测试用户 test,密码设置为 test:
# echo -e "test/ntest" | kadmin.local -q "addprinc test"
获取 test 用户的 ticket:
#kinit testPassword for [email protected]: #klist -eTicket cache: FILE:/tmp/krb5cc_0Default principal: [email protected] starting Expires Service principal09/02/16 16:43:50 09/03/16 16:43:50 krbtgt/[email protected] renew until 09/02/16 16:43:50, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96
销毁该 test 用户的 ticket:
#kdestroy #klist klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0)
更新 ticket:
# kinit -R
查看keytab文件详情:
klist -k /etc/krb5.keytab Keytab name: FILE:/etc/krb5.keytab KVNO Principal ---- -------------------------------------------------------------------------- 3 kadmin/[email protected] 3 kadmin/[email protected] 3 kadmin/[email protected] 3 kadmin/[email protected] 3 kadmin/[email protected]