Kerberos(一) 安裝


1、服務器基本信息

操作系統:centos7

數量:2

主機名映射關系

IP hostname server
192.168.4.50 manager1 Kerberos server(kdc)
192.168.0.230 yjt Kerberos client

 

2、安裝ntp服務

NTP服務搭建

3、安裝kerber

3.1、安裝

server端:

# yum -y install krb5-libs krb5-workstation krb5-server

client端

# yum -y install krb5-devel krb5-workstation

 

如果想源碼編譯安裝,可下載:https://kerberos.org/dist/index.html

配置kerberos  server  主要修改三個配置文件,如下:

(1) /etc/krb5.conf

(2) /var/kerberos/krb5kdc/kdc.conf

(3) /var/kerberos/krb5kdc/kadm5.acl

3.2、配置krb5.conf文件

 

修改server端上面的krb5.conf文件

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

[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]  這個組里面配置的是一些與日志存放路徑相關的信息。

  default: 用於配置krb5libs日志存放路徑

  kdc: 用於配置krb5kdc日志存放路徑

  admin_server: 用於配置kadmin服務日志存放路徑

 

[libdefaults] 在使用Kerberos時使用的默認值。

  dns_lookup_realm : 與dns參數有關,猜測用於域名解析,默認是false,當設置為true時,dns參數才起作用,有關dns參數獲取其他參數可以查看官方文檔。

  ticket_lifetime: 獲取到的票據存活時間,也就是該票據可以用多久,默認是1天

  renew_lifetime:票據可更新的時間,也就是說該票據可以延遲到期的天數。默認是7天

  forwardable:票據是否可以被kdc轉發, 默認是true。

  rdns :在進行dns解析的時候,正反向都可以,默認是true,如果dns_canonicalize_hostname參數被設置為false,那么rdns這個參數將無效。

  default_realm:默認的領域,當客戶端在連接或者獲取主體的時候,當沒有輸入領域的時候,該值為默認值(列如:使用kinit admin/admin 獲取主體的憑證時,沒有輸入領域,而傳到kdc服務器的時候,會變成 admin/admin@EXAMPLE.COM ),這個值需要在[realms]中定義,如果有多個領域,都需要在realms中定義。默認以大寫書寫。

  default_ccache_name:默認緩存的憑據名稱,不推薦使用,當在客戶端配置該參數的時候,會提示緩存錯誤信息。

 

[realms]   該組主要是配置領域相關的信息,默認只有一個,可以配置多個,如果配置多個(比如:HADOOP.COM, HBASE.COM),但是default_realm值定義為HADOOP.COM,那么客戶端在獲取與HBASE.COM相關的憑據時,需要指定具體的域名(比如客戶端初始化憑據: kinit admin/admin@HBASE.COM).

  EXAMPLE.COM: 簡單說就是域名,對應用kerberos來說就是領域,相當於編程里面的namespace。

  kdc : kdc服務器地址。格式  機器:端口, 默認端口是88

  admin_server: admin服務地址 格式 機器:端口, 默認端口749

  default_domain: 指定默認的域名

 

[domain_realm]   指定DNS域名和Kerberos域名之間映射關系。指定服務器的FQDN,對應的domain_realm值決定了主機所屬的域。

[kdc]:

  kdc的配置信息。即指定kdc.conf的位置。
  profile   :kdc的配置文件路徑,默認值下若無文件則需要創建。

 

 3.3、配置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 camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }

#以上是默認的配置信息
參數解析:

[
kdcdefaults] 改組主要是用於配置全局信息。也就是kdc的默認值。
  kdc_ports: kdc默認端口 
  kdc_tcp_ports: kdc默認的tcp端口
[realms] 該配置項主要是用於配置每個域的具體信息。
  • EXAMPLE.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 (如果已經存在,可以考慮先刪除)

 

3.4、配置kadm5.acl

#cat /var/kerberos/krb5kdc/kadm5.acl 
*/admin@EXAMPLE.COM    *

解析:
該配置文件主要是用於管理員登陸的acl
配置格式:
Kerberos_principal permissions [target_principal] [restrictions]
第一列: */admin@HADOOP.COM  對應  Kerberos_principal  表示主體(principal)名稱
第二列:* 對應 permissions 表示權限
上述的配置表示以/admin@WXAMPLE.COM結尾的用戶擁有*(all 也就是所有)權限,具體配置可根據項目來是否縮小權限。

