文章目錄
- 前言
- 一、Kerberos原理
- 1.1、數據安全防護(kerberos所屬的層次)
- 1.2、Kerberos介紹
- 1.3、Kerberos名詞介紹
- 1.4、Kerberos術語
- 1.5、Kerberos認證流程
- 1.5.1、Kerberos流程圖
- 1.5.2、第一次通信:客戶端與AS
- 1.5.3、第二次通信:客戶端與TGS
- 1.5.4、第三次通信:客戶端與服務器
- 小結
- 1.6、Kerberos優勢
- 二、Kerberos安裝與使用
- 2.1、Kerberos常見名詞術語(realm、principal、keytab、kadmin)
- 2.2、參數配置文件詳解
- ①/var/kerberos/krb5kdc/kdc.conf(服務端)
- ②/etc/krb5.conf(客戶端)
- 2.3、Kerberos安裝
- 2.3.1、實現scp、rsync以及集群xsync分發
- 2.3.2、詳細安裝Kerberos(服務端與客戶端)
- 1、安裝Kerberos服務端
- 2、安裝Kerberos客戶端
- 3、配置服務端kdc.conf文件(暫不修改)
- 4、所有客戶端配置krb5.conf
- 5、服務端配置kadmin5.acl文件(暫不修改)
- 6、服務器初始化Kadmin數據庫(暫不修改)
- 2.4、Kerberos使用
- ①kadmin.local(服務器端)
- kadmin.local:登錄
- listprincs:查看當前數據庫具有的主體
- add_principal、delete_principal等:創建、刪除、修改密碼、查看與銷毀當前票據
- ②?獲取幫助文檔
- ③kadmin(客戶端兩種登錄方式密碼、keytab,含創建keytab操作)
前言
個人介紹
博主介紹:?目前全網粉絲3W+,csdn博客專家、Java領域優質創作者,博客之星、阿里云平臺優質作者、專注于Java后端技術領域。
涵蓋技術內容:Java后端、大數據、算法、分布式微服務、中間件、前端、運維等。
博主所有博客文件目錄索引:博客目錄索引(持續更新)
視頻平臺:b站-Coder長路
當前博客相關內容介紹
學習kerberos主要原因是目前部門里會有測試kerberos連通性的問題bug,所以以此來系統學習下kerberos安全認證,主要是學習在kerberos安全配置下如何去訪問各個大數據組件。
Kerberos安全認證系列學習教程(B站):https://www.bilibili.com/video/BV1rr421t7Zt【馬士兵的系列課程】
學習配套源碼(Gitee):https://gitee.com/changluJava/demo-exer/tree/master/bigdata/kerberos/kerberosAuth
博主kerberos學習系列專欄筆記(可見)上方博客文件索引。
一、Kerberos原理
1.1、數據安全防護(kerberos所屬的層次)
企業搭建好集群,如何做安全認證?
數據以及組件被用戶最終訪問,一般包含四個安全認證:
- 邊界安全:如防火墻、安全組。
- 認證:不同的人有不同的角色,是否有權限訪問數據。(典型就是kerberos)
- 授權:限制組里的人員不同的操作來進行授權,例如決定哪些用戶可以訪問哪些表。(典型就是ranger)
- 審計:可以對A用戶對集群訪問進行日志記錄。
- 加密:讀取數據可以進行加密傳遞出去。
一句話來講:決定一個用戶是否有權限訪問一個組件,認證是授權的基礎,只有通過認證的才會進行授權。
1.2、Kerberos介紹
核心描述:Kerberos是一個網絡身份驗證協議,一般服務包含有client、server,中間流程client需要先向kerberos倆進行認證,之后才能夠去進行訪問服務。
官網:https://web.mit.edu/kerberos
核心流程:Kerberos協議通過使用密鑰加密為client/Server應用程序提供身份認證,不同于其他網絡安全保證整個通信過程傳輸,Kerberos側重通信前雙方身份認定工作,幫助客戶端以及服務端驗證是真正的自己而不是別人,從而能夠使得 網絡通信兩端能夠完全信任對方身份,在不安全的網絡中完成一次安全的身份認證而進行安全通信。
應用:在大數據開發中,很多大數據組件支持Kerberos身份認證,如HDFS、Yarn、Hive、Hbase、Spark、Kafka等。
- 其中HDFS默認就是使用的kerberos來進行認證的。
1.3、Kerberos名詞介紹
主要分為對稱加密與非對稱加密:
- 對稱加密:速度快,client、server都存儲私鑰進行加解密,不安全。
- 非對稱加密:速度慢,client有公鑰、server有私鑰,統一使用公鑰來進行加密,在服務器端進行解密。
1.4、Kerberos術語
整個Kerberos認證流程涉及到三種角色:客戶端Client、服務端Server、密鑰分發中心KDC(Key Distribution Center)
- 客戶端(Client):發送請求一方。
- 服務端(Server):接收請求一方。
- 密鑰分發中心(Key Distribution Center,KDC):KDC是一個網絡服務,提供ticket和臨時會話密鑰。由三個部分組成:①認證服務器(Authentication Server,AS)。②票證授權服務器(Ticket Grantion Server,TGS)。③Kerberos數據庫。
認證服務器AS
:認證服務器,負責認證客戶端的身份并發放客戶端訪問TGS(Ticket Grantion Ticket,票據授予票據)票證授予服務器TGS
:票據授予服務器。用來發放客戶端訪問服務器端所需的服務授予票據(ticket)。Kerberos數據庫
:客戶端和服務端添加進kerberos系統時有對應的密鑰,數據庫負責存儲這些密鑰,并保存客戶端和服務端的基本信息,如:用戶名、用戶IP地址、服務器端IP、服務端名稱等。
1.5、Kerberos認證流程
1.5.1、Kerberos流程圖
Kerberos流程圖如下所示:
通信的過程如123456,身份驗證以及票據授予都在Kerberos中完成,只有認證通過之后才能夠去訪問服務端。TGS發放的ticket就是加密的內容。
1、首先客戶端向KDC中的AS發送驗證。
2、AS會給你認證并且發一個ticket票據,用于通信TGS的。
3、拿著ticket來KDC中的TGS來驗票。
4、TGS給你訪問服務端的ticket。
5、客戶端拿著給你的ticket來訪問服務端。
6、最終服務器給你響應結果。
核心簡述Kerberos認證過程流程:客戶端向KDC請求要訪問的目標服務器的服務授予票據(ticket),然后客戶端拿著從KDC獲取的服務授予票據(ticket)訪問服務端。
整個過程為了保證客戶端和服務端為正確的客戶端和服務端,整個Keberos認證包含有三次交互。
1.5.2、第一次通信:客戶端與AS
第一次通信:客戶端向KDC AS獲取TGT
為了獲取訪問服務端的服務授予票據,客戶端首先向KDC向AS獲取TGT(票據授予票據),客戶端需要使用TGT去KDC中的TGS(票據授予中心)獲取訪問服務端所需的Ticket(服務授予票據)才能夠進一步的與服務端通信。
客戶端首先向KDC以明文方式發起請求,該請求中攜帶了訪問KDC的用戶名、主機IP、當前時間戳。由于客戶端是第一次訪問KDC,KDC中AS(認證服務器)接收請求后,去kerberos數據庫中驗證是否存在訪問的用戶名,這個過程不會判斷身份的可靠性。如果沒有該用戶名,認證失敗;若是存在該用戶名,AS會返回兩部分信息給客戶端:
- 第一部分:信息為票據授予票據(TGT),TGT包含客戶端的名稱、IP、當前時間戳、客戶端即將訪問TGS的名稱、TGT的有效時間。客戶端與TGS之間通信的session_key(簡稱CT_SK),該key后續會用來對客戶端向TGS發送的消息加密。
整個TGT使用TGS公鑰加密,客戶端是解密不了的,后續客戶端需要使用TGT去KDC中的TGS(票據授予中心)獲取訪問服務端所需的Ticket(服務授予票據)
- 第二部分是使用客戶端公鑰加密的信息,該信息中包含客戶端和TGS通信的session_key(CT_SK)、客戶端將要訪問TGS的名稱、TGT的有效時間以及當前的時間戳。該部分內容由于是使用客戶端密鑰進行加密,所以客戶端拿到該部分內容可以使自己私鑰進行解密,如果這時數據被劫持到假的客戶端,由于真正客戶端的私鑰沒有在網絡中傳輸過,所以假的客戶端無法對這部分信息進行解密,認證流程中斷。只有正確的客戶端才能夠對這部分信息進行解密,這個過程相當于是對客戶端進行認證。【對稱加密】
1.5.3、第二次通信:客戶端與TGS
第二次通信:客戶端向KDC TGS獲取目標服務器的服務授予票據ticket
客戶端收到了來自KDC AS 返回的兩部分信息后,會對第二部分信息進行解密,可以獲取與TGS通信的session_key(CT_SK)、將非要訪問TGS的名稱、時間戳。
校驗1:首先會去檢查是否與自己返送數據的時間戳相差5分鐘,如果大于5分鐘則認為該AS是假的,認證中斷。如果時延合理,客戶端便向TGS發起請求去獲取要訪問目標服務端的服務授予票據ticket。
校驗2:對第三部分解密之后看第二部分和第三部分的客戶端名稱、客戶端IP、時間戳一致,則通過校驗。
客戶端向KDC TGS請求的信息包括三部分:
1、客戶端將要訪問的服務端名稱。【不加密】
2、客戶端從KDC AS中獲取的第一部分信息,即:使用TGS密鑰加密的TGT,通過TGT客戶端可以從TGS中獲取訪問服務器的服務授予票據ticket。
3、使用CT_SK加密的信息,包括客戶端名稱、IP、時間戳。
**響應內容兩部分:**其中CT_SK可以將CT_SK加密的內容進行解密(第二部分)
1、ST部分,標識server_ticket。【實際就是一張票】
2、使用ST_SK加密內容。其中ST有效時間就是ticket票據有效時間以及CS_SK(用于后面進行加密的)
1.5.4、第三次通信:客戶端與服務器
當客戶端接收到了KDC TGS的響應后,對第二部分的內容進行解密,獲取CS_SK、時間戳、ST有效時間,檢查時間戳在時間延遲范圍內,向服務端進行請求。
服務端過程:首先對第二部分Server公鑰加密內容進行解密,拿到其中的CS_SK之后對第一部分進行解密,然后去校驗第一部分解密過后的客戶端、客戶端IP、時間戳,若是通過則能夠進行通信了。
詳細過程:
- 客戶端會通過CS_SK將客戶端名稱、時間戳進行加密發送給服務端,還會將服務授予票據ST_發送給服務端。
- 服務端收到來自客戶端的請求,使用自己的私鑰對ST進行解密獲取信息(客戶端名稱、IP、需要訪問的服務端的IP、ST有效時間、時間戳、用于客戶端與服務端之間通信的CS_SK),將CS_SK取出對客戶端發來的通過CS_SK加密的內容進行解密獲取信息(客戶端名稱、時間戳),如果客戶端信息一致說明該客戶端是通過KDC認證的客戶端,可以進一步提供服務,這是服務端返回通過CS_SK加密的接收請求信息給客戶端,客戶端接收到該請求后,使用緩存在客戶端的CS_SK解密后,也確認了服務端身份,這個過程服務端會通過數字證書證明自己身份。
小結
上述三個步驟代表了整個Kerberos認證的流程,通過的客戶端和服務端都確認了雙方的身份信息。這個過程使用了各方的密鑰,且密鑰的種類一直變化,為了防止網絡攔截密鑰,這些密鑰都是臨時生成的session key,即只有一次Session會話中起作用,及時密鑰被劫持,等待密鑰破解后可能會話早就結束了,這為整個Kerberos認證過程保障了較高的安全性。
1.6、Kerberos優勢
Kerberos具備如下三點優勢:
1、密碼無需進行網絡傳輸,基于Ticket實現身份認證,保障安全性。
2、雙向認證,整個認證過程,不僅客戶端進行認證,待訪問的服務也需要進行身份認證。
3、高性能,密鑰采用了對稱加密方式(整個sessionkey,也可以配置非對稱加密),相比于SSL的密鑰操作快幾個數量級,一旦Client獲得用過訪問某個Server的Ticket,那么Server就能夠根據這個Ticket實現client的驗證,而無需KDC的再次參與。
二、Kerberos安裝與使用
2.1、Kerberos常見名詞術語(realm、principal、keytab、kadmin)
realm
:領域,身份驗證。每個用戶訪問都可以跟上一個領域,表示訪問的邊界,可以設置多個領域如多個部門,第一個部門、第二個部門。
- 詳細解釋:領域確定了管理邊界,所有主體均屬于特定的kerberos域。
principal
:表示的是用戶,客戶端訪問服務端了。主要三個部分組成:名字(name)、實例(instance)、域(realm)。例如我現在要訪問hadoop集群。
-
詳細解釋:主體,Principal主體用于標識身份,每個參與Kerberos認證協議的用戶名和服務都需要一個主體來唯一標識自己。Principal由三個部分組成:名字(name)、實例(instance)、域(realm),例如一個標準的kerberos用戶/服務表示為:name/instance@REALM。
name
:表示用戶名。instance
:對name的進一步描述,例如name所在的主機名或name的類型等,可以省略,與第一個部分使用"/"分割。realm
:表示kerberos在管理上的劃分,在KDC中所負責的一個域數據庫稱作為Realm,這個數據庫中存放該網絡范圍內的所有Principal和它們的密鑰,Realm一般都是大寫。
-
主體包含兩個部分:包含用戶主體(某個用戶去訪問服務可以使用kerberos認證)、服務主體(節點之間服務通信也可以通過kerberos認證)。都是用于認證身份的。
- 舉例用戶主體命名:zhangsan/admin@EXAMPLE.com,形式為:用戶名/角色/releam域,一般這個域是一個公司域名、部分域名。
- 舉例服務主體命名:ftp/site.example.com@EXAMPLE.COM,形式為:服務名/地址/releam域。
-
邏輯寫法:name/instance@REALM,name就是用戶名(服務名稱)、instance就是角色(服務主體別名)、REALM表示邊界領域。
兩個名詞:一般kerberos會直接搭建在server服務端中
keytab
:密鑰文件,該密鑰文件中包含有Principal主體的用戶名及密碼,那么可以直接使用keytab來完成驗證。- 一般認證有兩種方式,第一種方式是使用密碼方式,用戶輸入用戶名及密碼來完成登錄驗證(kerberos認證)。第二種方式則是使用的kerberos密鑰文件來進行身份驗證(該密鑰文件就是keytab文件)
- 應用場景:一般在服務器上會直接使用用戶名、密碼方式來進行登錄,若是在windows中去訪問服務器中的kerberos通常使用keytab文件來進行主體的認證。
kadmin
:高級管理員命令,一般是在kerberos的主節點上使用,使用kadmin可以創建主體,執行kerberos里一些各種命令,操作kerberos入口,也可以在集群任意一臺節點執行,常用在主節點執行。主要負責存儲KDC數據庫,管理principal信息。
2.2、參數配置文件詳解
①/var/kerberos/krb5kdc/kdc.conf(服務端)
默認包含參數如下:
[kdcdefaults]kdc_ports = 88kdc_tcp_ports = 88[realms]EXAMPLE.COM = {#master_key_type = aes256-ctsacl_file = /var/kerberos/krb5kdc/kadm5.acldict_file = /usr/share/dict/wordsadmin_keytab = /var/kerberos/krb5kdc/kadm5.keytabsupported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normallarcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha11
:normal des-cbc-md5:normal des-cbc-crc:normal}
該配置文件文件中各個配置項可參考:https://web.mit.edu/kerberos/krb5-1.20/doc/admin/conf_files/kdc_conf.html#kdc-conf-5
kdc_ports
:KDC服務監聽的端口。EXAMPLE.com
:設定的realms,名字隨意。kerberos可以支持多個realms,一般為大寫。master_key_type
:指定kerberos主密鑰加密算法類型,默認使用aes256-cts。acl_file
:ACL文件路徑,Kerberos通過該文件來確定哪些Principal具有哪些權限。dict_file
:存放一個由多行字符串構成的文本文件,該文件中的字符串禁止作為密碼使用。admin_keytab
:KDC進行校驗的keytab,該keytab用于認證管理員的密鑰。supported_enctypes
:支持的加密算法類型。
②/etc/krb5.conf(客戶端)
某兩個參數:
ticket_lifetime=24h # 一開始申請的票據過期時間為24h
renew_lifetime=7d # 重新續簽最多只有7天,7天之后再續沒用
關于該配置文件的配置項內容詳細參考:https://web/mit.edu/kerberos/krb5-1.20/doc/admin/conf_files/krb5_conf.html#krb5-conf-5
配置文件內容解釋:
- logging模塊:配置默認即可,KDC和Kadmin服務的log文件錄制。
- libdefaults模塊:
- dns_loogup_realm:使用主機域名到kerberos domain的映射定位KDC。
- ticket_lifetime:ticket過期時間,超過這個時間ticket需要重新申請活renew。
- renew_lifetime:ticket可進行renew的時間限制。
- forwardable:如果配置為true,在KDC允許的情況下,初始ticket可以被轉發。
- rdns:是否可使用逆向DNS。
- pkinit_anchors:簽署KDC證書的根證書。
- default_realm:指定默認的realm,需要配置,否則后續Kerberos服務不能正常啟動。
- default__ccache_name:默認憑據緩存的明明規則,這里注釋掉,否則后續HDFS客戶端不能認證操作HDFS。
- realms模塊,根據末班配置即可,跟上對應的節點名稱即可。
2.3、Kerberos安裝
2.3.1、實現scp、rsync以及集群xsync分發
Kerberos架構是客戶端/服務端架構方式,安裝kerberos包含三個安裝包:krb5-server、krb5-workstation、krb5-libs
- krb5-server:Kerberos服務端程序,安裝在服務端,如KDC數據庫。
- krb5-workstation:安裝在客戶端,包含基本的Kerberos程序,如kinit、klist、kdestory、kpasswd,所有kerberos節點需要部署。
- krb5-libs:包含Kerberos程序的各種支持類庫,所有節點部署。
機子虛擬機:2核4G內存
節點IP | 節點名稱 | Kerberos服務端 | Kerberos客戶端 |
---|---|---|---|
192.168.10.130 | node1 | * | * |
192.168.10.131 | node2 | * | |
192.168.10.132 | node3 | * | |
192.168.10.133 | node4 | * | |
192.168.10.134 | node5 | * |
實現scp分發:node1可以分發到node2、3、4、5,設置ssh免密登錄,只要設置node1就可以
# 生成公鑰對(一路回車)在/root/.ssh/目錄下生成私鑰id_rsa和公鑰id_rsa.pub文件
ssh-keygen# 把公鑰追加到~/.ssh/authorized_keys中去。只要別的機器有了另一個機器的公鑰,也就是在~/.ssh/authorized_keys里存的是目標機器發給你的公鑰id_dsa.pub,你就可以通過ssh命令免密登錄這臺機器
vim id_rsa.pub
# 本機添加密鑰操作
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys# 將A的id_rsa.pub追加到B中的authorized_keys,那么之后去分發就無需要輸入密碼
vim ~/.ssh/authorized_keys
在主服務節點node1機子都配置好域名映射,接著分發到node1-5:
vim /etc/hosts# 映射內容
192.168.10.130 node1
192.168.10.131 node2
192.168.10.132 node3
192.168.10.133 node4
192.168.10.134 node5# 生效網卡
systemctl restart network# 在node1節點服務器編輯好改hosts文件后,分發到node1-5
scp /etc/hosts node5:`pwd`
# 若是拷貝整個文件夾,需要scp后加入參數-r
配置rsync:rsync主要用于備份和鏡像。具有速度快、避免復制相同內容和支持符號鏈接的優點。
yum install -y rsync# 測試rsync
rsync
配置xsync集群分發腳本任務:
# 創建腳本文件夾
mkdir /opt/tools/shells# 進入文件夾
cd /opt/tools.shells# 編輯腳本文件
vim xsync.sh
腳本文件如下:
#!/bin/bash
#1 獲取輸入參數個數,如果沒有參數,直接退出
pcount=$#
if [ $pcount -lt 1 ]
thenecho Not Enough Arguement!exit;
fi#2. 遍歷集群所有機器
# 也可以采用:
# for host in node{2..5};
for host in node2 node3 node4 node5
doecho ==================== $host ====================#3. 遍歷所有目錄,挨個發送for file in $@do#4 判斷文件是否存在if [ -e $file ]then#5. 獲取父目錄pdir=$(cd -P $(dirname $file); pwd)echo pdir=$pdir#6. 獲取當前文件的名稱fname=$(basename $file)echo fname=$fname#7. 通過ssh執行命令:在$host主機上遞歸創建文件夾(如果存在該文件夾)ssh $host "mkdir -p $pdir"#8. 遠程同步文件至$host主機的$USER用戶的$pdir文件夾下rsync -av $pdir/$fname $USER@$host:$pdirelseecho $file does not exists!fidone
done
將腳本文件移入到bin目錄下:
# 移動文件到指定bin目錄下
mv /opt/tools/shells/xsync.sh /usr/local/bin# 授權
chmod 755 /usr/local/bin/xsync.sh # 將文件名修改去除后綴
mv /usr/local/bin/xsync.sh xsync
之后分發文件,直接進入到指定目錄下執行下面命令即可:
xsync 文件名
注意:基本只能是拷貝、復制文件或者文件夾,對于已經刪除的無法去同步。
2.3.2、詳細安裝Kerberos(服務端與客戶端)
Kerberos詳細安裝步驟如下:
1、安裝Kerberos服務端
在node1節點上安裝kerberos服務端:
yum install -y krb5-server
安裝完成之后會在KDC主機上生成配置文件:/var/kerberos/krb5kdc/kdc.conf
# 驗證下
cd /var/kerberos/krb5kdc
ll
2、安裝Kerberos客戶端
在node1-node5節點安裝Kerberos客戶端:
yum install -y krb5-workstation krb5-libs
安裝完成之后會在客戶端生成配置文件/etc/krb5.conf。
# 驗證下
cat /etc/krb5.conf
3、配置服務端kdc.conf文件(暫不修改)
kdc.conf文件位于node1服務端/var/kerberos/krb5kdc/路徑中,可以通過配置改文件來增加realm域信息。
vim /var/kerberos/krb5kdc/kdc.conf
目前以上文件暫時不做修改,使用默認的域就可以。
kdc配置文件說明:
kdc文件主要用于配置realm領域信息,領域可以配置多個
對于kdcdefaults:表示的是默認的kdc服務通信的端口。
EXAMPLE.COM表示一個領域,默認不變的
4、所有客戶端配置krb5.conf
krb5.conf文件在客戶端/etc/目錄下,下面在node1客戶端配置/etc/krb5.conf文件,配置完成后分發到node2-node5所有的客戶端。
cd /etc/
ls | grep krb5.conf# 編輯配置文件
vim /etc/krb5.conf
完整修改配置如下:
(1)對于[libdefaults]中配置處理
①將default_realm = EXAMPLE.COM解開
原因:官方注釋掉的目的你的名字不一樣要配置其他名字,若是不解開就沒有默認的域名,啟動Kerberos的時候就啟動不起來。
②將default_ccache_name = KEYRING:persistent:%{uid}注釋
原因:若是不注釋掉,后續HDFS客戶端不能認證操作HDFS。
(2)對于[realms]中配置:配置kdc的服務域名以及管理服務器的域名
操作:都改為域名node1。
# 放開注釋
[realms]
EXAMPLE.COM = {kdc = node1admin_server = node1
}
額外:對于[domain_realm]這個是進行映射,我們不再處理。
修改完配置后,我們來將該配置文件進行分發:
cd /etc# 單獨分發
scp ./krb5.conf node2:`pwd`
scp ./krb5.conf node3:`pwd`
scp ./krb5.conf node4:`pwd`
scp ./krb5.conf node5:`pwd`# 一次性分發到指定節點服務
xsync krb5.conf
5、服務端配置kadmin5.acl文件(暫不修改)
kadmin5.acl位于服務端/var/kerberos/krb5kdc/kadm5.acl,該ACL文件用于控制kadmin數據庫的訪問權限,以及那些Principal可以操作其他的Principal,配置如下:
# 編輯配置文件
vim /var/kerberos/krb5kdc/kadm5.acl
配置文件內容:
# 表示任意屬于admin角色以及EXAMPLE.COM這個域的(第一個*),那么所有的用戶都是可以來操作的(第二個*)
*/admin@EXAMPLE.COM *
以上配置表示名稱匹配*/admin@EXAMPLE.COM
的Principal都認為是admin管理員角色,權限是*代表全部權限,可以根據自己配置情況對應的域,這里不做修改。
6、服務器初始化Kadmin數據庫(暫不修改)
初始化Kadmin數據庫的命令格式為:
# 這里-s表示生成存儲文件,-r表示realm name,在服務端執行,執行后默認創建的數據庫路徑為:/var/kerberos/krb5kdc,如果需要重新建數據庫,將該目錄下的principal相關文件刪除即可,要記得數據庫密碼
kdb5_util create -s -r EXAMPLE.COM
在node1節點初始化Kadmin數據庫:操作如下
可以看到對應/var/kerberos/krb5kdc中生成了principal相關文件:
7、啟動Kerberos服務并設置開機自啟動
在服務端【node1】啟動Kerberos服務:
# 啟動Kerberos服務,關閉 stop,狀態 status
systemctl start krb5kdc
systemctl start kadmin# 設置開機自啟
systemctl enable krb5kdc
systemctl enable kadmin
2.4、Kerberos使用
①kadmin.local(服務器端)
kadmin.local:登錄
在Kerberos服務器端執行數據庫操作:
# 服務器端
kadmin.local
在客戶端也可以進行數據庫操作,不過執行的命令不同:
# 客戶端執行會直接報錯,這里由于我們登錄使用的是root賬號的管理員角色,目前數據庫還沒有所以無法操作(主體沒有)
kadmin# 注意:這條命令在客戶端會失敗有問題,在kerberos服務器上執行有效,直接指定主體和密碼。
kadmin -p test/admin -w123456
listprincs:查看當前數據庫具有的主體
listprincs
add_principal、delete_principal等:創建、刪除、修改密碼、查看與銷毀當前票據
創建一個主體
# 統一設置我們之后設定密碼手輸入為123456
# 方式一:帶指定的域
add_principal test/admin@EXAMPLE.COM# 方式二:不帶域,默認目前就是EXAMPLE.COM
add_principal test1/admin# 方式三:不帶角色、域,此時就沒有角色表示的是普通用戶
add_principal test2
快速創建賬號使用一條命令:一般服務器可直接創建,客戶端需要先認證登錄之上了再執行
# 快捷創建賬號
kadmin.local -q "addprinc ccc"# 可直接指定密碼
kadmin.local -q "addprinc -pw 123456 ddd"
刪除一個主體:
# 刪除普通用戶的賬號(只需要用戶名即可):刪除用戶為test2,輸入yes即可刪除
delete_principal test2# 刪除管理員角色的用戶必須要帶上角色,即用戶/角色:否則刪除不了
delete_principal test1/admin
修改指定主體密碼:
# 修改指定主體的密碼
cpw test1/admin
查看當前票據緩存:
# 查看當前票據緩存,一般執行kinit會進行設置票據緩存這里就能夠查看到
klist# 銷毀當前票據緩存
kdestroy
②?獲取幫助文檔
獲取幫助文檔:
# 進入到kadmin命令行窗口執行
?
③kadmin(客戶端兩種登錄方式密碼、keytab,含創建keytab操作)
客戶端操作kerberos的數據庫:
①使用密碼方式登錄
# 這里我們使用的是之前創建的test管理員賬號來進行認證,會輸入密碼認證
# 此時默認域是EXAMPLE.com,即為test/admin@EXAMPLE.COM
kinit test/admin# 若是沒有報錯就表示已經驗證通過了# 此時我們執行kadmin執行登錄,注意此時就會使用已經認證過的賬號,就是這個test/admin@EXAMPLE.COM去進行登錄
# 輸入密碼:123456
kadmin
②遠程使用keytab方式登錄
首先生成一個ktab,
# 建立keytabs文件目錄,后續該目錄里防止所有keytab文件
mkdir /opt/tools/keytabs# 該命令是在kadmin.local數據庫交互界面可執行
# -norandkey:生成密碼的時候不要隨機生成key(此時就是隨機密碼方式了)
# -kt:指定生成的文件路徑及名字,后面跟上主體
# 提示1:若是原本沒有,會生成該文件并追加該主體密碼信息
# 提示2:若是已經有該文件,那么會在該文件后進行追加指定主體信息(可以追加多個主體信息)
ktadd -norandkey -kt /opt/tools/keytabs/test.keytab test/admin@EXAMPLE.COM# 集群分發文件
cd /opt/tools
# 執行分發腳本
xsync keytabs/
查看指定的keytab文件內容:
# 查看指定keytab文件
klist -kt /opt/tools/keytabs/test.keytab
若是想要移除keytab中的某個主體:
# 該命令是在kadmin.local數據庫交互界面可執行
ktremove -kt /opt/tools/keytabs/test.keytab test/admin@EXAMPLE.COM
若是此時我們有了keytab文件后就,那么我們使用keytab文件來進行認證:
# -kt:可以指定keytab文件,后面也要跟上主體文件
kinit -kt /opt/tools/keytabs/test.keytab test/admin# 若是沒有任何報錯表示登錄成功,此時可以使用klist查看緩存# 登錄到kerberos數據庫操作,此時會使用當前主體來進行登錄,即test/admin上面認證的
kadmin