Kerberos協議:
Kerberos協議主要用于計算機網絡的身份鑒別(Authentication), 其特點是用戶只需輸入一次身份驗證信息就可以憑借此驗證獲得的票據(ticket-granting ticket)訪問多個服務,即SSO(Single Sign On)。由于在每個Client和Service之間建立了共享密鑰,使得該協議具有相當的安全性。
2. 安裝 Kerberos
2.1. 環境配置
安裝kerberos前,要確保主機名可以被解析。
主機名 內網IP 角色
Vmw201 172.16.18.201 Master KDCVmw202 172.16.18.202 Kerberos clientVmw203 172.16.18.203 Kerberos client
2.2 Configuring a Kerberos Server
2.2.1 確保環境可用
確保所有的clients與servers之間的時間同步以及DNS正確解析
2.2.2 選擇一個主機來運行KDC,并在該主機上安裝krb-5libs,krb5-server,已經krb5-workstation:
yum install krb5-server krb5-libs krb5-auth-dialog
KDC的主機必須非常自身安全,一般該主機只運行KDC程序。本文中我們選擇vmw201作為運行KDC的主機。
在安裝完上述的軟件之后,會在KDC主機上生成配置文件/etc/krb5.conf和/var/kerberos/krb5kdc/kdc.conf,它們分別反映了realm name 以及 domain-to-realm mappings。
2.2.3 配置kdc.conf
默認放在 /var/kerberos/krb5kdc/kdc.conf。或者通過覆蓋KRB5_KDC_PROFILE環境變量修改配置文件位置。
配置示例:
[kdcdefaults]kdc_ports = 88kdc_tcp_ports = 88[realms]HADOOP.COM = {#master_key_type = aes256-ctsacl_file = /var/kerberos/krb5kdc/kadm5.acldict_file = /usr/share/dict/wordsadmin_keytab = /var/kerberos/krb5kdc/kadm5.keytabmax_renewable_life = 7dsupported_enctypes = aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal}
說明:
HADOOP.COM:是設定的realms。名字隨意。Kerberos可以支持多個realms,會增加復雜度。本文不探討。大小寫敏感,一般為了識別使用全部大寫。這個realms跟機器的host沒有大關系。
max_renewable_life = 7d 涉及到是否能進行ticket的renwe必須配置。
master_key_type:和supported_enctypes默認使用aes256-cts。由于,JAVA使用aes256-cts驗證方式需要安裝額外的jar包,更多參考2.2.9關于AES-256加密:。推薦不使用。
acl_file:標注了admin的用戶權限。文件格式是
Kerberos_principal permissions [target_principal] [restrictions]支持通配符等。
admin_keytab:KDC進行校驗的keytab。后文會提及如何創建。
supported_enctypes:支持的校驗方式。注意把aes256-cts去掉。
2.2.4 配置krb5.conf
/etc/krb5.conf: 包含Kerberos的配置信息。例如,KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的機器上的配置文件都同步。這里僅列舉需要的基本配置。
配置示例:
[logging]default=FILE:/var/log/krb5libs.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log[libdefaults]default_realm = HADOOP.COMdns_lookup_realm = falsedns_lookup_kdc = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = true# udp_preference_limit = 1[realms]HADOOP.COM = {kdc = vmw201admin_server = vmw201}[domain_realm].hadoop.com = HADOOP.COMhadoop.com = HADOOP.COM
說明:
[logging]:表示server端的日志的打印位置
[libdefaults]:每種連接的默認配置,需要注意以下幾個關鍵的小配置
default_realm = HADOOP.COM 默認的realm,必須跟要配置的realm的名稱一致。
udp_preference_limit = 1 禁止使用udp可以防止一個Hadoop中的錯誤
oticket_lifetime表明憑證生效的時限,一般為24小時。
orenew_lifetime表明憑證最長可以被延期的時限,一般為一個禮拜。當憑證過期之后,
對安全認證的服務的后續訪問則會失敗。
[realms]:列舉使用的realm。
kdc:代表要kdc的位置。格式是 機器:端口
admin_server:代表admin的位置。格式是機器:端口
default_domain:代表默認的域名
[appdefaults]:可以設定一些針對特定應用的配置,覆蓋默認配置。
2.2.5 創建/初始化Kerberos database
初始化并啟動:完成上面兩個配置文件后,就可以進行初始化并啟動了。
[root@vmw201 ~]# /usr/sbin/kdb5_util create -s -r HADOOP.COM
其中,[-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 下生成了幾個文件:
kadm5.acl
kdc.conf
principal
principal.kadm5
principal.kadm5.lock
principal.ok
2.2.6 添加database administrator
我們需要為Kerberos database添加administrative principals (即能夠管理database的principals) —— 至少要添加1個principal來使得Kerberos的管理進程kadmind能夠在網絡上與程序kadmin進行通訊。
在maste KDC上執行:
[root@vmw201 /]# /usr/sbin/kadmin.local -q "addprinc admin/admin"
并為其設置密碼
kadmin.local
可以直接運行在master KDC上,而不需要首先通過Kerberos的認證,實際上它只需要對本
地文件的讀寫權限。
2.2.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的內容編輯為
*/admin@HADOOP.COM
代表名稱匹配*/admin@HADOOP.COM 都認為是admin,權限是 *。代表全部權限。
2.2.8 在master KDC啟動Kerberos daemons
手動啟動:
[root@vmw201 /]# service krb5kdc start[root@vmw201 /]# service kadmin start
設置開機自動啟動:
[root@vmw201 /]# chkconfig krb5kdc on[root@vmw201 /]# chkconfig kadmin on
現在KDC已經在工作了。這兩個daemons將會在后臺運行,可以查看它們的日志文件(/var/log/krb5kdc.log 和 /var/log/kadmind.log)。
可以通過命令kinit來檢查這兩個daemons是否正常工作。
2.2.9關于AES-256加密
對于使用 centos5. 6及以上的系統,默認使用 AES-256 來加密的。這就需要集群中的所有節點上安裝 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File。
下載的文件是一個 zip 包,解開后,將里面的兩個文件放到下面的目錄中:$JAVA_HOME/jre/lib/security
2.3 Configuring Kerberos Clients
2.3.1 Installing Kerberos Client(CentOS7可以省略此步驟)
在另外兩臺主機(vmw202,vmw203)上安裝kerberos客戶端。
yum install krb5-workstation krb5-libs krb5-auth-dialog
2.3.2 配置krb5.conf
配置這些主機上的/etc/krb5.conf,這個文件的內容與KDC中的文件保持一致即可。
3. kerberos的日常操作與常見問題
3.1 管理員操作
3.1.1 登錄
登錄到管理員賬戶: 如果在本機上,可以通過kadmin.local直接登錄。其它機器的,先使用kinit進行驗證。
3.1.2增刪改查賬戶
在管理員的狀態下使用addprinc,delprinc,modprinc,listprincs命令。使用?可以列出所有的命令。
kadmin.local: addprinc testkadmin.local: delprinc testkadmin.local: listprincs
3.1.3生成keytab:使用xst命令或者ktadd命令
kadmin:xst -k /xxx/xxx/kerberos.keytab hdfs/hadoop1
3.2 用戶操作
3.2.1 查看當前的認證用戶
3.2.3 認證用戶
kinit -kt /xx/xx/kerberos.keytab hdfs/hadoop1
3.2.4 刪除當前的認證的緩存
kdestroy
3.3 常見問題
3.3.1 查看ticket是否是renewable
通過klist命令來查看
如果Valid starting的值與renew until的值相同,則表示該principal的ticket 不是 renwable。
3.3.2 ticket無法更新
如果過了Expires,可以通過命令kinit –R來更新ticket
但如果ticket無法更新
[root@vmw201 ~]$ kinit -Rkinit: Ticket expired while renewing credentials
這是因為krbtgt/HADOOP.COM@ HADOOP.COM的[renewlife]被設置成了0,這一點可以通過[kadmin.local => getprinc krbtgt/ HADOOP.COM @ HADOOP.COM]看出來。
將krbtgt/HADOOP.COM@HADOOP.COM的[renewlife]修改為7days即可,方法
kadmin.local: modprinc -maxrenewlife 1week krbtgt/HADOOP.COM@HADOOP.COM
以上所述是小編給大家介紹的Kerberos安裝教程及使用詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!
新聞熱點
疑難解答
圖片精選