kerberos使用详解

准备环境

准备三台虚拟机,其中一台安装kerberos的KDC,另外两台安装kerberos的客户端,需要保证三台机器的主机名可以被解析。

主机名ip角色
hadoop01192.168.24.100KDC
hadoop02192.168.24.101Client
hadoop03192.168.24.102CLient

安装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
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值