Kerberos的安装和常用命令

1. Kerberos 认证协议介绍

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。使用 Kerberos 时,一个客户端需要经过三个步骤来获取服务:

  • 认证:客户端向认证服务器发送一条报文,并获取一个含时间戳的 Ticket-Granting Ticket(TGT)。
  • 授权:客户端使用 TGT 向 Ticket-Granting Server(TGS)请求一个服务 Ticket。
  • 服务请求:客户端向服务器出示服务 Ticket ,以证实自己的合法性。

       为此,Kerberos 需要 The Key Distribution Centers(KDC)来进行认证。KDC 只有一个 Master,可以带多个 slaves 机器。slaves 机器仅进行普通验证。Mater 上做的修改需要自动同步到 slaves。
        另外,KDC 需要一个 admin,来进行日常的管理操作。这个 admin 可以通过远程或者本地方式登录。

2.搭建 Kerberos

2.1环境

Kerberos打算采用三台机器:host150、host151、host152三台机器,用root用户安装,host150安装kdc主机。

2.2查看主机域名配置

[root@host150 logs]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.206.150 host150
192.168.206.151 host151
192.168.206.152 host152

2.3安装 kdc server

在 KDC (这里是 host150一台安装即可 ) 上安装包 krb5、krb5-server 和 krb5-client

[root@host150 bin]#yum install krb5-server krb5-libs krb5-auth-dialog krb5-workstation  -y

在其他节点(host150、host151、host152)安装 krb5-devel、krb5-workstation 

[root@host150 bin]#ssh host150 "yum install krb5-devel krb5-workstation -y"
[root@host150 bin]#ssh host151 "yum install krb5-devel krb5-workstation -y"
[root@host150 bin]#ssh host152 "yum install krb5-devel krb5-workstation -y"

2.4修改配置文件

kdc 服务器涉及到三个配置文件:
/etc/krb5.conf
/var/kerberos/krb5kdc/kdc.conf
/var/kerberos/krb5kdc/kadm5.acl

配置 Kerberos 的一种方法是编辑配置文件 /etc/krb5.conf。默认安装的文件中包含多个示例项编辑结果如下:

[root@host150 logs]# vim  /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 = NBDP.COM
   dns_lookup_realm = false
   dns_lookup_kdc = false
   clockskew = 120
   ticket_lifetime = 24h
   renew_lifetime = 7d
   forwardable = true
   renewable = true
   udp_preference_limit = 1
   default_tgs_enctypes = rc4-hmac
   default_tkt_enctypes = rc4-hmac
   permitted_enctypes = rc4-hmac

[realms]
  NBDP.COM = {
  kdc = host150
  admin_server = host150
 }

[domain_realm]
 .nbdp.com = NBDP.COM
  nbdp.com = NBDP.COM

[kdc]
  profile=/var/kerberos/krb5kdc/kdc.conf

参数说明:

[logging]:表示 server 端的日志的打印位置
[libdefaults]:每种连接的默认配置,需要注意以下几个关键的小配置
default_realm = NBDP.COM:设置 Kerberos 应用程序的默认领域。如果您有多个领域,只需向 [realms] 节添加其他的语句。
udp_preference_limit= 1:禁止使用 udp 可以防止一个Hadoop中的错误
clockskew:时钟偏差是不完全符合主机系统时钟的票据时戳的容差,超过此容差将不接受此票据。通常,将时钟扭斜设置为 300 秒(5 分钟)。这意味着从服务器的角度看,票证的时间戳与它的偏差可以是在前后 5 分钟内。
ticket_lifetime: 表明凭证生效的时限,一般为24小时。
renew_lifetime: 表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败。
[realms]:列举使用的 realm。
kdc:代表要 kdc 的位置。格式是 机器:端口
admin_server:代表 admin 的位置。格式是 机器:端口
default_domain:代表默认的域名
[appdefaults]:可以设定一些针对特定应用的配置,覆盖默认配置。

修改 /var/kerberos/krb5kdc/kdc.conf ,该文件包含 Kerberos 的配置信息。例如,KDC 的位置,Kerbero 的 admin 的realms 等。需要所有使用的 Kerberos 的机器上的配置文件都同步。这里仅列举需要的基本配置。详细介绍参考:krb5conf

