赞
踩
Principal:Principal
是用来表示参加认证实体,相当于用户名,用来来表示一个client
或server
唯一的身份。Principal
是由三个部分组成:名字(name
),实例(instance
,可选,一般是所需密钥的服务器的主机名或ip),REALM
(域)。格式是:name/instance@REALM
name:可以是任意的字符串,比如说可能是操作系统下的用户名等。
instance:定义了用户在不同的role下使用的priciple
,或者是在host
在不同的service
上运行时使用的principle
KDC数据库:存储了所有的用户信息。以一个用户信息为例
Principal: kafka@HADOOP.COM Expiration date: [never] Last password change: 六 4月 02 15:58:41 CST 2022 Password expiration date: [never] Maximum ticket life: 1 day 00:00:00 Maximum renewable life: 7 days 00:00:00 Last modified: 六 4月 02 15:58:41 CST 2022 (admin/admin@HADOOP.COM) Last successful authentication: [never] Last failed authentication: [never] Failed password attempts: 0 Number of keys: 8 Key: vno 4, aes256-cts-hmac-sha1-96 Key: vno 4, aes128-cts-hmac-sha1-96 Key: vno 4, des3-cbc-sha1 Key: vno 4, arcfour-hmac Key: vno 4, camellia256-cts-cmac Key: vno 4, camellia128-cts-cmac Key: vno 4, des-hmac-sha1 Key: vno 4, des-cbc-md5 MKey: vno 1 Attributes: Policy: [none]
1.与entry相关联的principal
2.principlal的master key
3.与这个principal相关联的ticket最长可用时间
4.与这个principal相关联的ticket的最长的renew时间(译注:是指这个ticket通过renew机制累计可55. 用的时间)(只在kerberos 5中可用)
5.决定这个ticket的具体行为的属性和标志位。
6.Master key过期时间
7.这个principal的过期时间,在此之后就不为这个principal分发ticket了。
为了使得窃取数据库中的密钥更加因难,Kerberos的实现们使用master key来对数据库进行加密,master key被关联在K/M@REALM这个principal上。即使是数据库的dump,备份和master KDC到salve KDC的propagation也会被用这个密钥加密,因此,如果想要重新加载它们,就必须知道这个密钥。
Keytab:Keytab是一个存储于client
或server
端的文本文件,包含了kerberos principle
和该principle
的master key
。所以这个文件需要很小心地保存。
AS(Authentication Server): 认证服务器
KDC(Key Distribution Center): 密钥分发中心
TGT(Ticket Granting Ticket): 票据授权票据,票据的票据
TGS(Ticket Granting Server):票据授权服务器
SS(Service Server): 特定服务提供端
Principal: 被认证的个体
Ticket: 票据, 客户端用来证明身份真实性。包含: 用户名,IP,时间戳,有效期,会话秘钥。
认证过程,以客户端A访问服务器B为例:
8.1 A将自己和B的Pricipal发给CA, CA就知道A要访问B, 然后, 查询自己的密码数据库,获取A 和 B对应的密码.
A—[A_Pricipal, B_Pricipal]----->CA
8.2 CA生成了一个认证因子(类似于证书), 其中包含时间戳,CA的信息,A的信息(A的IP,A的主机名,等等), 然后生成一个随机密码(RandomKey),并使用A的密码,将 [认证因子 + RandomKey] 加密成"Encryption Client".接着使用B的密码, 将[RandomKey] 加密成 “Encryption Server”.
CA–[EC, ES]--------------------->A
8.3 A收到了EC 和 ES, A使用自己的密码将EC解密, 获得了认证因子+RandomKey.A使用Randomkey 对 [认证因子] 加密
A—[ 加密的认证因子 + ES]-------------->B
8.4 B收到了来自A的访问请求, 然后 使用自己的密码将ES解密, 获取RandomKey.然后使用RandomKey 解密 加密的认证因子, 获取认证信息, B读取认证信息,知道这是我信任的CA,接着比对访问者提供的信息与CA提供的认证信息是否匹配,匹配则认证通过, 允许访问.
B-----------[A需要的数据]----------->A
下载插件:yum install -y krb5-server krb5-libs krb5-workstation krb5-devel krb5-auth-dialog openldap-clients
修改配置:vi /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
HADOOP.COM = {
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
max_life = 24h 0m 0s
max_renewable_life = 7d
max_life = 1d
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
}
修改配置:vi /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] 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_realm = EXAMPLE.COM default_ccache_name = KEYRING:persistent:%{uid} [realms] HADOOP.COM = { kdc = 192.168.248.10 admin_server = 192.168.248.10 } [domain_realm] .hadoop.com = HADOOP.COM hadoop.com = HADOOP.COM
初始化数据库:/usr/sbin/kdb5_util create -s -r HADOOP.COM
。密码设为:ffcsict123
查看生成文件:cd /var/kerberos/krb5kdc
--> ls
创建数据库管理员:/usr/sbin/kadmin.local -q "addprinc admin/admin"
,密码为ffcsict123
管理员设置ACL权限:vi /var/kerberos/krb5kdc/kadm5.acl
,即所有以“/admin
”结尾的用户都是管理员
*/admin@HADOOP.COM *
设置启动和开机自启动:systemctl enable kadmin
-->systemctl start kadmin
--> systemctl status kadmin
设置启动和开机自启动:systemctl enable krb5kdc
-->systemctl start krb5kdc
--> systemctl status krb5kdc
登录管理员:kadmin.local
ps:如果在非服务器上登录管理员(客户端),则需要kinit admin/admin
-->kadmin
管理员操作
11.1 登录:kinit admin/admin
--> kadmin
。注:服务端登录可直接输入 kadmin.local
进入。
11.2 查看用户:listprincs
11.3 创建用户:addprinc 用户名
。注:管理员帐户配置用户名以“/admin”结尾即可,如第7点。
11.4 修改密码:kpasswd 用户名
,先输入旧密码,在输入新密码。注:忘记密码,可用kadmin.local
登录,change_password 用户名
,直接输入新密码。
11.5 删除用户:delprinc 用户名
11.6 查看用户信息:getprinc 用户名
11.7 查看所有命令:?
管理员创建kafka用户凭据(凭证登录)
12.1 创建用户:addprinc -randkey kafka/192.168.248.100
12.2 创建导出凭据:ktadd -k /root/kerberos/kafka.keytab kafka/192.168.248.100
或者 xst -k /root/kerberos/kafka.keytab kafka/192.168.248.100
12.3 查看凭据信息:klist -ket /root/kerberos/kafka.keytab
12.4 将生成的“kafka.keytab
”凭据给客户端,客户端可凭借该凭据登录。
管理员创建kafka用户凭据(账号密码登录)
13.1 创建用户:addprinc kafka/192.168.248.100
,然后输入密码即可
13.2 将账号密码给客户端,客户端可以凭借账号密码登录。
13.3 创建凭据:这种方法创建的用户也可以凭借导出凭据登录,但是需要注意的是,在导出凭据的时候需要加上“-norandkey
”关键字,否则每次导出密码会变动。这种情况下,只能在服务端的kadmin.local
登录环境在操作。 如:ktadd -k /root/kerberos/kafka.keytab -norandkey kafka
导出联合凭据:xst -norandkey -k /root/kerberos/kafka.keytab-all kafka kadmin/admin
(仅支持服务端的kadmin.local登录环境)
将用户信息全部导出: kdb5_util dump ./slava_data
,将会生成slava_data
、slava_data.dump_ok
两个文件,信息都存在slava_data
里。
kafka/192.168.248.100
用户为例。yum install -y krb5-lib krb5-workstation
/etc/krb5.conf
替换相同路径下的/krb5.conf
kafka.keytab
拉过来放在/root/kerberos/kafka.keytab
下kinit kafka/192.168.248.100
-->klist
kafka/192.168.248.100@HADOOP.COM
的,图片忘记换过来了kdestroy
--> klist
kinit -kt /root/kerberos/kafka.keytab kafka/192.168.248.100
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。