Kerberos认证方式
Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据)ticket-granting ticket)访问多个服务,即SSO(Single Sign On)
。由于在每个Client和Service之间建立了共享密钥,使得该协议具有相当的安全性。
1.下载和编译
方式一
下载
https://web.mit.edu/kerberos/dist/krb5/1.9/krb5-1.9-signed.tar
解压
tar -xvf krb5-1.9.signed.tar 生成krb5-1.9.tar.gz 和krb5-1.9.tar.gz.asc 继续解压tar zxvf krb5-1.9.tar.gz
编译
cd krb5-1.9/src ./configure make make install
方式二
yum install krb5\* -y
2. /etc/krb5.conf 配置文件
这个是Kerberos最主要的配置文件,安装成功后,放在/etc
下
# cat /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
EXAMPLE.COM = {
kdc = kerberos.example.com
admin_server = kerberos.example.com
}
[domain_realm]
example.com = EXAMPLE.COM
.example.com = EXAMPLE.COM
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
[logging]
中的是指定日志的位置。[libdefaults]
中的defalt_realm表示在不给出域的时候,默认采用这个域。[realms]
是最重要的也是Kerberos中最难的概念,称为kerberos域,表示KDC所管辖的范围,可以和DNS域名一样,也可以不一样。kdc
是kerberos服务器所在的主机,最好直接写ip地址,admin_server
是管理服务器的ip地址。[kdc]
的位置。
3. kdc.conf 配置文件
由于上面安装时没有选择安装目录,所以默认的安装位置在/usr/local/var/krb5kdc
或 /var/kerberos/krb5kdc/kdc.conf
# cat /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[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 des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}
4. kadm5.acl 配置文件
# more /var/kerberos/krb5kdc/kadm5.acl
*/admin@EXAMPLE.COM *
通过该项,EXAMPLE.COM
领域中的 admin 主体可以修改 KDC 中的主体或策略。缺省安装包括一个星号 (*)
,以匹配所有的 admin 主体。此缺省安装可能会造成安全风险,因此,包括一个所有 admin 主体的列表会更安全。
5.创建数据库
/usr/sbin/kdb5_util create -r EXAMPLE.COM -s
- -r 是指定realm,-s 是缓存的意思
- 输入的密码(这就是kdc数据库的密码)
这个命令用来生成kerberos的本地数据库,包括几个文件:principal
,principal.OK
,principal.kadm5
,principal.kadm5.lock
. -r 指定realm(kerberos术语)
,我们随便取一个叫 EXAMPLE.COM.
并且创建/var/kerberos/krb5kdc/principal
保存数据库文件。
6.创建账户
输入 kadmin.local
这是一个管理整个kerberos的命令符
查看用户
listprincs
添加用户
addprinc admin/admin@EXAMPLE.COM
删除用户
delprinc
加1个principal
addprinc admin/admin@EXAMPLE.COM
kerberos用principal(kerberos术语)
来表示realm
下的一个帐户,表示为primary/instance@realm
,举个例子就是username/10.0.211.55@EXAMPLE.COM
,这里假设10.0.211.55
是你机器的ip地址。
还有一种说法
在Kerberos安全机制里,一个principal就是realm里的一个对象,一个principal总是和一个密钥(secret key)成对出现的。
这个principal的对应物可以是service,可以是host,也可以是user,对于Kerberos来说,都没有区别。
Kdc(Key distribute center)知道所有principal的secret key
,但每个principal对应的对象只知道自己的那个secret key。这也是“共享密钥“的由来。
7.导出账户密匙
导出我们刚才创建的账户 admin/admin@EXAMPLE.COM
的密钥到/var/kerberos/krb5kdc/krb5.keytab
,Ktelnetd、Krlogind和Krshd需要/var/kerberos/krb5kdc/krb5.keytab
来验证admin/admin的身份。
ktadd -k /var/kerberos/krb5kdc/krb5.keytab admin/admin
注意kadm5.keytab的路径要与kdc.conf中的路径一致
测试 ktutil
# ktutil
rkt /var/kerberos/krb5kdc/krb5.keytab
list
8.启动krb5kdc和kadmind进程
kadmind
krb5kdc restart
chkconfig krb5kdc on
9.测试
制作本地缓存
将admin/admin@EXAMPLE.COM
的credentials(kerberos术语)
取到本地做为cache,这样以后就可以不用重复输入password了。
kinit -kt /var/kerberos/krb5kdc/krb5.keytab admin/admin
klist查看是否生成ok
可以用klist命令来查看自己的credential(票据)
。
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: zookeeper/10.211.55.5@EXAMPLE.COM
Valid starting Expires Service principal
07/22/16 18:02:44 07/23/16 18:02:44 krbtgt/EXAMPLE.COM@EXAMPLE.COM
renew until 07/22/16 18:02:44