kerberos 协议初探

kerberos原理#
一个客户端要访问某个服务时,先要到KDC去认证自己,并获得访问票据TGT
然后客户端再拿着这个访问票据到自己真实想要访问的服务去获得访问授权,
然后真实的进行访问

在kerberos中,KDC有两部分组成:

Authentication Server,用来认证用户,即验证用户存在,且密码正确
Ticket-Granting Service,用来给客户端生成,可以访问客户端想要访问的那个服务的票据TGT
三个请求步骤#
整体来看,kerberos分为三个请求来回,假设一个client要访问服务server

client到Authentication Server认证,并获得跟Ticket-Granting Service通信的加密key,Client/TGS SessionKey和能访问Client/TGS SessionKey的票据
client使用Client/TGS SessionKey跟Ticket-Granting Service进行安全通信,获得能访问server票据
client在拿到第二步的票据去访问服务server

双向验证#
kerberos是双向验证的。实现双向验证的原理:
其上三步通信中,每一步的请求和返回都包含两个数据。一份是发送方想要获取认证的请求,一份是发送方希望接收方认证自己的请求数据。

基础术语#
Principals#
在kerberos网络中,认证双方的指代,可以服务,也可以是个人
Principals是唯一的,KDC是基于Principals来判定它有没有访问某个服务的权限

一个Principals的基本构造为:
primary/instance@realm

其中:

primary是具体的用户名或服务名,比如用户名:jdoe, 服务名:nfs
instance 是该用户或服务具体的角色/机器定位,比如jdoe/admin, ftp/bigmachine.corp.example.com,后者表示ftp这个服务在bigmachine.corp.example.com这host机器上。特别地,如果primary是一个服务,那么其instance必填。而如果primary是用户,则instance不必填
realm 一个逻辑领域,指代kerberos网络的范围,通常是大写域名,比如CORP.EXAMPLE.COM
以下是一些合法的principal定义

Copy
jdoe

jdoe/admin

jdoe/admin@CORP.EXAMPLE.COM

nfs/host.corp.example.com@CORP.EXAMPLE.COM

host/corp.example.com@CORP.EXAMPLE.COM
Realms#
Realms 是kerberos整个网络的逻辑定义,相当于一个域,所以通常也用域名来定义。Realm可以集成,也可以没有集成但又有相应的关系

KDC#
存储有所有Principals的账号信息,用于认证用户,并分发Principal A访问Principal B的票据
KDC本身可以做主从,从而实现高可用

keytab#
一个存储了Principal信息的文件,其中包含用户名跟加密key(相当于密码)。其目的是,可以通过kinit命令,以脚本的方式去KDC认证,并缓存票据TGT。这样做能够使得一些系统之间的授权成为可能,也使得无人工参与的脚本自动化认证成为可能。因为普通的登录认证,需要用户交互,去输入用户名密码。

