kerberos安装使用

無名 发表于: 2016-07-23   最后更新时间: 2019-10-18 10:23:49  
{{totalSubscript}} 订阅, 8,920 游览

Kerberos认证方式

Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据)ticket-granting ticket)访问多个服务,即SSO(Single Sign On)。由于在每个Client和Service之间建立了共享密钥,使得该协议具有相当的安全性。

1.下载和编译

方式一

  1. 下载

    https://web.mit.edu/kerberos/dist/krb5/1.9/krb5-1.9-signed.tar
    
  2. 解压

    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
    
  3. 编译

    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的本地数据库,包括几个文件:principalprincipal.OKprincipal.kadm5principal.kadm5.lock. -r 指定realm(kerberos术语),我们随便取一个叫 EXAMPLE.COM.

并且创建/var/kerberos/krb5kdc/principal保存数据库文件。

6.创建账户

输入 kadmin.local
这是一个管理整个kerberos的命令符

  1. 查看用户

    listprincs
    
  2. 添加用户

    addprinc admin/admin@EXAMPLE.COM
    
  3. 删除用户

    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.COMcredentials(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
更新于 2019-10-18

查看Kerberos更多相关的文章或提一个关于Kerberos的问题,也可以与我们一起分享文章