4、Kerberos操作

4.1、創建數據庫

初始化數據庫 -r 指定域名(也就是在krb5.conf文件[realms]組里面定義的域名) -s選項指定將數據庫的主節點密鑰存儲在文件中,從而可以在每次啟動KDC時自動重新生成主節點密鑰
#kdb5_util -s create HADOOP.COM

出現 Loading random data 的時候另開個終端執行點消耗CPU的命令如 cat /dev/sda > /dev/urandom 可以加快隨機數采集。

該命令會在 /var/kerberos/krb5kdc/ 目錄下創建 principal 數據庫。

如果遇到數據庫已經存在的提示,可以把 /var/kerberos/krb5kdc/ 目錄下的 principal 的相關文件都刪除掉。默認的數據庫名字都是 principal。可以使用 -d 指定數據庫名字。

#ll /var/kerberos/krb5kdc/  數據庫創建完成以后,會在該目錄下生成以principal開頭的四個文件
total 48
-rw------- 1 root root    21 Oct 18 14:28 kadm5.acl                       #kerberos管理員的訪問權限控制文件
-rw------- 1 root root   451 Oct 18 15:01 kdc.conf              #kdc 主配置文件                            
-rw------- 1 root root 32768 Oct 24 14:41 principal                       # kerberos數據庫文件
-rw------- 1 root root  8192 Oct 23 16:31 principal.kadm5                 #Kerberos數據庫管理文件
-rw------- 1 root root     0 Oct 23 16:31 principal.kadm5.lock            #kerberos 數據庫管理的鎖文件
-rw------- 1 root root     0 Oct 24 14:41 principal.ok                    # kerberos數據庫文件

4.2、啟動服務

啟動kdc服務

# systemctl start krb5kdc
# systemctl enable krb5kdc #開啟自啟

啟動kadmin服務

# systemctl start kadmin
# systemctl enable kadmin #開啟自啟

4.3、創建管理員

關於 kerberos 的管理,可以使用 kadmin.local 或 kadmin,至於使用哪個,取決於賬戶和訪問權限:

如果有訪問 kdc 服務器的 root 權限,但是沒有 kerberos admin 賬戶,使用 kadmin.local
如果沒有訪問 kdc 服務器的 root 權限,但是用 kerberos admin 賬戶,使用 kadmin
說白了一點,在server上使用kadmin.local,在client使用kadmin 在 server 上創建遠程管理的管理員: 第一種方法: # kadmin.local #進入控制台
addprinc admin/admin #創建管理員
手動輸入兩次密碼,這里密碼為123456
第二種方法: # kadmin.local
-q "addprinc addmin/admin"
第三種方法: 不用手動輸入密碼 # echo
-e "123456\n123456" | kadmin.local -q "addprinc admin/admin" 系統會提示輸入密碼,密碼不能為空,且需妥善保存

4.4、客戶端測試kadmin

[hduser@yjt ~]$ kinit admin/admin    #獲取管理員憑證(TGT)
Password for admin/admin@HADOOP.COM:   #輸入密碼,也就是123456
[hduser@yjt ~]$ kadmin 
Couldn't open log file /var/log/kadmind.log: 權限不夠
Authenticating as principal admin/admin@HADOOP.COM with password.
Password for admin/admin@HADOOP.COM:   #輸入密碼 123456
kadmin:   #控制台

 

5、kerberos常用命令

服務端操作:

在控制台輸入 ? 可以查看相關命令

kadmin: ? Available kadmin requests: add_principal, addprinc, ank Add principal delete_principal, delprinc Delete principal modify_principal, modprinc Modify principal rename_principal, renprinc Rename principal change_password, cpw Change password get_principal, getprinc Get principal list_principals, listprincs, get_principals, getprincs List principals add_policy, addpol Add policy modify_policy, modpol Modify policy delete_policy, delpol Delete policy get_policy, getpol Get policy list_policies, listpols, get_policies, getpols List policies get_privs, getprivs Get privileges ktadd, xst Add entry(s) to a keytab ktremove, ktrem Remove entry(s) from a keytab lock Lock database exclusively (use with extreme caution!) unlock Release exclusive database lock purgekeys Purge previously retained old keys from a principal get_strings, getstrs Show string attributes on a principal set_string, setstr Set a string attribute on a principal del_string, delstr Delete a string attribute on a principal list_requests, lr, ? List available requests. quit, exit, q Exit program.
查看具體的命令用法,直接輸入命令按回車,如下:

