Kerberos 简单安装配置
Kerberos 簡單安裝配置
標簽(空格分隔): Kerberos
一,Kerberos簡史
Kerberos是一種網絡安全認證協議,最早由麻省理工研發(fā),用來保護項目 Athena提供的網絡服務器。這個協議以希臘神話中的人物Kerberos(或者Cerberus)命名,他在希臘神話中是Hades的一條兇猛的三頭保衛(wèi)神犬。
kerberos
Internet是一個非常不安全的地方。在Internet中使用的很多協議并沒有提供任何安全保障。一些站點嘗試使用防火墻來解決網絡安全問題。不幸的是,防火墻假設“壞蛋”都在外邊,往往這是非常愚蠢的假設。現實情況是大多數計算機犯罪的毀滅事件都從內部發(fā)起。
Kerberos作為網絡安全問題的解決方案,使用強加密技術,以便客戶端可以在不安全網絡連接上向服務器端證明身份。在客戶端和服務器端使用Kerberos證明彼此身份之后,它們也可以加密所有通信以確保隱私和數據的完整性。在系統設計上Kerberos采用C/S架構,基于DEC加密技術,支持客戶端和服務器端雙向認證。
總之,Kerberos是一種網絡安全問題的解決方案。它提供了認證和強加密工具用以在整個企業(yè)基于網絡幫助你保護你的信息系統。
二,Kerberos 基本原理
1,Kerberos 認證原理
Kerberos是第三方的認證機制,通過它,用戶和用戶希望訪問的服務依賴于Kerberos服務器彼此認證。這種機制也支持加密用戶和服務之間的所有通信。Kerberos 服務器作為密鑰分發(fā)中心,簡稱KDC。在高級別上,它包含三部分:
1,用戶和服務的數據庫(即principals)以及他們各自的Kerberos 密碼
2,認證服務器(AS),執(zhí)行初始認證并簽發(fā)授權票據(TGT)
3,Ticket授予服務器(TGS)基于初始的TGT簽發(fā)后續(xù)的服務票據(ST)
關于AS, TGS , user client , Application server , TGT 以及ST的關系,可以參考下圖:
用戶principal,從AS請求認證,AS返回一個使用用戶principal的kerberos密碼加密的TGT,它僅被用戶principal和AS知曉。用戶principal使用Kerberos密碼本地解密這個TGT,并且從這個點開始,直到票據過期,用戶principal可以使用這個TGT從TGS獲取服務票據(ST)。
Kerberos 認證系統使用一系列的加密消息向驗證機證明客戶端正在以指定用戶身份運行。Kerberos通過使用時間戳來減少需要基礎校驗的消息數量,除了“tikcket-granting”(TGS)服務被用來支持后續(xù)的認證外,不需要重復輸入principal的密碼。
最初,客戶端和服務器端并沒有共享加密密鑰。無論何時客戶端到一個新的驗證機認證自己都依賴于AS生成的新的加密密鑰,并且將其安全地分發(fā)給彼此。這個新的加密密鑰叫做 session key, Kerberos ticket被用來分發(fā)它到驗證機。
由于服務principal不可能每次提供密碼來解密TGT,它會使用一個特定的文件,叫做keytab,這個文件包含了它的認證授權。
這種服務票據允許principal訪問各種服務。Kerberos服務器控制的一套主機,用戶和服務被稱作一個域(realm)。
2,Kerberos 注意事項
用戶名/FQDN(Full Quafilied Domain Name)的主機名@REALM(受保護的域,全大寫)
當然這個用戶名需要是Linux下存在的用戶
FQDN全限定域名,就是一定要帶上hostname.domain這種形式,當然,如果你的主機并沒有給出domain,那么不寫域名也可以。反正就是要全部的主機名加域名(如果存在域名的話),也就是hostname -f所輸出的主機名。但實際上,在Kerberos里面,這個并不稱之為主機名,而是叫做Instance,實例名,他可以不是任何服務器的主機名稱,但是便于理解和認識,我們還是先把他當初主機名來看待吧。
REALM,受到Kerberos保護的域名稱,就是一類或一組受到Kerberos保護服務的服務器集合,你可以想象成Windows里面的域。由于一個KDC可以同時保護多個域,比如你可以在一個KDC上既保護HADOOP服務器組,也保護MYSQL服務器組,所以我們通常會使用域名來進行區(qū)別。
如果你的hostname里面使用了domain name,那么你必須在Principal的第二部分寫完整,否則KDC將無法驗證主機的合法性,加密的tgt是要帶著主機名信息的。
還有,特別需要注意的是,這里面第二部分的domain(域名),第三部分的realm(域),在中文里的字是一樣,但是英文單詞完全不同,他們所表達的含義也完全不同。由于通常Kerberos的Realm部分也會寫成域名的形式,所以就會讓人迷惑,而實際上,你把realm部分理解成windows里面的workgroup或者home這種域也是可以的。名稱可以隨便起,不一定用你的真實域名。只是個區(qū)分不同服務集合的代號。
注意:Kerberos是時間敏感型協議,在域內的所有主機必須是時間同步的。既使客戶端的本地系統時間和KDC的差異小到5分鐘,客戶端都可能認證失敗。
三,KDC服務安裝及配置
1,確保hosts 能夠解析
hostname -f 獲取的是 hosts 文件中 FQDN 格式的 的hostname(大小寫按照hosts 文件中的),Kerberos必須要求FQDN格式的主機名為小寫。
所以hosts 文件中按照如下格式:
ip vecs02583.domain.com vecs02583
如果沒有domain.com 類似的長域名,則一定注意主機名英文字母一定要為小寫。
確保所有的clients與servers之間的時間同步以及DNS正確解析。
2,安裝KDC服務
KDC的主機必須非常自身安全,一般該主機只運行KDC程序。
在安裝完上述的軟件之后,會在KDC主機上生成配置文件/etc/krb5.conf和/var/kerberos/krb5kdc/kdc.conf,它們分別反映了realm name 以及 domain-to-realm mappings。
進入vecs02583(該節(jié)點為KDC Server 節(jié)點) 的root 用戶下
yum -y install krb5-server krb5-libs krb5-auth-dialog krb5-workstation openldap-clients
3,修改主配置文件/etc/krb5.conf,這個配置文件后續(xù)將被下發(fā)給所有kerberos客戶端服務器。
/etc/krb5.conf: 包含Kerberos的配置信息。例如,KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的機器上的配置文件都同步,包括kerberos Server 和Kerberos Client 機器上。這里僅列舉需要的基本配置。
配置示例:
vim /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = HADOOP.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
HADOOP.COM = {
kdc = vecs02583
admin_server = vecs02583
}
[domain_realm]
.hadoop.com = HADOOP.COM
hadoop.com = HADOOP.COM
說明:
[logging]:表示server端的日志的打印位置
[libdefaults]:每種連接的默認配置,需要注意以下幾個關鍵的小配置
default_realm = HADOOP.COM 默認的realm,必須跟要配置的realm的名稱一致。
udp_preference_limit = 1 禁止使用udp可以防止一個Hadoop中的錯誤
oticket_lifetime表明憑證生效的時限,一般為24小時。
orenew_lifetime表明憑證最長可以被延期的時限,一般為一個禮拜。當憑證過期之后,
對安全認證的服務的后續(xù)訪問則會失敗。
kdc:代表要kdc的位置。格式是 機器:端口
admin_server:代表admin的位置。格式是機器:端口
default_domain:代表默認的域名。
4,配置kdc.conf
默認放在 /var/kerberos/krb5kdc/kdc.conf。或者通過覆蓋KRB5_KDC_PROFILE環(huán)境變量修改配置文件位置。
vim /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
HADOOP.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 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。后文會提及如何創(chuàng)建。
supported_enctypes:支持的校驗方式。注意aes256-cts需要JDK 下安裝額外的jar。
五,創(chuàng)建/初始化Kerberos database
初始化并啟動:完成上面兩個配置文件后,就可以進行初始化并啟動了。
[root@VECS02583 ~]# /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創(chuàng)建好后,可以看到目錄 /var/kerberos/krb5kdc 下生成了幾個文件:
-rw------- 1 root root 22 Nov 23 2016 kadm5.acl
-rw------- 1 root root 405 Feb 23 20:25 kdc.conf
-rw------- 1 root root 8192 Feb 23 22:26 principal
-rw------- 1 root root 8192 Feb 23 21:56 principal.kadm5
-rw------- 1 root root 0 Feb 23 21:56 principal.kadm5.lock
-rw------- 1 root root 0 Feb 23 22:26 principal.ok
六,添加kdc database administrator
我們需要為Kerberos database添加administrative principals (即能夠管理database的principals) —— 至少要添加1個principal來使得Kerberos的管理進程kadmind能夠在網絡上與程序kadmin進行通訊。
在maste KDC(vecs02583)上執(zhí)行:
/usr/sbin/kadmin.local -q "addprinc admin/admin"
并為其設置密碼.
kadmin.local
可以直接運行在master KDC上,而不需要首先通過Kerberos的認證,實際上它只需要對本
地文件的讀寫權限。
七,為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的內容編輯為
vim /var/kerberos/krb5kdc/kadm5.acl
*/admin@HADOOP.COM
代表名稱匹配/admin@HADOOP.COM 都認為是admin,權限是 。代表全部權限。
八,啟動并設置 kerberos 后臺進程 為deamon
在master KDC啟動Kerberos daemons
[root@VECS02583 /]# service krb5kdc start
[root@VECS02583 /]# service kadmin start
開機自動啟動
[root@VECS02583 /]# chkconfig krb5kdc on
[root@VECS02583 /]# chkconfig kadmin on
現在KDC已經在工作了。這兩個daemons將會在后臺運行,可以查看它們的日志文件(/var/log/krb5kdc.log 和 /var/log/kadmind.log)。
可以通過命令kinit來檢查這兩個daemons是否正常工作。
九,關于AES-256加密
對于使用 centos5 , 6及以上的系統,默認使用 AES-256 來加密的。這就需要集群中的所有節(jié)點上安裝 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File。
下載的文件是一個 zip 包,解開后,將里面的兩個文件放到下面的目錄中:$JAVA_HOME/jre/lib/security
配置JCE,這是因為CentOS6.5及以上系統默認使用AES-256加密,因此需要所有節(jié)點安裝并配置JCE,JCE下載路徑: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
十,配置集群其他Kerberos Clients
在使用到 kerberos client 機器上安裝如下
yum install krb5-workstation krb5-libs krb5-auth-dialog
配置krb5.conf
配置這些主機上的/etc/krb5.conf,這個文件的內容與KDC中的文件保持一致即可。
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = HADOOP.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
HADOOP.COM = {
kdc = vecs02583
admin_server = vecs02583
}
[domain_realm]
.hadoop.com = HADOOP.COM
hadoop.com = HADOOP.COM
參考:
https://www.jianshu.com/p/69e211cc39ca
https://blog.51cto.com/slaytanic/2102931
總結
以上是生活随笔為你收集整理的Kerberos 简单安装配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云虚拟主机默认文件夹目录使用说明大全
- 下一篇: 洗牙齿需要多少钱一次