安裝配置 Kerberos

安裝配置 Kerberos

Kerberos 簡介

Kerberos 是一款用於非安全環境下的身份認證協議,它通過對稱密鑰加密方式向網絡服務證明用戶身份。

術語

  • AS(Authentication Server)= 認證服務器
  • KDC(Key Distribution Center)= 密鑰分發中心
  • TGT(Ticket Granting Ticket)= 票據授權票據,票據的票據
  • TGS(Ticket Granting Server)= 票據授權服務器
  • SS(Service Server)= 特定服務提供端

運行環境

三臺 CentOS 7.5 虛擬機

  • server1 192.168.78.101 ( Master KDC Server )
  • server2 192.168.78.102 ( Client )
  • server3 192.168.78.103 ( Client )

Java 版本

  • JDK 1.8.0_181

安裝配置

安裝配置 Kerberos Server

  1. 確保時鐘同步和 DNS 解析

​ 留意時鐘同步問題,如果 server 與 client 之間時間相差過大(默認是 5 分鐘),會導致 client 無法完成認證工作。這可以防止攻擊者使用過期的 ticket 僞裝成合法用戶實施攻擊。

​ 開啓時鐘同步:

[root@server1 ~]# timedatectl set-timezone Asia/Shanghai # 設置時區
[root@server1 ~]# timedatectl set-ntp yes # 開啓時鐘同步
[root@server1 ~]# timedatectl # 查看時鐘同步
  1. 安裝 Kerberos Server
[root@server1 ~]# yum install krb5-server krb5-libs krb5-auth-dialog

​ 出於安全考慮,最好將 KDC Server 安裝在專門的機器上,並且這臺機器不再運行其他服務。另外,由於 KDC Server 是個單點,當壓力較大時也要務必保證這臺機器的帶寬和性能。(目前用於 DEV 環境,故沒那麼多講究)

  1. 配置 realm name 和 domain-to-realm 映射

​ 編輯 /etc/krb5.conf,主要是將 EXAMPLE.COM 替換爲自定義的 Realm Name,如我們此處將其定義爲 DATACENTER.COM,並將 example.com 替換爲對應的服務器域名,比如我們此處設置爲 server1 。按照約定,Realm Name 均爲大寫,主機名和域名均爲小寫。

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]
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 default_realm = DATACENTER.COM
 default_ccache_name = KEYRING:persistent:%{uid}
# udp_preference_limit = 1

[realms]
DATACENTER.COM = {
   kdc = server1
   admin_server = server1
}

[domain_realm]
.datacenter.com = DATACENTER.COM
datacenter.com = DATACENTER.COM

​ 編輯 /var/kerberos/krb5kdc/kdc.conf ,將 EXAMPLE.COM 替換爲自定義的 *DATACENTER.COM。此處我們禁用了 AED-256 加密,如果啓用的話,需要下載 JCE (如對應 Java 1.8 版本)文件,並替換 $JAVA_HOME/jre/lib/security/policy/limited 目錄下的 JAR 包。

[root@server1 ~]# vi 

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
DATACENTER.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
  # 移除 aes256-cts:normal
  supported_enctypes = aes128-cts:normal 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
 }
  1. 使用 kdb5_util 創建數據庫
[root@server1 ~]# /usr/sbin/kdb5_util create -s

create 創建存儲 Kerberos realm 的數據庫,-s 參數創建一個 存儲主服務器 key 的stash 文件,如果後面沒有指定文件,則 Kerberos 會提示輸入密碼。

  1. 編輯 Kerberos ACL

​ 編輯 /var/kerberos/krb5kdc/kadm5.acl ,該文件用於 kadmind 確定哪個 principal 具有訪問 Kerberos 數據庫的權限,以及具有何種訪問級別。可設置爲如下:

*/[email protected]	*

​ 大多數用戶在 Kerberos 數據庫中都表示爲單個的 principal(不帶 instance,如 [email protected]);但像 root/[email protected] 這樣,擁有第二個 principal且爲 admininstance 的用戶將能對 Kerberos 數據庫行使所有管理權操作。

  1. 在 KDC 終端創建第一個 principal

