亞寵展、全球寵物產業風向標——亞洲寵物展覽會深度解析
911
2025-03-31
1. 概述
Kerberos是一種計算機網絡認證協議,它允許某實體在非安全網絡環境下通信,向另一個實體以一種安全的方式證明自己的身份。它也指由麻省理工實現此協議,并發布的一套免費軟件。它的設計主要針對客戶-服務器模型,并提供了一系列交互認證——用戶和服務器都能驗證對方的身份。Kerberos協議可以保護網絡實體免受竊聽和重復攻擊。
Kerberos協議基于對稱密碼學,并需要一個值得信賴的第三方。Kerberos協議的擴展可以為認證的某些階段提供公鑰密碼學支持。
2. 環境說明:
CDH版本:5.11.2
Linux版本:Centos 7
Docker版本:Docker version 18.06.0-ce
JDK版本:1.8
操作用戶:root
機器部署:
各節點之間可以通過ssh免密碼登錄
Kerberos服務器和客戶之間的時間同步
3. Kerberos 安裝
cdh-node-1作為Kerberos主節點安裝服務:
yum?install?krb5-libs?krb5-server?krb5-workstation
通過命令查看安裝列表rpm -qa|grep krb5:
[root@cdh-node-1?/]#?rpm?-qa??|?grep?krb5krb5-workstation-1.15.1-19.el7.x86_64 krb5-devel-1.15.1-19.el7.x86_64 krb5-server-1.15.1-19.el7.x86_64 krb5-libs-1.15.1-19.el7.x86_64 [root@cdh-node-1?/]#
4. 配置
kdc服務器包含三個配置文件:
#?集群上所有節點都有這個文件而且內容同步/etc/krb5.conf#?主服務器上的kdc配置/var/kerberos/krb5kdc/kdc.conf#?能夠不直接訪問?KDC?控制臺而從?Kerberos?數據庫添加和刪除主體,需要添加配置/var/kerberos/krb5kdc/kadm5.acl
1. 首先配置/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?=?EXAMPLE.COM??#此處需要進行配置,把默認的EXAMPLE.COM修改為自己要定義的值 ?dns_lookup_kdc?=?false ?dns_lookup_realm?=?false ?ticket_lifetime?=?86400 ?renew_lifetime?=?604800 ?forwardable?=?true ?default_tgs_enctypes?=?rc4-hmac ?default_tkt_enctypes?=?rc4-hmac ?permitted_enctypes?=?rc4-hmac ?udp_preference_limit?=?1 ?kdc_timeout?=?3000[realms] ?EXAMPLE.COM?=?{ ?kdc?=?cdh-node-1???#此處配置的為主機名 ?admin_server?=?cdh-node-1??#同上 ?}
配置項說明:
更多參數設置請參考:官方文檔。
以下是幾個核心參數的說明:
[logging]:日志輸出設置 (可選)
[libdefaults]:連接的默認配置
default_realm:Kerberos應用程序的默認領域,所有的principal都將帶有這個領域標志
ticket_lifetime: 表明憑證生效的時限,一般為24小時
renew_lifetime: 表明憑證最長可以被延期的時限,一般為一個禮拜。當憑證過期之后,對安全認證的服務的后續訪問則會失敗
clockskew:時鐘偏差是不完全符合主機系統時鐘的票據時戳的容差,超過此容差將不接受此票據。通常,將時鐘扭斜設置為 300 秒(5 分鐘)。這意味著從服務器的角度看,票證的時間戳與它的偏差可以是在前后 5 分鐘內
udp_preference_limit= 1:禁止使用 udp 可以防止一個 Hadoop 中的錯誤
default_ccache_name:credential緩存名,默認值為
[realms]:列舉使用的 realm
kdc:代表要 kdc 的位置。格式是 機器:端口
admin_server:代表 admin 的位置。格式是 機器:端口
default_domain:代表默認的域名
[domain_realm]:域名到realm的關系 (可選)
2.配置/var/kerberos/krb5kdc/kdc.conf文件
此處為EXAMPLE.COM與/etc/krb5.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相關配置,這里只設置了端口信息 -?`realms`:realms的配置 ????-?`EXAMPLE.COM`:設定的realms領域 ????-?`master_key_type`:和?supported_enctypes?默認使用?aes256-cts。JAVA?使用?aes256-cts?驗證方式需要安裝?JCE包(推薦不使用) ????-?`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. 創建/var/kerberos/krb5kdc/kadm5.acl
內容為:*/admin@EXAMPLE.COM *
代表名稱匹配/admin@EXAMPLE COM?都認為是admin,權限是 * 代表全部權限。
在KDC上我們需要編輯acl文件來設置權限,該acl文件的默認路徑是?/var/kerberos/krb5kdc/kadm5.acl(也可以在文件kdc.conf中修改)。
Kerberos的kadmind daemon會使用該文件來管理對Kerberos database的訪問權限。對于那些可能會對pincipal產生影響的操作,acl文件也能控制哪些principal能操作哪些其他pricipals。
4. 創建Kerberos數據庫
此步可能用時較長,創建完成會在/var/kerberos/krb5kdc/下面生成一系列文件。并且會提示輸入數據庫管理員的密碼。
db5_util?create?-r?EXAMPLE.COM?–s?#?此處為EXAMPLE.COM與/etc/krb5.conf中的配置保持一致。
其中,[-s]表示生成stash file,并在其中存儲master server key(krb5kdc);還可以用[-r]來指定一個realm name —— 當krb5.conf中定義了多個realm時才是必要的。
如果需要重建數據庫,將/var/kerberos/krb5kdc目錄下的principal相關的文件刪除即可.
當Kerberos database創建好后,可以看到目錄?/var/kerberos/krb5kdc?下生成了幾個文件:
kadm5.aclkdc.confprincipalprincipal.kadm5principal.kadm5.lockprincipal.ok
5. 添加database administrator
為Kerberos database添加administrative principals (即能夠管理database的principals) —— 至少要添加1個principal來使得Kerberos的管理進程kadmind能夠在網絡上與程序kadmin進行通訊。
創建管理員并輸入密碼admin。kadmin.local可以直接運行在KDC上,而無需通過Kerberos認證。
為用戶設置密碼:
[root@cdh-node-1?/]#?kadmin.local?-q?"addprinc?admin/admin"Authenticating?as?principal?root/admin@EXAMPLE.COM?with?password. WARNING:?no?policy?specified?for?admin/admin@EXAMPLE.COM;?defaulting?to?no?policy Enter?password?for?principal?"admin/admin@EXAMPLE.COM": Re-enter?password?for?principal?"admin/admin@EXAMPLE.COM":?? Principal?"admin/admin@EXAMPLE.COM"?created.
6. 設置kerberos服務為開機啟動,關閉防火墻
chkconfig?krb5kdc?onchkconfig?kadmin?onchkconfig?iptables?off
7. 啟動krb5kdc和kadmind進程
/usr/sbin/kadmind/usr/sbin/krb5kdc
或
service?krb5kdc?startservice?kadmin?startservice?krb5kdc?status
現在KDC已經在工作了。這兩個daemons將會在后臺運行,可以查看它們的日志文件(/var/log/krb5kdc.log 和 /var/log/kadmind.log)。
8. 檢查Kerberos正常運行
kinit?admin/admin
9. 集群中的其他主機安裝Kerberos Client
yum?install?krb5-workstation?krb5-libs?krb5-auth-dialog
配置這些主機上的/etc/krb5.conf,這個文件的內容與KDC中的文件保持一致即可。
10. 在cm節點安裝ldap客戶端
yum?install?openldap-clients
5. Kerberos使用
常用命令:
kinit?admin/admin@EXAMPLE.COM?#?初始化證書klist?#?查看當前證書kadmin.local?-q?"list_principals"???#?列出Kerberos中的所有認證用戶kadmin.local?-q?"addprinc?user1"??#?添加認證用戶,需要輸入密碼kinit?user1??#?使用該用戶登錄,獲取身份認證,需要輸入密碼klist??#?查看當前用戶的認證信息ticketkinit?–R??#?更新ticketkdestroy??#?銷毀當前的ticketkadmin.local?-q?"delprinc?user1"??#?刪除認證用戶
5.1 管理員使用
1. 登錄
登錄到管理員賬戶,如果在本機上,可以通過kadmin.local直接登錄:
[root@cdh-node-1?/]#?kadmin.localAuthenticating?as?principal?root/admin@EXAMPLE.COM?with?password. kadmin.local:
其它機器的,先使用kinit進行驗證:
[root@cdh-server-1?/]#?kinit?admin/adminPassword?for?admin/admin@EXAMPLE.COM: [root@cdh-server-1?/]#?kadminAuthenticating?as?principal?admin/admin@EXAMPLE.COM?with?password. Password?for?admin/admin@EXAMPLE.COM: kadmin:
2. 增刪改查賬戶
在管理員的狀態下使用addprinc,delprinc,modprinc,listprincs命令。使用?可以列出所有的命令。
[root@cdh-node-1?/]#?kadmin.localAuthenticating?as?principal?root/admin@EXAMPLE.COM?with?password. kadmin.local:??delprinc?test Are?you?sure?you?want?to?delete?the?principal?"test@EXAMPLE.COM"??(yes/no):?yesPrincipal?"test@EXAMPLE.COM"?deleted. Make?sure?that?you?have?removed?this?principal?from?all?ACLs?before?reusing. kadmin.local:??listprincs HTTP/cdh-node-1@EXAMPLE.COM HTTP/cdh-node-2@EXAMPLE.COM HTTP/cdh-node-3@EXAMPLE.COM ...
3. 生成keytab:使用xst命令或者ktadd命令
[root@cdh-node-1?/]#?kadmin:xst?-k?/xxx/xxx/kerberos.keytab?hdfs/hadoop1
5.2 用戶使用
1. 查看當前認證用戶
[root@cdh-node-2?/]#?klistTicket?cache:?FILE:/tmp/krb5cc_0Default?principal:?hdfs@EXAMPLE.COMValid?starting???????Expires??????????????Service?principal08/08/2018?17:49:41??08/09/2018?17:49:41??krbtgt/EXAMPLE.COM@EXAMPLE.COM
2. 認證用戶
[root@cdh-node-2?/]#?kinit?-kt?/xx/xx/kerberos.keytab?hdfs/hadoop1
3. 刪除當前的認證的緩存
[root@cdh-node-2?/]#?kdestroy[root@cdh-node-2?/]#?klistklist:?No?credentials?cache?found?(filename:?/tmp/krb5cc_0)
6. 一些概念
Kerberos principal用于在kerberos加密系統中標記一個唯一的身份。
kerberos為kerberos principal分配tickets使其可以訪問由kerberos加密的hadoop服務。
對于hadoop,principals的格式為username/fully.qualified.domain.name@YOUR-REALM.COM.
keytab是包含principals和加密principal key的文件。
keytab文件對于每個host是唯一的,因為key中包含hostname。keytab文件用于不需要人工交互和保存純文本密碼,實現到kerberos上驗證一個主機上的principal。
因為服務器上可以訪問keytab文件即可以以principal的身份通過kerberos的認證,所以,keytab文件應該被妥善保存,應該只有少數的用戶可以訪問。
Kerberos 安全 大數據
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。