准备环境
准备三台虚拟机,其中一台安装kerberos的KDC,另外两台安装kerberos的客户端,需要保证三台机器的主机名可以被解析。
主机名 | ip | 角色 |
---|---|---|
hadoop01 | 192.168.24.100 | KDC |
hadoop02 | 192.168.24.101 | Client |
hadoop03 | 192.168.24.102 | CLient |
安装Kerberos KDC
在hadoop01上安装运行KDC,即安装krb5-server、krb5-libs和krb5-workstation:
yum install krb5-server krb5-libs krb5-workstation krb5-auth-dialog
配置kdc.conf
默认文件位置/var/kerberos/krb5kdc/kdc.conf,也可修改KRB5_KDC_PROFILE环境变量修改该配置文件的位置。
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
HADOOP.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
max_renewable_life = 7d
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}
参数说明:
[kdcdefaults] 该组主要是用于配置全局信息,也就是kdc的默认值。
kdc_ports:kdc默认端口
kdc_tcp_ports:kdc默认的tcp端口
[realms] 该组配置项主要是用于配置每个域的具体信息。
HADOOP.COM:是设定的realms,名字随意。Kerberos可以支持多个realms,会增加复杂度。大小写敏感, 一般为了识别使用全部大写。这个realms跟机器的host没有大关系。
#master_key_type:和 supported_enctypes 默认使用aes256-cts。由于JAVA使用aes256-cts验证方式需要安装额外的jar包(后面再做说明)。不推荐使用,并且删除aes256-cts
acl_file:标注了admin的用户权限,需要用户自己创建。文件格式是:Kerberos_principal permissions
[target_principal] [restrictions]支持通配符。
admin_keytab:kdc进行校验的keytab。
max_renewable_life:ticket renwe的最大时间,涉及到是否能进行ticket的renwe,建议配置。
supported_enctypes:支持的校验方式,需要把aes256-cts去掉。
配置krb5.conf
默认文件位置/etc/krb5.conf
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/kerberos/krb5libs.log
kdc = FILE:/var/log/kerberos/krb5kdc.log
admin_server = FILE:/var/log/kerberos/kadmind.log
[libdefaults]
default_realm = HADOOP.COM
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
default_ccache_name = KEYRING:persistent:%{uid}
[realms]
HADOOP.COM = {
kdc = hadoop01
admin_server = hadoop01
}
[domain_realm]
.hadoop.com = HADOOP.COM
hadoop.com = HADOOP.COM
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
参数说明:
[logging] 这个组里面配置的是一些与日志存放路径相关的信息。
default:配置krb5libs日志存放路径
kdc:配置krb5kdc日志存放路径
admin_server:配置kadmin服务日志存放路径
[libdefaults] 在使用Kerberos时使用的默认值。
default_realm:默认的领域,当客户端在连接或者获取主体的时候,当没有输入领域的时候,该值为默认值(列如:使用kinit admin/admin 获取主体的凭证时,没有输入领域,而传到kdc服务器的时候,会变成 admin/admin@EXAMPLE.COM ),这个值需要在[realms]中定义,如果有多个领域,都需要在realms中定义。默认以大写书写。
dns_lookup_realm:与dns参数有关,猜测用于域名解析,默认是false,当设置为true时,dns参数才起作用,有关dns参数获取其他参数可以查看官方文档。
ticket_lifetime:获取到的票据存活时间,也就是该票据可以用多久,默认是1天。
renew_lifetime:票据可更新的时间,也就是说该票据可以延迟到期的天数。默认是7天。
forwardable:票据是否可以被kdc转发,默认是true。
rdns:在进行dns解析的时候,正反向都可以,默认是true,如果dns_canonicalize_hostname参数被设置为false,那么rdns这个参数将无效。
default_ccache_name:默认缓存的凭据名称,不推荐使用,当在客户端配置该参数的时候,会提示缓存错误信息。
[realms] 该组主要是配置领域相关的信息,默认只有一个,可以配置多个,如果配置多个(比如:HADOOP.COM, HBASE.COM),但是default_realm值定义为HADOOP.COM,那么客户端在获取与HBASE.COM相关的凭据时,需要指定具体的域名(比如客户端初始化凭据: kinit admin/admin@HBASE.COM)。
HADOOP.COM:域名,对应用kerberos来说就是领域。
kdc:kdc服务器地址。格式:(机器:端口),默认端口是88,可直接配置主机名,前提是主机名能够被解析。
admin_server:admin服务地址 格式:(机器:端口),默认端口749,可直接配置主机名,前提是主机名能够被解析。
[domain_realm] 指定DNS域名和Kerberos域名之间映射关系。指定服务器的FQDN,对应的domain_realm值决定了主机所属的域。
[kdc] kdc的配置信息,即指定kdc.conf的位置。
profile:kdc的配置文件路径,默认值下若无文件则需要创建。
初始化Kerberos database
/usr/sbin/kdb5_util create -s -r HADOOP.COM
-r 指定域名(也就是在krb5.conf文件[realms]组里面定义的域名)
-s 指定将数据库的主节点密钥存储在文件中,从而可以在每次启动KDC时自动重新生成主节点密钥
Kerberos database初始化好后,在/var/kerberos/krb5kdc目录下会生出这些文件:
kadm5.acl kdc.conf principal principal.kadm5 principal.kadm5.lock principal.ok
如果遇到数据库已经存在的提示,可以把 /var/kerberos/krb5kdc/ 目录下的 principal 的相关文件都删除掉。默认的数据库名字都是 principal。可以使用 -d 指定数据库名字。
添加database administrator
/usr/sbin/kadmin.local -q "addprinc admin/admin"
为database administrator设置ACL权限
该配置文件主要是用于管理员登陆的acl,配置格式:
Kerberos_principal permissions [target_principal] [restrictions]
编辑/var/kerberos/krb5kdc/kadm5.acl文件:
*/admin@HADOOP.COM *
代表名称匹配/admin@HADOOP.COM 都认为是admin,权限是* ,代表全部权限。
启动KDC
# service krb5kdc start
# service kadmin start
设置开机自启
# systemctl enable krb5kdc.service
# systemctl enable kadmin.service
安装Kerberos Client
yum -y install krb5-workstation krb5-libs krb5-auth-dialog
修改/etc/krb5.conf配置即可。
Kerberos常用命令
进入kerberos 控制台
kadmin.local
添加用户,生成实例add_principal, addprinc, ank
addprinc -randkey xxx@xxx.COM
为实例生成密钥文件
xst -k xxxx.keytab xxx@xxx.COM
或
kamin.local -q "xst -k xxx.keytab xxx@xxx.COM"
测试keytab可用性
kinit -kt /home/test.keytab test@HADOOP.COM
查看keytab 信息
klist -ekt /home/test.keytab
清除缓存
kdestroy
合并key
合并hadoop.keytab和HTTP.keytab为hdfs.keytab。
ktutil
rkt hadoop.keytab
rkt HTTP.keytab
wkt hdfs.keytab
删除用户delete_principal, delprinc
delprinc xxx@xxx.COM
修改用户密码change_password, cpw
cpw xxx@xxx.COM
查看所有用户list_principals, listprincs, get_principals, getprincs
listprincs
修改票据属性modify_principal, modprinc
modprinc -maxrenewlife 1week #修改票据可在一周内renew
查看票据信息get_principal, getprinc
getprinc xxx@xxx.COM
导出keytab文件ktadd, xst
xst -e aes128-cts-hmac-sha1-96:normal -k /home/xxx.keytab xxx@XXX.COM
-e 执定加密方式
-k 指定keytab文件名
注:导出keytab文件时会重新生成密码。kadmin.local模式下可添加参数'-norandkey',导出keytab文件时不重置密码。
egg: xst -norandkey -k /home/test.keytab xxx@XXX.COM