[root@host150 logs]# vim /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 NBDP.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 = 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
  max_life = 24h
  max_renewable_life = 10d
  default_principal_flags = +renewable, +forwardable
}

NBDP.COM: 是设定的 realms。名字随意。Kerberos 可以支持多个 realms,会增加复杂度。大小写敏感,一般为了识别使用全部大写。这个 realms 跟机器的 host 没有大关系。
master_key_type:和 supported_enctypes 默认使用 aes256-cts。由于,JAVA 使用 aes256-cts 验证方式需要安装额外的 jar 包(后面再做说明)。推荐不使用,并且删除 aes256-cts。
acl_file:标注了 admin 的用户权限,需要用户自己创建。文件格式是:Kerberos_principal permissions [target_principal] [restrictions]
supported_enctypes:支持的校验方式。
admin_keytab:KDC 进行校验的 keytab。


关于AES-256加密:
      对于使用 centos5. 6及以上的系统,默认使用 AES-256 来加密的。这就需要集群中的所有节点上安装 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File。下载的文件是一个 zip 包,解开后,将里面的两个文件放到下面的目录中:$JAVA_HOME/jre/lib/security
下载地址:https://www.oracle.com/java/technologies/jce-6-download.html

        为了能够不直接访问 KDC 控制台而从 Kerberos 数据库添加和删除主体,请对 Kerberos 管理服务器指示允许哪些主体执行哪些操作。通过编辑文件 /var/lib/kerberos/krb5kdc/kadm5.acl 完成此操作。ACL(访问控制列表)允许您精确指定特权。

[root@host150 logs]# vim  /var/kerberos/krb5kdc/kadm5.acl
*/admin@NBDP.COM  

2.5同步配置文件

同步krb5.conf文件

[root@host150 etc]# scp /etc/krb5.conf root@host151:/etc/
[root@host150 etc]# scp /etc/krb5.conf root@host152:/etc/

同步kadm5.acl文件

[root@host150 etc]# scp  /var/kerberos/krb5kdc/kadm5.acl root@host151: /var/kerberos/krb5kdc/
[root@host150 etc]# scp  /var/kerberos/krb5kdc/kadm5.acl root@host152: /var/kerberos/krb5kdc/

2.6创建数据库

在 host150 上运行初始化数据库命令。其中 -r 指定对应 realm。
[root@host150 etc]# kdb5_util create -r NBDP.COM -s
注意:如果遇到数据库已经存在的提示,可以把 /var/kerberos/krb5kdc/ 目录下的 principal 的相关文件都删除掉。默认的数据库名字都是 principal。可以使用 -d 指定数据库名字。

2.7启动服务

[root@host150 etc]# chkconfig --level 35 krb5kdc on
[root@host150 etc]# chkconfig --level 35 kadmin on
[root@host150 etc]# service krb5kdc start
[root@host150 etc]# service kadmin start

2.8创建 kerberos 管理员

[root@host150 ~]# kadmin.local -q "addprinc root/admin"
注意:统会提示输入密码,密码不能为空,且需妥善保存。


关于 kerberos 的管理,可以使用 kadmin.local 或 kadmin,至于使用哪个,取决于账户和访问权限:
  1.如果有访问 kdc 服务器的 root 权限,但是没有 kerberos admin 账户,使用 kadmin.local
  2.如果没有访问 kdc 服务器的 root 权限,但是用 kerberos admin 账户,使用 kadmin

示例1:
[root@host150 logs]# kadmin.local
Authenticating as principal root/admin@NBDP.COM with password.
kadmin.local:

示例2
[xiaodu@host150 xiaodu]$ kadmin
Authenticating as principal xiaodu/admin@NBDP.COM with password.
Password for xiaodu/admin@NBDP.COM: 

3.kerberos 常用命令

3.1增删改查

[root@host150 logs]#kadmin.local
[root@host150 logs]#kadmin.local:  list_principals
[root@host150 logs]#kadmin.local:  addprinc user1
[root@host150 logs]#kadmin.local:  delprinc user1

也可以直接通过下面的命令来执行上面的操作:

#需要输入密码
[root@host150 logs]#kadmin -p root/admin -q "list_principals"
[root@host150 logs]#kadmin -p root/admin -q "addprinc user1"
[root@host150 logs]#kadmin -p root/admin -q "delprinc user1"
#不用输入密码
[root@host150 logs]#kadmin.local -q "list_principals"
[root@host150 logs]#kadmin.local -q "addprinc user1"
[root@host150 logs]#kadmin.local -q "delprinc user1"