kadmin: addprinc
usage: add_principal [options] principal
options are:
[-randkey|-nokey] [-x db_princ_args]* [-expire expdate] [-pwexpire pwexpdate] [-maxlife maxtixlife]
[-kvno kvno] [-policy policy] [-clearpolicy]
[-pw password] [-maxrenewlife maxrenewlife]
[-e keysaltlist]
[{+|-}attribute]
attributes are:
allow_postdated allow_forwardable allow_tgs_req allow_renewable
allow_proxiable allow_dup_skey allow_tix requires_preauth
requires_hwauth needchange allow_svr password_changing_service
ok_as_delegate ok_to_auth_as_delegate no_auth_data_required
lockdown_keys

where,
[-x db_princ_args]* - any number of database specific arguments.
Look at each database documentation for supported arguments

 

5.1、添加主體(principal)


add_principal, addprinc, ank 這幾個命令都可以創建主體(相當於用戶)
服務器操作測試:
# kadmin.local 進入到控制台
控制台是以kadmin開頭的,如下:
kadmin: addprinc yjt/yjt #創建主體(用戶)yjt/yjt 需要輸入密碼
kadmin: addprinc -pw 123456 yjt/yjt # 創建yjt/yjt主體,密碼使用-pw指定
kadmin: addprinc -randkey yjt/yjt #生成隨機密碼

5.2、刪除主體

delete_principal, delprinc # 刪除主體,刪除的時候會詢問是否刪除

kadmin: delprinc yjt/yjt
Are you sure you want to delete the principal "yjt/yjt@HADOOP.COM"? (yes/no): yes
Principal "yjt/yjt@HADOOP.COM" deleted.
Make sure that you have removed this principal from all ACLs before reusing.

5.3、修改憑證

modify_principal, modprinc   #修改用戶
比如修改延遲到期時間:

kadmin: modprinc -maxrenewlife 8days yjt/yjt
Principal "yjt/yjt@HADOOP.COM" modified.

5.4、列出當前憑證

list_principals, listprincs, get_principals, getprincs  #列出當前憑證

kadmin: listprincs
HTTP/yjt@HADOOP.COM
K/M@HADOOP.COM
admin/admin@HADOOP.COM
dn/yjt@HADOOP.COM
hbase/yjt@HADOOP.COM
hdfs/yjt@HADOOP.COM
hive/yjt@HADOOP.COM
host/yjt@HADOOP.COM
jn/yjt@HADOOP.COM
kadmin/admin@HADOOP.COM
kadmin/changepw@HADOOP.COM
kadmin/manager1@HADOOP.COM
kiprop/manager1@HADOOP.COM
krbtgt/HADOOP.COM@HADOOP.COM
nm/yjt@HADOOP.COM
nn/yjt@HADOOP.COM
rm/yjt@HADOOP.COM
test@HADOOP.COM
yarn/yjt@HADOOP.COM
yjt/yjt@HADOOP.COM
zkcli/yjt@HADOOP.COM
zkcli@HADOOP.COM
zkserver/yjt@HADOOP.COM
zookeeper/yjt@HADOOP.COM

5.5、生成密鑰文件

ktadd, xst
kadmin: xst -norandky -k hadoop.keytab jn/yjt nn/yjt # -k指定密鑰文件的位置,如果是相對路徑,文件生成在當前路徑下,可以指定多個認證主體

如何合並多個密鑰文件的信息到一個文件?例如,在當前路徑下,存在nn.keytab, dn.keytab ,現在我想把這兩個文件里面的密鑰合並到hadoop.keytab,操作如下:
在命令行輸入ktutil
#ktutil #進入到控制台
read_kt, rkt #這兩個命令可以從keytab里面讀取出密鑰信息
ktutil:  rkt nn.keytab
ktutil: rkt dn.keytab
write_kt, wkt # 這兩個命令可以把當前的keylist寫入到一個keytab文件,這個keylist信息就是上面使用rkt從keytab讀取的信息
ktutil: wkt hadoop.keytab

