Kerberos认证原理与使用教程
一、Kerberos 概述
二、什么是 Kerberos
Kerberos 是一种计算机网络认证协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。 kerberos一词来源于希腊神话的地狱守护神,三头犬。
三、Kerberos 术语
- Kerberos 中有以下一些概念需要了解:
1)KDC(Key Distribute Center):密钥分发中心,负责存储用户信息,管理发放票据。
2)Realm:Kerberos 所管理的一个领域或范围,称之为一个 Realm。
3)Principal:**Kerberos 所管理的一个用户或者一个服务,可以理解为 Kerberos 中保存的一个账号,**其格式通常如下:primary/instance@realm
4)keytab:Kerberos 中的用户认证,可通过密码或者密钥文件证明身份,keytab 指密钥文件。
对以上的专业术语进行解释:
-
首先,所谓认证也就是用户的登录需要用户名和密码,这也是最基本的认证方式;那么KDC负责存储用户信息,也就是KDC内置的Database会存储用户的用户名和密码;那么kdc发放的票据是什么票据呢?这个票据是指某个用户访问服务时所需要的票据,相当于门票。
-
Realme域又指的是什么呢?他指代的是Kerberos 所管理的一个领域或范围,所谓的领域也就是一系列的服务和用户。
-
Principal是指Kerberos 所管理的一个用户或者一个服务,可以理解为 Kerberos 中保存的一个账号。
- 一个用户要想通过kerberos认证得需要一个账号和密码,同样的一个服务要想通过kerberos 认证也需要账号和密码;
- 格式 primary/instance@realm 三个部分,用户名or服务名 / 实例(服务主机名)@域名;例如:root/admin@EXAMPLE.COM 如下图:
Hadoop的认证使用的是Kerberos协议。
keytab:Kerberos 中的用户认证,可通过密码或者密钥文件证明身份,keytab 指密钥文件。
-
kerberos认证两种方式:
四、Kerberos 认证原理
-
AS: Authentication Server认证服务器,首先用户进行身份认证,kinit命令进行认证,然后输入密码;此时认证服务器会根据用户输入的账号和密码到数据库Database中查询,看是否正确,如果正确颁发临时的票据,这个票据就是TGT,它是Ticket Granting Ticket的缩写,这个票据名称为:申请票据的票据。
-
用户拿到这个用来申请服务票据的票据后,然后携带该票据TGT去访问票据授权服务器,然后票据授权服务器TGS去数据库中查询服务是否为合法的服务;
查询到相关服务名和秘钥后,颁发票证给用户。
-
用户拿到这个TG票证后然后才能访问我们的服务,比如上图拿到票证访问hdfs服务。这就是kerberos的基本认证原理。
五、kerberos的使用
kerberos的命令缩写
- add_principal,addprinc,ank
- delete_principal,delprinc
- ktadd,xst
- change_password,cpw
查看kerberos服务
-
启动 KDC服务:
- systemctl status krb5kdc
-
若未启动 执行启动命令:
- systemctl start krb5kdc
-
启动 Kadmin,该服务为 KDC 数据库访问入口:
- systemctl start kadmin
-
查看kadmin服务状态
- systemctl status kadmin
登录kadmin
kerberos的安装,主要有kdc服务和一到多个client客户端。使用kadmin.local命令登录客户端。
非kadmin节点使用admin权限的prin认证后,输入kadmin后输入密码。
添加principal服务主体
- 生成随机key的principal,这种principal只能用来生成keytab使用
例如:
addprinc -randkey root/master1@EXAMPLE.COM
- 第二种方式 ktadd -k 存放keytab的路径 服务主体名
- 例如:
ktadd -norandkey -k /opt/keytab/hive.keytab hive
例如:
ktadd -norandkey -k /keytab/root.keytab root/master1@EXAMPLE.COM host/master1@EXAMPLE.COM
这种方式生成keytab时,缺省会生成长串随机密码来覆盖原来的密码。覆盖后,就不能用原来密码登录了,只能用keytab,如果想要继续使用密码登录,需要使用norandkey参数来避免生成长串随机密码。
-norandkey表示不用很长的随机密码,使用自己设置的密码,意味着可以同时用密码和keytab认证。
- 为principal生成keytab,可同时添加多个
ktadd -norandkey -k /keytab/root.keytab root/master1@EXAMPLE.COM host/master1@EXAMPLE.COM
- klist -ket xxx.keytab 查看参数keytab里面包含的的认证信息
- klist -e = klist 查看当前用户认证信息
# klist -ket xxx.keytabKeytab name: FILE:xxx.keytabKVNO Timestamp Principal---- ------------------- ------------------------------------------------------ 7 2018-07-30T10:19:16 hbase-flink@demo.com (des-cbc-md5) 7 2018-07-30T10:19:16 hbase-flink@demo.com (aes128-cts-hmac-sha1-96) 7 2018-07-30T10:19:16 hbase-flink@demo.com (aes256-cts-hmac-sha1-96) 7 2018-07-30T10:19:16 hbase-flink@demo.com (des3-cbc-sha1) 7 2018-07-30T10:19:16 hbase-flink@demo.com (arcfour-hmac)12345678910
- 查看principal命令
- listprincs
- 或者是list_principals
- 修改admin/admin的密码
- change_password -pw xxxx admin/admin或者使用cpw命令
- 删除principal
- delete_principal admin/admin
- 认证某个服务主体命令
- 例如:kinit -kt /opt/keytabs/hive.keytab hive
注意事项
- 使用密码创建一个principal后,如果用ktadd生成随机密码的keytab(默认),会用一个很长的随机密码覆盖原来手动设置的密码,那么原来的密码就不能用了。如果使用 -norandkey,可以密码和keytab同时使用。
kerberos的2个生命周期
Kerberos ticket 有两种生命周期,ticket timelife (票据生命周期) 和 renewable lifetime (可再生周期)。
当 ticket lifetime 结束时,该 ticket 将不再可用。
如果 renewable lifetime > ticket lifetime ,那么在票据生命周期内可以续期,直到达到可再生周期。
当时间达到 renewable lifetime 后,ticket lifetime结束后将不能继续续期,续期时将会报错 KDC can’t fulfill requested option while renewing credentials,之后需要重新kinit申请新的ticket
与使用较长的生命周期的票据相比,可再生票据的优点是KDC可以拒绝续期请求(例如,如果发现帐户被破坏,并且可再生票据可能在攻击者手中)。???
例如:
ticket_lifetime = 1d
renew_lifetime = 7d
在登陆后的24h内可以对ticket进行续期,直到第一次登陆的7天后将不再允许续期。
在24h内如果没有续期,将无法续期。
对 ticket 进行一次续期后,ticket_lifetime 将恢复到24h。==》
第一次kinit后,从kinit时间到tl期间内可以renew,renew后,start time刷新。直接第一次的st到rl后,不能再刷新
实际场景中,开发告诉运维3天开发完,但3天大概率开发不完,这时候就可以续期,而不用重新输密码或用keytab。
kerberos可以用kinit得到一个ticket(又叫tgt), 在这个ticket生效期间不用输入密码, ticket可以不停续期, 有一个expire日期,下面的例子是12月07到12月08的一天时间, 但是生效期内可以通过 kinit -R 来续期这个ticket, 但是还有个renew until, 表示最长可以续期多久, 下面例子表示15年12/12号以后, kinit -R 就不能续期了.
kinit -R会把当前认证的prin的Valid starting时间刷新为当前,Expires时间自然也就顺延。但renew until时间仍然是第一次认证时确定的时间。
这个ticket和keytab无关, keytab是一个密码文件, 加密了你的密码而已.
Execute a klist command to verify the values that the system actually granted you.Ticket cache: FILE:/tmp/krb5cc_1234Default principal:someuser@UCAR.EDUValid starting Expires Service principal12/07/15 13:00:05 12/08/15 13:00:01 krbtgt/UCAR.EDU@UCAR.EDUrenew until 12/12/15 15:48:441234567
The ticket will expire like an ordinary ticket in 24 hours, but you
can renew multiple times before its expiration, until the final
expiration date (Dec 12 in the example above). You must do the kinit
command interactively because you will have to provide your Kerberos
passphrase; this cannot be put into a cron job or other unattended
situation.
来源地址:https://blog.csdn.net/m0_46168848/article/details/129152120