3.2获取ticket

创建一个名为xiaodu的用户,密码是admin,"admin\nadmin"是输入密码和确认的密码要一致。
 [root@host150 logs]# echo -e "admin\nadmin" | kadmin.local -q "addprinc xiaodu"
查看票据
[xiaodu@host150 ~]$ klist
klist: No credentials cache found (filename: /tmp/krb5cc_1000)
获取票据,需要输入密码
[xiaodu@host150 ~]$ kinit xiaodu
Password for xiaodu@NBDP.COM: 
如果有相同的要指定他域获取票据
[root@host150 xiaodu]kinit xiaodu/admin@NBDP.COM
初始化再查看票据
[xiaodu@host150 ~]$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: xiaodu@NBDP.COM

Valid starting       Expires              Service principal
01/26/2020 14:24:44  01/27/2020 14:24:43  krbtgt/NBDP.COM@NBDP.COM
        renew until 02/02/2020 14:24:43
查看加密方式
[xiaodu@host150 ~]$klist  -e
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: xiaodu@NBDP.COM

Valid starting       Expires              Service principal
01/26/2020 14:29:56  01/27/2020 14:29:55  krbtgt/NBDP.COM@NBDP.COM
        renew until 02/02/2020 14:24:43, Etype (skey, tkt): arcfour-hmac, arcfour-hmac 
销毁当前用户票据
[xiaodu@host150 ~]$ kdestroy
[xiaodu@host150 ~]$ klist
klist: No credentials cache found (filename: /tmp/krb5cc_1000)
强制刷新票据
[xiaodu@host150 ~]$ kinit -R

3.3超级用户密钥抽取

     抽取密钥并将其储存在本地 keytab 文件 /etc/krb5.keytab 中。这个文件由超级用户拥有,所以您必须是 root 用户才能在 kadmin shell 中执行以下命令:
[root@host150 logs]# kadmin.local -q "ktadd kadmin/admin"
[root@host150 logs]# klist -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   2 kadmin/admin@NBDP.COM
   2 kadmin/admin@NBDP.COM
   2 kadmin/admin@NBDP.COM
   2 kadmin/admin@NBDP.COM
   2 kadmin/admin@NBDP.COM
   2 kadmin/admin@NBDP.COM
   2 kadmin/admin@NBDP.COM
   2 kadmin/admin@NBDP.COM

4.创建keytab文件

        keytab 是包含 principals 和加密 principal key 的文件。
        keytab 文件对于每个 host 是唯一的,因为 key 中包含 hostname。keytab 文件用于不需要人工交互和保存纯文本密码,实现到 kerberos 上验证一个主机上的 principal。
       因为服务器上可以访问 keytab 文件即可以以 principal 的身份通过 kerberos 的认证,所以,keytab 文件应该被妥善保存,应该只有少数的用户可以访问。
       keytab必须用kadmin.local的方式生成,生成的keytab文件在/var/kerberos/krb5kdc/路径下面。

增加创建user1用户
kadmin.local:  addprinc user1
WARNING: no policy specified for user1@NBDP.COM; defaulting to no policy
Enter password for principal "user1@NBDP.COM":
抽取user1的keytab
kadmin.local:  xst -k xiaodu.keytab  xiaodu@NBDP.COM
kadmin.local:  exit
切换到对应目录,查看生成的xiaodu.keytab
[root@host150 krb5kdc]# cd /var/kerberos/krb5kdc
[root@host150 krb5kdc]# ll
-rw-------. 1 root root   474 Jan 26 15:04 xiaodu.keytab
复制生成的keytab到host150,用xiaodu用户登陆host150服务器,根据生成的keytab获取票据,缓存到/tmp/krb5cc_前缀文件[root@host150 krb5kdc]# scp xiaodu.keytab xiaodu@host150:/home/keydir/xiaodu
[xiaodu@host150 xiaodu]$kinit -k -t /home/keydir/xiaodu/xiaodu.keytab xiaodu/admin@NBDP.COM

kinit常用参数详解

kinit [-V][-l lifetime] [-s start_time][-r renewable_life][-p | -P][-f | -F][-a][-A][-C][-E][-v][-R][-k [-t keytab_file]][-c cache_name][-n][-S service_name][-I input_ccache][-T armor_ccache][-X attribute[=value]][principal]