Principal 代表 Kerberos 系統中的唯一 ID,作爲接收 Kerberos ticket 並以此訪問對應服務的主體[^principal]。Principal/ 分隔的幾部分組成,也可作爲普通主體不包含 / 分隔符。另外,我們也可以在後面加上 @Realm ,如果沒有指定 Realm ,將使用 krb5.conf 中定義的默認 Realm

  • Primary: 如果 Principal 代表一個用戶,則 primary 可爲用戶名;如果代表服務,則可爲服務名;如果代表 host,則可以直接使用字符串 “host”
  • Instance: 可以進一步描述用戶,作爲該用戶 / 服務的一個實例,如 root/[email protected],再如 kafka/[email protected]
  • Realm: 可以爲一切 ASCII 碼,但通常爲域名,約定大寫。如 datacenter.com 可寫爲 DATACENTER.COM
[root@server1 ~]# /usr/sbin/kadmin.local -q "addprinc root/admin"
  1. 開啓 Kerberos 服務
[root@server1 ~]# systemctl start krb5kdc # 開啓服務
[root@server1 ~]# systemctl start kadmin
[root@server1 ~]# systemctl enable krb5kdc # 開機啓動
[root@server1 ~]# systemctl enable kadmin
  1. 命令行方式添加 pincipal
kadmin.local:  ank -randkey [email protected]

kadmin.localkamdin 是操作 KDC 的命令行接口,可以用來查看、添加和刪除 principal 等。 kadmin.local 只能用於 KDC 本地,無需輸入密碼; kamdin 可用於客戶端,需輸入密碼。

  1. 驗證

​ 使用 kinit 獲取 ticket 並存入證明緩存文件中,然後使用 klist 查看,或使用 kdestroy 銷燬緩存和證明。

[root@server1 ~]# kinit root/[email protected]
[root@server1 ~]# klist

安裝配置 Kerberos Client

​ 配置 Kerberos Client 僅需要安裝 client 包,併爲每臺 Client 提供 krb5.conf 配置文件。

  1. 確保時鐘同步和域名解析
  2. 在每臺 Client 安裝 krb5-libskrb5-workstation
[root@server2 ~]# yum install krb5-libs krb5-workstation
[root@server3 ~]# yum install krb5-libs krb5-workstation
  1. 爲每臺 client 提供 /etc/krb5.conf

​ 文件與 KDC Server 保持一直就可以了,如果服務期間啓用了 SSH 登陸,可以使用 scp 命令傳輸;不然也可以手動拷貝或其他方式。

[root@server1 ~]# scp /etc/krb5.conf root@server2:/etc/krb5.conf
[root@server1 ~]# scp /etc/krb5.conf root@server3:/etc/krb5.conf
  1. 爲每臺 Client 創建自己的 principal (可選)

​ 如果使用了 Kerberos 提供的 sshd, kshdklogind 等命令,在使用前需要首先爲每臺 Client 創建自己的 principal。其中 instance 是主機 hostname, -randkey 表示生成隨機 key。

kadmin:  ank -randkey host/[email protected] # 創建 host/server1 principal,server2/server3 同理
kadmin:  xst -k /etc/security/keytabs/host.keytab host/[email protected] # 添加 host/server1 principal 至 host.keytab,server2/server3 同理
  1. 驗證每臺 Client 的 principal 可用 (可選)
[root@server2 ~]# klist -kt /etc/security/keytabs/host.keytab
[root@server2 ~]# kinit -kt /etc/security/keytabs/host.keytab root/[email protected]
[root@server2 ~]# kadmin -p root/admin -q "getprincs" # 如果是 admin,且非隨機密碼,可使用密碼驗證

引用

RedHat: USING KERBEROS

MIT Kerberos Documentation

Kerberos 維基百科

Kerberos Principals

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章