5.6、獲取憑據信息

get_principal, getprinc  # 獲取憑據信息的兩個命令

kadmin.local: getprinc yjt/yjt
Principal: yjt/yjt@HADOOP.COM
Expiration date: [never]
Last password change: Thu Oct 24 18:01:22 CST 2019
Password expiration date: [never]
Maximum ticket life: 1 day 00:00:00
Maximum renewable life: 8 days 00:00:00  注意這里:剛才被我們該過
Last modified: Thu Oct 24 18:07:28 CST 2019 (admin/admin@HADOOP.COM)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 8
Key: vno 1, aes256-cts-hmac-sha1-96
Key: vno 1, aes128-cts-hmac-sha1-96
Key: vno 1, des3-cbc-sha1
Key: vno 1, arcfour-hmac
Key: vno 1, camellia256-cts-cmac
Key: vno 1, camellia128-cts-cmac
Key: vno 1, des-hmac-sha1
Key: vno 1, des-cbc-md5
MKey: vno 1
Attributes:
Policy: [none]

5.7、生成dump文件


[root@manager1 yjt-test 18:25:39]#kdb5_util dump kerberos_data [root@manager1 yjt-test 18:26:48]#ll total 36-rw------- 1 root root 24867 Oct 24 18:26 kerberos_data -rw------- 1 root root 1 Oct 24 18:26 kerberos_data.dump_ok

5.8、修改認證主體的密碼

#kpasswd yjt/yjt
Password for yjt/yjt@HADOOP.COM: 
Enter new password: 
Enter it again: 
Password changed.

 

客戶端操作:

5.9、獲取憑證

[root@manager1 yjt-test 18:28:06]#kinit  yjt/yjt    #基於密碼,需要輸入密碼
[root@manager1 yjt-test 18:28:06]#kinit -kt app.keytab yjt/yjt   #基於密鑰的方式驗證

5.9、查看當前的憑證

[root@manager1 yjt-test 18:31:53]#klist 
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: nm/yjt@HADOOP.COM

Valid starting       Expires              Service principal
10/23/2019 19:49:29  10/24/2019 19:49:29  krbtgt/HADOOP.COM@HADOOP.COM

5.10、刪除當前認證的緩存

[root@manager1 yjt-test 18:31:55]#kdestroy 

5.11、查看密鑰文件的認證主體列表

[root@manager1 kerveros_security 18:34:25]#klist -ket hadoop.keytab 
Keytab name: FILE:hadoop.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (aes256-cts-hmac-sha1-96) 
   1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (aes128-cts-hmac-sha1-96) 
   1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (des3-cbc-sha1) 
   1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (arcfour-hmac) 
   1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (camellia256-cts-cmac) 
   1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (camellia128-cts-cmac) 
   1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (des-hmac-sha1) 
   1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (des-cbc-md5) 
   1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (aes256-cts-hmac-sha1-96) 
   1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (aes128-cts-hmac-sha1-96) 
   1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (des3-cbc-sha1) 
   1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (arcfour-hmac) 
   1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (camellia256-cts-cmac) 
   1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (camellia128-cts-cmac) 
   1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (des-hmac-sha1) 
   1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (des-cbc-md5) 
   1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (aes256-cts-hmac-sha1-96) 
   1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (aes128-cts-hmac-sha1-96) 
   1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (des3-cbc-sha1) 
   1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (arcfour-hmac) 
   1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (camellia256-cts-cmac) 
   1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (camellia128-cts-cmac) 
   1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (des-hmac-sha1) 
   1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (des-cbc-md5) 
   1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (aes256-cts-hmac-sha1-96) 
   1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (aes128-cts-hmac-sha1-96) 
   1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (des3-cbc-sha1) 
   1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (arcfour-hmac) 
   1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (camellia256-cts-cmac) 
   1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (camellia128-cts-cmac) 
   1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (des-hmac-sha1) 
   1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (des-cbc-md5)

參考:

官網

oracle kerberos 詳解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM