kerberos安裝配置與使用
文章目錄
- 1.Kerberos協議:
- 2.安裝
- 2.1 安裝kerberos前,要確保主機名可以被解析。
- 2.2 確保環境可用
- 2.3 KDC的主機
- 2.3.2 配置`kdc.conf`
- 2.3.3 kadm5.acl
- 2.3.4 配置krb5.conf
- 2.3.5 建立/初始化Kerberos database
- 2.3.6 新增database administrator
- 2.3.7 為database administrator設定ACL許可權
- 2.3.8 在master KDC啟動Kerberos daemons
- 2.3.9 測試
- 2.4 配置 Kerberos Clients
- 命令總結
1.Kerberos協議:
Kerberos協議主要用於計算機網路的身份鑑別(Authentication), 其特點是使用者只需輸入一次身份驗證資訊就可以憑藉此驗證獲得的票據(ticket-granting ticket)訪問多個服務,即SSO(Single Sign On)。由於在每個Client和Service之間建立了共享金鑰,使得該協議具有相當的安全性
2.1. 環境配置
2.安裝
2.1 安裝kerberos前,要確保主機名可以被解析。
主機名 內網IP 角色
cdh-server2 192.168.60.19 master KDC
cdh-server1 192.168.60.20 kerberos client
cdh-server3 192.168.60.21 kerberos client
2.2 確保環境可用
確保所有的clients與servers之間的時間同步以及DNS正確解析
2.3 KDC的主機
選擇一個主機來執行KDC,並在該主機上安裝krb-5libs,krb5-server,已經krb5-workstation:
[[email protected] /]# yum install krb5-server krb5-libs krb5-auth-dialog
KDC的主機必須非常自身安全,一般該主機只執行KDC程式。本文中我們選擇cdh-server2
作為執行KDC的主機。
在安裝完上述的軟體之後,會在KDC主機上生成配置檔案
/etc/krb5.conf
和/var/kerberos/krb5kdc/kdc.conf
,它們分別反映了realm name
以及 domain-to-realm mappings。
[[email protected] /]# ll /etc/krb5.conf
-rw-r--r-- 1 root root 709 Jul 21 20:45 /etc/krb5.conf
[[email protected] /]# ll /var/kerberos/krb5kdc/
total 8
-rw------- 1 root root 22 Apr 11 2018 kadm5.acl
-rw------- 1 root root 451 Apr 11 2018 kdc.conf
[[email protected] /]#
2.3.2 配置kdc.conf
預設放在 /var/kerberos/krb5kdc/kdc.conf
。或者通過覆蓋KRB5_KDC_PROFILE
環境變數修改配置檔案位置。
[[email protected] /]# vi /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
YONG.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 = 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
max_renewable_life = 7d
}
說明:
YONG.COM
:是設定的realms。名字隨意。Kerberos可以支援多個realms,會增加複雜度。本文不探討。大小寫敏感,一般為了識別使用全部大寫。這個realms跟機器的host沒有大關係。max_renewable_life = 7d
涉及到是否能進行ticket的renwe必須配置。master_key_type
:和supported_enctypes
預設使用aes256-cts
。由於,JAVA使用aes256-cts
驗證方式需要安裝額外的jar包。推薦不使用。acl_file
:標註了admin的使用者許可權。檔案格式是
Kerberos_principal permissions [target_principal] [restrictions]支援萬用字元等。admin_keytab
:KDC進行校驗的keytab
。後文會提及如何建立。supported_enctypes
:支援的校驗方式。注意把aes256-cts去掉。
2.3.3 kadm5.acl
[[email protected] /]# cat /var/kerberos/krb5kdc/kadm5.acl
*/[email protected] *
[[email protected] /]#
2.3.4 配置krb5.conf
/etc/krb5.conf
: 包含Kerberos的配置資訊。例如,KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的機器上的配置檔案都同步。這裡僅列舉需要的基本配置。
配置示例:
[[email protected] /]# vi /etc/krb5.conf
[logging]
default=FILE:/var/log/kerberos/krb5libs.log
kdc = FILE:/var/log/kerberos/krb5kdc.log
admin_server = FILE:/var/log/kerberos/kadmind.log
[libdefaults]
default_realm = YONG.COM
dns_lookup_kdc = false
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
default_tgs_enctypes = aes256-cts aes128-cts des-hmac-sha1 des-cbc-md5 arcfour-hmac camellia256-cts camellia128-cts des-cbc-crc
default_tkt_enctypes = aes256-cts aes128-cts des-hmac-sha1 des-cbc-md5 arcfour-hmac camellia256-cts camellia128-cts des-cbc-crc
permitted_enctypes = aes256-cts aes128-cts des-hmac-sha1 des-cbc-md5 arcfour-hmac camellia256-cts camellia128-cts des-cbc-crc
# udp_preference_limit = 1
kdc_timeout = 3000
[realms]
YONG.COM = {
kdc = cdh-server2
admin_server = cdh-server2
default_domain = YONG.COM
}
[domain_realm]
YONG.COM = YONG.COM
說明:
[logging]
:表示server端的日誌的列印位置[libdefaults]
:每種連線的預設配置,需要注意以下幾個關鍵的小配置default_realm = YONG.COM
預設的realm,必須跟要配置的realm的名稱一致。udp_preference_limit = 1
禁止使用udp可以防止一個YONG中的錯誤oticket_lifetime
表明憑證生效的時限,一般為24小時。orenew_lifetime
表明憑證最長可以被延期的時限,一般為一個禮拜。當憑證過期之後,
對安全認證的服務的後續訪問則會失敗。kdc
:代表要kdc的位置。格式是機器:埠
admin_server
:代表admin的位置。格式是機器:埠
default_domain
:代表預設的域名
2.3.5 建立/初始化Kerberos database
初始化並啟動:完成上面兩個配置檔案後,就可以進行初始化並啟動了。
[[email protected] /]# mkdir /var/log/kerberos
[[email protected] /]# /usr/sbin/kdb5_util create -s -r YONG.COM
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'YONG.COM',
master key name 'K/[email protected]'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:admin
Re-enter KDC database master key to verify:admin
[[email protected] /]#
其中:
[-s]
表示生成stash file
,並在其中儲存master server key(krb5kdc
);
[-r]
來指定一個realm name
—— 當krb5.conf
中定義了多個realm時才是必要的。
儲存路徑為/var/kerberos/krb5kdc
如果需要重建資料庫,將該目錄下的principal相關的檔案刪除即可
在此過程中,我們會輸入database的管理密碼。這裡設定的密碼一定要記住,如果忘記了,就無法管理Kerberos server。
當Kerberos database
建立好後,可以看到目錄 /var/kerberos/krb5kdc
下生成了幾個檔案:
[[email protected] /]# ll /var/kerberos/krb5kdc/
total 24
-rw------- 1 root root 19 Nov 1 19:08 kadm5.acl
-rw------- 1 root root 458 Nov 1 19:03 kdc.conf
-rw------- 1 root root 8192 Nov 1 19:23 principal
-rw------- 1 root root 8192 Nov 1 19:23 principal.kadm5
-rw------- 1 root root 0 Nov 1 19:23 principal.kadm5.lock
-rw------- 1 root root 0 Nov 1 19:23 principal.ok
[[email protected] /]#
2.3.6 新增database administrator
我們需要為Kerberos database
新增administrative principals (
即能夠管理database
的principals
) —— 至少要新增1個principal
來使得Kerberos的管理程序kadmind
能夠在網路上與程式kadmin
進行通訊。
在maste KDC上執行:這一步是新增一個principle
,注意下面要用
[[email protected] /]# /usr/sbin/kadmin.local -q "addprinc admin/admin"
Authenticating as principal root/[email protected] with password.
WARNING: no policy specified for admin/[email protected]; defaulting to no policy
Enter password for principal "admin/[email protected]": admin
Re-enter password for principal "admin/[email protected]":admin
Principal "admin/[email protected]" created.
[[email protected] /]#
併為其設定密碼。
[[email protected] /]# kadmin.local
Authenticating as principal root/[email protected] with password.
kadmin.local: listprincs
K/[email protected]
admin/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kiprop/[email protected]
krbtgt/[email protected]
kadmin.local:
可以直接執行在master KDC上,而不需要首先通過Kerberos的認證,實際上它只需要對本
地檔案的讀寫許可權。
2.3.7 為database administrator設定ACL許可權
在KDC上我們需要編輯acl檔案來設定許可權,該acl檔案的預設路徑是 /var/kerberos/krb5kdc/kadm5.acl
(也可以在檔案kdc.conf
中修改)。Kerberos
的kadmind daemon
會使用該檔案來管理對Kerberos database
的訪問許可權。對於那些可能會對pincipal
產生影響的操作,acl
檔案也能控制哪些principal
能操作哪些其他pricipals
。
我們現在為administrator
設定許可權:將檔案/var/kerberos/krb5kdc/kadm5.acl
的內容編輯為
[[email protected] /]# cat /var/kerberos/krb5kdc/kadm5.acl
*/[email protected] *
[[email protected] /]#
代表名稱匹配*/[email protected]
都認為是admin
,許可權是*
代表全部許可權。
2.3.8 在master KDC啟動Kerberos daemons
手動啟動:
[[email protected] /]# service krb5kdc start
Redirecting to /bin/systemctl start krb5kdc.service
[[email protected] /]# service kadmin start
Redirecting to /bin/systemctl start kadmin.service
[[email protected] /]# service krb5kdc status
Redirecting to /bin/systemctl status krb5kdc.service
● krb5kdc.service - Kerberos 5 KDC
Loaded: loaded (/usr/lib/systemd/system/krb5kdc.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2018-11-01 19:33:07 CST; 18s ago
Process: 5643 ExecStart=/usr/sbin/krb5kdc -P /var/run/krb5kdc.pid $KRB5KDC_ARGS (code=exited, status=0/SUCCESS)
Main PID: 5644 (krb5kdc)
CGroup: /system.slice/krb5kdc.service
└─5644 /usr/sbin/krb5kdc -P /var/run/krb5kdc.pid
Nov 01 19:33:07 cdh-server2 systemd[1]: Starting Kerberos 5 KDC...
Nov 01 19:33:07 cdh-server2 systemd[1]: Started Kerberos 5 KDC.
[[email protected] /]# service kadmin status
Redirecting to /bin/systemctl status kadmin.service
● kadmin.service - Kerberos 5 Password-changing and Administration
Loaded: loaded (/usr/lib/systemd/system/kadmin.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2018-11-01 19:33:17 CST; 15s ago
Process: 5665 ExecStart=/usr/sbin/_kadmind -P /var/run/kadmind.pid $KADMIND_ARGS (code=exited, status=0/SUCCESS)
Main PID: 5666 (kadmind)
CGroup: /system.slice/kadmin.service
└─5666 /usr/sbin/kadmind -P /var/run/kadmind.pid
Nov 01 19:33:17 cdh-server2 systemd[1]: Starting Kerberos 5 Password-changing and Administration...
Nov 01 19:33:17 cdh-server2 systemd[1]: Started Kerberos 5 Password-changing and Administration.
[[email protected] /]#
設定開機自動啟動:
[[email protected] /]# chkconfig krb5kdc on
[[email protected] /]# chkconfig kadmin on
現在KDC
已經在工作了。這兩個daemons
將會在後臺執行,可以檢視它們的日誌檔案,上面配置的有。
2.3.9 測試
可以通過命令kinit
來檢查這兩個daemons
是否正常工作。
登入
[[email protected] /]# kinit admin/admin
Password for admin/[email protected]:admin
查詢登入狀態
[[email protected] /]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/[email protected]
Valid starting Expires Service principal
11/01/18 20:34:45 11/02/18 20:34:45 krbtgt/[email protected]
renew until 11/08/18 20:34:45
退出
[[email protected] /]# kdestroy
[[email protected] /]# klist
klist: No credentials cache found (filename: /tmp/krb5cc_0)
[[email protected] /]#
可以看到伺服器是成功的。
2.4 配置 Kerberos Clients
2.4.1 安裝
Installing Kerberos Client(CentOS7可以省略此步驟)
在另外兩臺主機上安裝kerberos客戶端。
yum install krb5-workstation krb5-libs krb5-auth-dialog
[[email protected] ~]# yum install krb5-devel krb5-workstation -y
[[email protected] ~]# yum install krb5-devel krb5-workstation -y
[[email protected] ~]# yum install krb5-devel krb5-workstation -y
[[email protected] ~]# scp /etc/krb5.conf cdh-server1:/etc/krb5.conf
krb5.conf 100% 872 1.9MB/s 00:00
[[email protected] ~]# scp /etc/krb5.conf cdh-server3:/etc/krb5.conf
krb5.conf 100% 872 1.3MB/s 00:00
[[email protected] ~]#
2.4.1 配置krb5.conf
配置這些主機上的/etc/krb5.conf,這個檔案的內容與KDC中的檔案保持一致即可
命令總結
/
代表或者
命令 | 格式 | 案例 |
---|---|---|
進入kadmin | kadmin.local/kadmin | |
建立資料庫 | kdb5_util create -r JENKIN.COM -s | |
啟動kdc服務 | service krb5kdc start | |
啟動kadmin服務 | service kadmin start | |
修改當前密碼 | kpasswd | |
測試keytab可用性 | kinit -k -t /var/kerberos/krb5kdc/keytab/root.keytab root/[email protected] | |
檢視keytab | klist -e -k -t /etc/krb5.keytab | |
清除快取 | kdestroy | |
通過keytab檔案認證登入 | kinit -kt /var/run/cloudera-scm-agent/process/***-HIVESERVER2/hive.keytab hive/node2 |
kadmin模式下:
命令 | 格式 | 案例 |
---|---|---|
生成隨機key的principal | addprinc -randkey root/[email protected] | |
生成指定key的principal | Addprinc -pw **** admin/[email protected] | |
檢視principal | listprincs | |
修改admin/admin的密碼 | cpw -pw xxxx admin/admin | |
新增/刪除principle | addprinc/delprinc admin/admin | |
直接生成到keytab | ktadd -k /etc/krb5.keytab host/[email protected] | |
設定密碼策略(policy) | addpol -maxlife “90 days” -minlife “75 days” -minlength 8 -minclasses 3 -maxfailure 10 -history 10 user | |
新增帶有密碼策略的使用者 | addprinc -policy user hello/[email protected] | |
修改使用者的密碼策略 | modprinc -policy user1 hello/[email protected] | |
刪除密碼策略 | delpol [-force] user | |
修改密碼策略 | modpol -maxlife “90 days” -minlife “75 days” -minlength 8 -minclasses 3 -maxfailure 10 user |