一个典型的kinit命令如下:https://github.com/91sipp68/rfrepzlnrj/discussions/168
https://github.com/l32nyw20/twggpilioq/discussions/158
https://github.com/91sipp68/rfrepzlnrj/discussions/169
https://github.com/l32nyw20/twggpilioq/discussions/159
https://github.com/91sipp68/rfrepzlnrj/discussions/170
https://github.com/l32nyw20/twggpilioq/discussions/160
https://github.com/91sipp68/rfrepzlnrj/discussions/171
https://github.com/91sipp68/rfrepzlnrj/discussions/172
https://github.com/l32nyw20/twggpilioq/discussions/161
https://github.com/l32nyw20/twggpilioq/discussions/162
https://github.com/91sipp68/rfrepzlnrj/discussions/173
https://github.com/l32nyw20/twggpilioq/discussions/163
https://github.com/l32nyw20/twggpilioq/discussions/164
https://github.com/91sipp68/rfrepzlnrj/discussions/174
https://github.com/l32nyw20/twggpilioq/discussions/165
https://github.com/91sipp68/rfrepzlnrj/discussions/175
https://github.com/l32nyw20/twggpilioq/discussions/166
https://github.com/91sipp68/rfrepzlnrj/discussions/176
https://github.com/l32nyw20/twggpilioq/discussions/167
https://github.com/91sipp68/rfrepzlnrj/discussions/177
https://github.com/l32nyw20/twggpilioq/discussions/168
https://github.com/91sipp68/rfrepzlnrj/discussions/178
https://github.com/l32nyw20/twggpilioq/discussions/169
https://github.com/91sipp68/rfrepzlnrj/discussions/179
https://github.com/l32nyw20/twggpilioq/discussions/170
https://github.com/91sipp68/rfrepzlnrj/discussions/180
https://github.com/l32nyw20/twggpilioq/discussions/171
https://github.com/91sipp68/rfrepzlnrj/discussions/181
https://github.com/l32nyw20/twggpilioq/discussions/172
https://github.com/91sipp68/rfrepzlnrj/discussions/182
https://github.com/l32nyw20/twggpilioq/discussions/173
https://github.com/91sipp68/rfrepzlnrj/discussions/183
https://github.com/l32nyw20/twggpilioq/discussions/174
https://github.com/91sipp68/rfrepzlnrj/discussions/184
https://github.com/l32nyw20/twggpilioq/discussions/175
https://github.com/l32nyw20/twggpilioq/discussions/176
https://github.com/91sipp68/rfrepzlnrj/discussions/185
https://github.com/l32nyw20/twggpilioq/discussions/177
https://github.com/91sipp68/rfrepzlnrj/discussions/186
https://github.com/l32nyw20/twggpilioq/discussions/178
https://github.com/91sipp68/rfrepzlnrj/discussions/187
https://github.com/l32nyw20/twggpilioq/discussions/179
https://github.com/91sipp68/rfrepzlnrj/discussions/188
https://github.com/l32nyw20/twggpilioq/discussions/180
https://github.com/91sipp68/rfrepzlnrj/discussions/189
https://github.com/91sipp68/rfrepzlnrj/discussions/190
https://github.com/91sipp68/rfrepzlnrj/discussions/191
https://github.com/l32nyw20/twggpilioq/discussions/181
https://github.com/91sipp68/rfrepzlnrj/discussions/192
https://github.com/91sipp68/rfrepzlnrj/discussions/193
https://github.com/l32nyw20/twggpilioq/discussions/182
https://github.com/91sipp68/rfrepzlnrj/discussions/194
https://github.com/l32nyw20/twggpilioq/discussions/183
https://github.com/l32nyw20/twggpilioq/discussions/184
https://github.com/91sipp68/rfrepzlnrj/discussions/195
https://github.com/l32nyw20/twggpilioq/discussions/185
https://github.com/91sipp68/rfrepzlnrj/discussions/196
https://github.com/l32nyw20/twggpilioq/discussions/186
https://github.com/91sipp68/rfrepzlnrj/discussions/197
https://github.com/l32nyw20/twggpilioq/discussions/187
https://github.com/91sipp68/rfrepzlnrj/discussions/198
https://github.com/l32nyw20/twggpilioq/discussions/188
https://github.com/91sipp68/rfrepzlnrj/discussions/199
https://github.com/l32nyw20/twggpilioq/discussions/189
https://github.com/l32nyw20/twggpilioq/discussions/190
https://github.com/91sipp68/rfrepzlnrj/discussions/200
https://github.com/91sipp68/rfrepzlnrj/discussions/201
https://github.com/l32nyw20/twggpilioq/discussions/191
https://github.com/l32nyw20/twggpilioq/discussions/192
https://github.com/91sipp68/rfrepzlnrj/discussions/202
https://github.com/l32nyw20/twggpilioq/discussions/193
https://github.com/91sipp68/rfrepzlnrj/discussions/203
https://github.com/l32nyw20/twggpilioq/discussions/194
https://github.com/91sipp68/rfrepzlnrj/discussions/204
https://github.com/l32nyw20/twggpilioq/discussions/195
https://github.com/91sipp68/rfrepzlnrj/discussions/205
https://github.com/l32nyw20/twggpilioq/discussions/196
https://github.com/l32nyw20/twggpilioq/discussions/197
https://github.com/91sipp68/rfrepzlnrj/discussions/206
https://github.com/91sipp68/rfrepzlnrj/discussions/207
https://github.com/l32nyw20/twggpilioq/discussions/198
https://github.com/91sipp68/rfrepzlnrj/discussions/208
https://github.com/91sipp68/rfrepzlnrj/discussions/209
https://github.com/l32nyw20/twggpilioq/discussions/199
https://github.com/91sipp68/rfrepzlnrj/discussions/210
https://github.com/l32nyw20/twggpilioq/discussions/200
https://github.com/91sipp68/rfrepzlnrj/discussions/211
https://github.com/l32nyw20/twggpilioq/discussions/201
https://github.com/91sipp68/rfrepzlnrj/discussions/212
https://github.com/91sipp68/rfrepzlnrj/discussions/213
https://github.com/l32nyw20/twggpilioq/discussions/202
https://github.com/91sipp68/rfrepzlnrj/discussions/214
https://github.com/l32nyw20/twggpilioq/discussions/203
https://github.com/91sipp68/rfrepzlnrj/discussions/215
https://github.com/l32nyw20/twggpilioq/discussions/204
https://github.com/91sipp68/rfrepzlnrj/discussions/216
https://github.com/l32nyw20/twggpilioq/discussions/205
https://github.com/91sipp68/rfrepzlnrj/discussions/217
https://github.com/l32nyw20/twggpilioq/discussions/206
https://github.com/91sipp68/rfrepzlnrj/discussions/218
https://github.com/l32nyw20/twggpilioq/discussions/207
https://github.com/91sipp68/rfrepzlnrj/discussions/219
https://github.com/l32nyw20/twggpilioq/discussions/208
https://github.com/91sipp68/rfrepzlnrj/discussions/220
https://github.com/91sipp68/rfrepzlnrj/discussions/221
https://github.com/l32nyw20/twggpilioq/discussions/209
https://github.com/91sipp68/rfrepzlnrj/discussions/222
https://github.com/l32nyw20/twggpilioq/discussions/210
https://github.com/91sipp68/rfrepzlnrj/discussions/223
https://github.com/l32nyw20/twggpilioq/discussions/211
https://github.com/91sipp68/rfrepzlnrj/discussions/224
https://github.com/l32nyw20/twggpilioq/discussions/212
https://github.com/91sipp68/rfrepzlnrj/discussions/225
https://github.com/l32nyw20/twggpilioq/discussions/213
https://github.com/91sipp68/rfrepzlnrj/discussions/226
https://github.com/l32nyw20/twggpilioq/discussions/214
https://github.com/91sipp68/rfrepzlnrj/discussions/227
https://github.com/l32nyw20/twggpilioq/discussions/215
https://github.com/91sipp68/rfrepzlnrj/discussions/228
https://github.com/l32nyw20/twggpilioq/discussions/216
https://github.com/91sipp68/rfrepzlnrj/discussions/229
https://github.com/l32nyw20/twggpilioq/discussions/217
https://github.com/91sipp68/rfrepzlnrj/discussions/230
https://github.com/l32nyw20/twggpilioq/discussions/218
https://github.com/91sipp68/rfrepzlnrj/discussions/231
https://github.com/l32nyw20/twggpilioq/discussions/219
https://github.com/91sipp68/rfrepzlnrj/discussions/232
https://github.com/l32nyw20/twggpilioq/discussions/220
https://github.com/91sipp68/rfrepzlnrj/discussions/233
https://github.com/l32nyw20/twggpilioq/discussions/221
https://github.com/91sipp68/rfrepzlnrj/discussions/234
https://github.com/l32nyw20/twggpilioq/discussions/222
https://github.com/91sipp68/rfrepzlnrj/discussions/235
https://github.com/l32nyw20/twggpilioq/discussions/223
https://github.com/l32nyw20/twggpilioq/discussions/224
https://github.com/91sipp68/rfrepzlnrj/discussions/236
https://github.com/l32nyw20/twggpilioq/discussions/225
https://github.com/91sipp68/rfrepzlnrj/discussions/237
https://github.com/l32nyw20/twggpilioq/discussions/226
https://github.com/91sipp68/rfrepzlnrj/discussions/238
https://github.com/l32nyw20/twggpilioq/discussions/227
https://github.com/91sipp68/rfrepzlnrj/discussions/239
https://github.com/l32nyw20/twggpilioq/discussions/228
https://github.com/91sipp68/rfrepzlnrj/discussions/240
https://github.com/l32nyw20/twggpilioq/discussions/229
https://github.com/l32nyw20/twggpilioq/discussions/230
https://github.com/91sipp68/rfrepzlnrj/discussions/241
https://github.com/l32nyw20/twggpilioq/discussions/231
https://github.com/91sipp68/rfrepzlnrj/discussions/242
https://github.com/l32nyw20/twggpilioq/discussions/232
https://github.com/91sipp68/rfrepzlnrj/discussions/243
https://github.com/l32nyw20/twggpilioq/discussions/233
https://github.com/l32nyw20/twggpilioq/discussions/234
https://github.com/l32nyw20/twggpilioq/discussions/235
https://github.com/91sipp68/rfrepzlnrj/discussions/244
https://github.com/l32nyw20/twggpilioq/discussions/236
https://github.com/91sipp68/rfrepzlnrj/discussions/245
https://github.com/l32nyw20/twggpilioq/discussions/237
https://github.com/91sipp68/rfrepzlnrj/discussions/246
https://github.com/l32nyw20/twggpilioq/discussions/238
https://github.com/91sipp68/rfrepzlnrj/discussions/247
https://github.com/l32nyw20/twggpilioq/discussions/239
https://github.com/91sipp68/rfrepzlnrj/discussions/248
https://github.com/l32nyw20/twggpilioq/discussions/240
https://github.com/91sipp68/rfrepzlnrj/discussions/249
https://github.com/l32nyw20/twggpilioq/discussions/241
https://github.com/91sipp68/rfrepzlnrj/discussions/250
https://github.com/l32nyw20/twggpilioq/discussions/242
https://github.com/91sipp68/rfrepzlnrj/discussions/251
https://github.com/l32nyw20/twggpilioq/discussions/243
https://github.com/91sipp68/rfrepzlnrj/discussions/252
https://github.com/l32nyw20/twggpilioq/discussions/244
https://github.com/l32nyw20/twggpilioq/discussions/245
https://github.com/91sipp68/rfrepzlnrj/discussions/253
https://github.com/l32nyw20/twggpilioq/discussions/246
https://github.com/91sipp68/rfrepzlnrj/discussions/254
https://github.com/l32nyw20/twggpilioq/discussions/247
https://github.com/91sipp68/rfrepzlnrj/discussions/255
https://github.com/l32nyw20/twggpilioq/discussions/248
https://github.com/91sipp68/rfrepzlnrj/discussions/256
https://github.com/l32nyw20/twggpilioq/discussions/249
https://github.com/91sipp68/rfrepzlnrj/discussions/257
https://github.com/l32nyw20/twggpilioq/discussions/250
https://github.com/91sipp68/rfrepzlnrj/discussions/258
https://github.com/91sipp68/rfrepzlnrj/discussions/259
https://github.com/l32nyw20/twggpilioq/discussions/251
https://github.com/91sipp68/rfrepzlnrj/discussions/260
https://github.com/l32nyw20/twggpilioq/discussions/252
https://github.com/91sipp68/rfrepzlnrj/discussions/261
https://github.com/l32nyw20/twggpilioq/discussions/253
https://github.com/91sipp68/rfrepzlnrj/discussions/262
https://github.com/l32nyw20/twggpilioq/discussions/254
https://github.com/91sipp68/rfrepzlnrj/discussions/263
https://github.com/l32nyw20/twggpilioq/discussions/255
https://github.com/91sipp68/rfrepzlnrj/discussions/264
https://github.com/l32nyw20/twggpilioq/discussions/256
https://github.com/91sipp68/rfrepzlnrj/discussions/265
https://github.com/l32nyw20/twggpilioq/discussions/257
https://github.com/91sipp68/rfrepzlnrj/discussions/266
https://github.com/l32nyw20/twggpilioq/discussions/258
https://github.com/91sipp68/rfrepzlnrj/discussions/267
https://github.com/l32nyw20/twggpilioq/discussions/259
https://github.com/91sipp68/rfrepzlnrj/discussions/268
https://github.com/l32nyw20/twggpilioq/discussions/260
https://github.com/91sipp68/rfrepzlnrj/discussions/269
https://github.com/l32nyw20/twggpilioq/discussions/261
https://github.com/91sipp68/rfrepzlnrj/discussions/270
https://github.com/l32nyw20/twggpilioq/discussions/262
https://github.com/91sipp68/rfrepzlnrj/discussions/271
https://github.com/l32nyw20/twggpilioq/discussions/263
https://github.com/l32nyw20/twggpilioq/discussions/264
https://github.com/91sipp68/rfrepzlnrj/discussions/272
https://github.com/91sipp68/rfrepzlnrj/discussions/273
https://github.com/l32nyw20/twggpilioq/discussions/265
https://github.com/l32nyw20/twggpilioq/discussions/266
https://github.com/91sipp68/rfrepzlnrj/discussions/274
https://github.com/l32nyw20/twggpilioq/discussions/267
https://github.com/91sipp68/rfrepzlnrj/discussions/275
https://github.com/l32nyw20/twggpilioq/discussions/268
https://github.com/91sipp68/rfrepzlnrj/discussions/276
https://github.com/l32nyw20/twggpilioq/discussions/269
https://github.com/91sipp68/rfrepzlnrj/discussions/277
https://github.com/l32nyw20/twggpilioq/discussions/270
https://github.com/91sipp68/rfrepzlnrj/discussions/278
https://github.com/l32nyw20/twggpilioq/discussions/271
https://github.com/91sipp68/rfrepzlnrj/discussions/279
https://github.com/l32nyw20/twggpilioq/discussions/272
https://github.com/91sipp68/rfrepzlnrj/discussions/280
https://github.com/l32nyw20/twggpilioq/discussions/273
https://github.com/91sipp68/rfrepzlnrj/discussions/281
https://github.com/l32nyw20/twggpilioq/discussions/274
https://github.com/91sipp68/rfrepzlnrj/discussions/282
https://github.com/l32nyw20/twggpilioq/discussions/275
https://github.com/91sipp68/rfrepzlnrj/discussions/283
https://github.com/l32nyw20/twggpilioq/discussions/276
https://github.com/91sipp68/rfrepzlnrj/discussions/284
https://github.com/l32nyw20/twggpilioq/discussions/277
https://github.com/91sipp68/rfrepzlnrj/discussions/285
https://github.com/l32nyw20/twggpilioq/discussions/278
https://github.com/91sipp68/rfrepzlnrj/discussions/286
https://github.com/l32nyw20/twggpilioq/discussions/279
https://github.com/l32nyw20/twggpilioq/discussions/280
https://github.com/91sipp68/rfrepzlnrj/discussions/287
https://github.com/l32nyw20/twggpilioq/discussions/281
https://github.com/91sipp68/rfrepzlnrj/discussions/288
https://github.com/l32nyw20/twggpilioq/discussions/282
https://github.com/91sipp68/rfrepzlnrj/discussions/289
https://github.com/l32nyw20/twggpilioq/discussions/283
https://github.com/91sipp68/rfrepzlnrj/discussions/290
https://github.com/l32nyw20/twggpilioq/discussions/284
https://github.com/91sipp68/rfrepzlnrj/discussions/291
https://github.com/l32nyw20/twggpilioq/discussions/285
https://github.com/91sipp68/rfrepzlnrj/discussions/292
https://github.com/91sipp68/rfrepzlnrj/discussions/293
https://github.com/l32nyw20/twggpilioq/discussions/286
https://github.com/l32nyw20/twggpilioq/discussions/287
https://github.com/91sipp68/rfrepzlnrj/discussions/294
https://github.com/91sipp68/rfrepzlnrj/discussions/295
https://github.com/l32nyw20/twggpilioq/discussions/288
https://github.com/l32nyw20/twggpilioq/discussions/289
https://github.com/91sipp68/rfrepzlnrj/discussions/296
https://github.com/l32nyw20/twggpilioq/discussions/290
https://github.com/91sipp68/rfrepzlnrj/discussions/297
https://github.com/91sipp68/rfrepzlnrj/discussions/298
https://github.com/91sipp68/rfrepzlnrj/discussions/299
https://github.com/l32nyw20/twggpilioq/discussions/291
https://github.com/91sipp68/rfrepzlnrj/discussions/300
https://github.com/l32nyw20/twggpilioq/discussions/292
https://github.com/91sipp68/rfrepzlnrj/discussions/301
https://github.com/l32nyw20/twggpilioq/discussions/293
https://github.com/91sipp68/rfrepzlnrj/discussions/302
https://github.com/l32nyw20/twggpilioq/discussions/294
https://github.com/91sipp68/rfrepzlnrj/discussions/303
https://github.com/l32nyw20/twggpilioq/discussions/295
https://github.com/91sipp68/rfrepzlnrj/discussions/304
https://github.com/l32nyw20/twggpilioq/discussions/296
https://github.com/91sipp68/rfrepzlnrj/discussions/305
https://github.com/l32nyw20/twggpilioq/discussions/297
https://github.com/91sipp68/rfrepzlnrj/discussions/306
https://github.com/l32nyw20/twggpilioq/discussions/298
https://github.com/91sipp68/rfrepzlnrj/discussions/307
https://github.com/l32nyw20/twggpilioq/discussions/299
https://github.com/91sipp68/rfrepzlnrj/discussions/308

Copy
kinit username@ADS.IU.EDU -k -t mykeytab; myscript
mykeytab是Keytab的文件名,由于其中可能有多个principal的账号信息,所以这里显示的基于username@ADS.IU.EDU这个用户id,显示的去找文件中的密码,完成认证。
认证完后,执行后续想要操作的myscript脚本。

当日Kinit命令本身也可以不使用Keytab文件,而直接用户交互的方式,去输入密码,完整认证。

整个kerberos的逻辑视图#

其中clients和Application Servers都是Principal

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值