[xiaodu@host150 xiaodu]$ kinit --help
kinit: unrecognized option '--help'
Usage: kinit [-V] [-l lifetime] [-s start_time] 
        [-r renewable_life] [-f | -F | --forwardable | --noforwardable] 
        [-p | -P | --proxiable | --noproxiable] 
        -n [-a | -A | --addresses | --noaddresses] 
        [--request-pac | --no-request-pac] 
        [-C | --canonicalize] 
        [-E | --enterprise] 
        [-v] [-R] [-k [-i|-t keytab_file]] [-c cachename] 
        [-S service_name] [-T ticket_armor_cache]
        [-X <attribute>[=<value>]] [principal]

    options:
        -V verbose
        -l lifetime
        -s start time
        -r renewable lifetime
        -f forwardable
        -F not forwardable
        -p proxiable
        -P not proxiable
        -n anonymous
        -a include addresses
        -A do not include addresses
        -v validate
        -R renew
        -C canonicalize
        -E client is enterprise principal name
        -k use keytab
        -i use default client keytab (with -k)
        -t filename of keytab to use
        -c Kerberos 5 cache name
        -S service
        -T armor credential cache
        -X <attribute>[=<value>]

5.ktutil整合生成的keytab文件

[root@host150 ~]# cd /var/kerberos/krb5kdc
[root@host150 krb5kdc]ktutil
ktutil: rkt a.keytab
ktutil: rkt b.keytab
ktutil: wkt merged.keytab
ktutil: exit
[root@host150 krb5kdc]klist -ket  merged.keytab

附:
kerberos官网地址:https://web.mit.edu/kerberos/krb5-1.12/doc/user/user_commands/kinit.html
 

 

### Kerberos 常用命令总结 以下是常见的 Kerberos 命令及其用途: #### 配置与管理 1. **kinit**: 用于获取 TGT (Ticket Granting Ticket),并存储到缓存中。 ```bash kinit username ``` 此命令会提示输入密码,并尝试通过 KDC 获取票据[^1]。 2. **klist**: 显示当前用户的票证缓存信息。 ```bash klist ``` 可查看已获得的 TGT 其他服务票据的信息[^2]。 3. **kdestroy**: 删除当前用户的票证缓存。 ```bash kdestroy ``` 清除所有存储在缓存中的票据,通常在退出登录时使用[^3]。 4. **kpasswd**: 修改用户的 Kerberos 密码。 ```bash kpasswd ``` 5. **ktutil**: 管理密钥表 (keytab 文件) 的工具。 ```bash ktutil addent -password -p principal_name -k key_number -e encryption_type wkt filename.keytab quit ``` 这些命令可用于向 keytab 中添加条目[^4]。 --- #### 数据库维护 6. **kdb5_util**: 用于管理操作 Kerberos 数据库。 ```bash /usr/sbin/kdb5_util create -s ``` 创建一个新的 Kerberos 数据库实例。`-s` 参数表示启用 stash 文件功能,以便无需每次启动都提供 master password。 7. 备份数据库: ```bash /usr/sbin/kdb5_util dump /path/to/backup.dump ``` 8. 恢复数据库: ```bash /usr/sbin/kdb5_util load /path/to/backup.dump ``` 9. 列出数据库中的主体 (principals): ```bash kadmin.local -q "get_principals" ``` --- #### 安全审计 10. **kadmind**: 提供远程管理 Kerberos 数据库的功能。 ```bash kadmind ``` 启动后可以通过 `add_principal`, `delete_principal` 等指令来增删改查主体。 11. 查看日志文件以排查问题: 日志路径通常是 `/var/log/krb5kdc.log` 或者由配置文件定义的位置。 --- #### Windows 平台支持 12. 自动续期脚本: 使用 PowerShell 脚本来定期检查更新 Kerberos 票据。 ```powershell powershell -File "C:\ProgramData\MIT\Kerberos5\checkKerberos.ps1" ``` 将此命令设置为计划任务运行,可确保长期连接的有效性。 --- ### 注意事项 上述命令适用于不同场景下的 Kerberos 部署环境,请根据实际需求调整参数或权限设置。对于生产环境中涉及敏感数据的操作,建议提前测试验证其安全性与稳定性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值