Kerberos始于20世纪80年代早期麻省理工学院(MIT)的一个研究项目,是一个网络身份验证系统。Kerberos提供的完整定义是安全的、单点登录的、可信的第三方相互身份验证服务。
Principal的形式为:主名称/实例名@领域名。
主名称可以是用户名或者服务名,标识用于提供各种网络服务(比如hdfs、hive);
实例名,对于用户主体,实例名是可选的,对于服务主体,实例则是必须的。
只需要在一台服务器上安装,如果提示没权限使用sudo安装
yum -y install krb5-libs krb5-workstation krb5-server
集群中每台节点都必须要安装客户端,如果提示没权限使用sudo安装
yum -y install krb5-libs krb5-workstation
默认路径:/var/kerberos/krb5kdc/
sudo vi /var/kerberos/krb5kdc/kdc.conf
默认配置文件:
[kdcdefaults]
kdc_ports = 88 # kdc 端口
kdc_tcp_ports = 88 #kdc通信端口
[realms]
EXAMPLE.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 camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}
修改后的配置文件:
[kdcdefaults]
kdc_ports = 88 # kdc 端口
kdc_tcp_ports = 88 #kdc通信端口
[realms]
HADOOP.COM = {
#master_key_type = aes256-cts
max_renewable_life = 7d 0h 0m 0s
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = 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
}
说明:
EXAMPLE.COM:自己设定的域,一般为了识别使用大写;
max_renewable_life:是否能进行ticket的renew,也就是票据刷新;
master_key_type:和supported_enctypes默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包,更多参考2.2.9关于AES-256加密,推荐不使用。
acl_file:标注了admin的权限,格式如下:
Kerberos_principal permissions [target_principal] [restrictions]支持通配符等。
admin_keytab:KDC进行校验的keytab;
supported_enctypes:支持的校验方式;aes256-cts要去掉;
默认路径为:/etc/krb5.conf
默认配置文件:
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
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_realm = EXAMPLE.COM
default_ccache_name = KEYRING:persistent:%{uid}
[realms]
# EXAMPLE.COM = {
# kdc = kerberos.example.com
# admin_server = kerberos.example.com
# }
[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM
修改后的配置文件:
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[logging] # 日志模块
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
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_realm = HADOOP.COM
default_ccache_name = KEYRING:persistent:%{uid}
[realms]
HADOOP.COM = {
kdc = hadoop162
admin_server = hadoop162
}
[domain_realm]
.hadoop.com = HADOOP.COM
hadoop.com = HADOOP.COM
文件说明:
[logging]:表示日志存储位置
[libdefaults]:每种连接的配置
default_realm:默认的realm,必须和配置的realm一致;
udp_preference_limit = 1 :禁止使用udp可以防止一个Hadoop中的错误;
ticket_lifetime:凭证有效时间,一般为24小时;
renew_lifetime:凭证最长可以被延期的时限,一般为一周,凭证过期后对安全认证的服务访问会失败;
kdc:代表要kdc的位置。格式是 机器:端口;
admin_server:代表admin的位置。格式是机器:端口;
default_domain:代表默认的域名;
xsync /etc/krb5.conf
默认位置:/var/kerberos/krb5kdc/kadm5.acl
*/[email protected] *
说明:
/admin代表admin实例的全部用户主体
HADOOP.COM代表领域
最后一个代表所有权限
这里授权的意思就是admin实例的全部主体拥有HADOOP.COM领域的所有权限
在服务端对数据库进行初始化,默认的数据库路径为:/var/kerberos/krb5kdc;需要设置初始化密码;
kdb5_util create -r HADOOP.COM -s
说明:
-r:指定一个realm_name,当krb5.conf配置多个realm时使用;
-s:表示生成 stash file ,并在其中存储master server key(krb5kdc);
创建成功后在/var/kerberos/krb5kdc可以看到生成的相关principal文件:
systemctl start krb5kdc
systemctl start kadmin
服务对应的日志文件:
/var/log/krb5kdc.log
/var/log/kadmind.log
systemctl enable krb5kdc
systemctl enable kadmin
kadmin.local -q "addprinc admin/admin"
kadmin.local需在server端即KDC所在服务器执行
也可以在server端执行kadmin.local命令先登陆kerberos数据库,下图是支持的操作:
kadmin.local -q "addprinc test"
kadmin.local -q "xst -norandkey -k etc/test.keytab test"
# 或
kadmin.local -q "ktadd -norandkey -k /etc/test.keytab test"
[-norandkey] 表示创建keytab时,principal的密码不发生改变。如果不使用该参数,直接ktadd -k则会修改principal的密码。
klist -kte /etc/test.keytab
kinit -kt /etc/test.keytab test
# 或者
kinit test
klist -e
kdestroy
kadmin.local -q "list_principals"
也可以用kadmin然后输入admin管理员密码,然后list_principals
kadmin.local -q "delete_principal test"