1. 程式人生 > >centos 7 安裝LDAP 並集成kerberos 和CDH

centos 7 安裝LDAP 並集成kerberos 和CDH

-s 綁定 java sha fir {0} aps pam.d 1-1

參考:https://blog.csdn.net/u011196623/article/details/82502570 http://blog.chinaunix.net/uid-21926461-id-5676013.html http://blog.javachen.com/2014/11/12/config-ldap-with-kerberos-in-cdh-hadoop.html 一,簡介 LDAP是輕量目錄訪問協議,英文全稱是Lightweight Directory Access Protocol
  • LDAP的結構用樹來表示,而不是用表格。正因為這樣,就不能用SQL語句了
  • LDAP可以很快地得到查詢結果,不過在寫方面,就慢得多
  • LDAP提供了靜態數據的快速查詢方式
  • Client/server模型,Server 用於存儲數據,Client提供操作目錄信息樹的工具
  • 這些工具可以將數據庫的內容以文本格式(LDAP 數據交換格式,LDIF)呈現在您的面前
  • LDAP是一種開放Internet標準,LDAP協議是跨平臺的Interent協議
常用名詞: openLDAP 常用名詞解釋

o– organization(組織-公司) ou – organization unit(組織單元/部門) c - countryName(國家) dc - domainComponent(域名組件) sn – suer name(真實名稱) cn - common name(常用名稱) dn - distinguished name(專有名稱) 工作原理: OpenLDAP服務分為客戶端和服務端兩個部分,服務端的配置過程這裏不再贅述。當服務端配置結束後,在服務端的ldap數據庫中,應存放著用戶的信息,客戶端通過安裝nss-pam-ldapd(一個瘦身版本的 PAM 模塊和一個瘦身版本的 NSS 模塊集合),以及配置/etc/pam.d下的system-auth文件和password-auth兩個文件來完成客戶端的配置。 nss-pam-ldapd,是pam模塊和nss模塊的集合,主要作用是使存在於服務端ldap數據庫中的用戶,進行ssh登陸客戶端時,可以通過pam方式進行驗證,而這種情況下此用戶是不存在於客戶端的服務器上的。 openldap-clients,就是OpenLDAP的客戶端軟件包,此軟件包安裝後,不需要像服務端一樣運行起來,他的作用主要是集成了類似ldapsearch,ldapadd之類的命令,可以用戶驗證服務端或者對服務端數據庫中的用戶信息進行查詢, 添加等。 openldap,主要包含了OpenLDAP所必須的庫文件,當通過pam驗證時,這些庫文件是必須有的。 1. 環境說明
  • 操作系統:CentOs 7
  • Hadoop版本:CDH5.12.2
  • JDK版本:1.8.0_101
  • OpenLDAP 版本:2.4.44
  • Kerberos 版本:1.15.1-19.el7
  • 運行用戶:root
duan139 server端 duan140 client 端 2. 安裝   2.1 server端   2.1.1 yum安裝 yum install -y openldap openldap-clients openldap-servers migrationtools 2.1.2 生成密碼 slappasswd -s duan {SSHA}OvciPz+FWXBLNL0zxjP6RTS6K/UE1Dwb 2.1.3配置文件修改 vi /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif 修改內容 olcSuffix: dc=hadoop
,dc=com olcRootDN: cn=Manager,dc=hadoop,dc=com 添加內容 olcRootPW: {SSHA}OvciPz+FWXBLNL0zxjP6RTS6K/UE1Dwb #頂格寫,:後有空格 2.1.4 修改驗證 vi /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif 修改內容 olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern al,cn=auth" read by dn.base="cn=Manager,dc=hadoop,dc=com" read by * none 2.1.5 配置DB數據庫 cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG chown ldap:ldap -R /var/lib/ldap chmod 700 -R /var/lib/ldap 2.1.6 驗證 slaptest -u 看見:config file testing succeeded #驗證成功,否則失敗 2.1.7 授權,若不授權啟動時或報錯,權限不足 chown ldap:ldap -R /var/run/openldap chown -R ldap:ldap /etc/openldap/ 2.1.8 啟動 systemctl start slapd systemctl enable slapd 2.1.9 cd /etc/openldap/schema/

# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f cosine.ldif # ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f nis.ldif # ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f collective.ldif # ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f corba.ldif # ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f core.ldif # ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f duaconf.ldif # ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f dyngroup.ldif # ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f inetorgperson.ldif # ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f java.ldif # ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f misc.ldif # ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f openldap.ldif # ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f pmi.ldif # ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f ppolicy.ldif 2.1.10 執行ldapsearch -x檢查是否有如下輸出 ldapsearch -x -b ‘‘ -s base‘(objectclass=*)‘

# extended LDIF # # LDAPv3 # base <> with scope baseObject # filter: (objectclass=*) # requesting: ALL # # dn: objectClass: top objectClass: OpenLDAProotDSE # search result search: 2 result: 0 Success 如顯示上面信息,表示服務已經啟動成功。 2.1.11 創建管理員賬號 編輯ldif文件: vi base.ldif dn: dc=hadoop,dc=com o: hadoop com dc: hadoop objectClass: top objectClass: dcObject objectclass: organization dn: cn=root,dc=hadoop,dc=com cn: root objectClass: organizationalRole description: Directory Manager dn: ou=People,dc=hadoop,dc=com ou: People objectClass: top objectClass: organizationalUnit dn: ou=Group,dc=hadoop,dc=com ou: Group objectClass: top objectClass: organizationalUnit 導入數據庫 ldapadd -x -D "cn=Manager,dc=hadoop,dc=com" -W -f base.ldif 密碼是 duan 驗證 ldapsearch -x -b ‘dc= hadoop,dc=com‘ ‘(objectClass=*)‘ # extended LDIF # # LDAPv3 # base <dc= hadoop,dc=com> with scope subtree # filter: (objectClass=*) # requesting: ALL # # hadoop.com dn: dc=hadoop,dc=com o: hadoop com dc: hadoop objectClass: top objectClass: dcObject objectClass: organization # root, hadoop.com dn: cn=root,dc=hadoop,dc=com cn: root objectClass: organizationalRole description: Directory Manager # People, hadoop.com dn: ou=People,dc=hadoop,dc=com ou: People objectClass: top objectClass: organizationalUnit # Group, hadoop.com dn: ou=Group,dc=hadoop,dc=com ou: Group objectClass: top objectClass: organizationalUnit # search result search: 2 result: 0 Success # numResponses: 5 # numEntries: 4 2.1.12 通過migrationtools 實現OpenLDAP 用戶及用戶組的添加 參考:https://www.cnblogs.com/lemon-le/p/6206822.html (1)修改配置文件 vi /usr/share/migrationtools/migrate_common.ph # Default DNS domain $DEFAULT_MAIL_DOMAIN = "hadoop.com"; # Default base $DEFAULT_BASE = "dc=hadoop,dc=com"; (2) 生成基礎的數據導入數據庫文件 /usr/share/migrationtools/migrate_base.pl > base.ldif 並把base.ldif裏將不要的條目刪除,然後通過ldapadd導入LDAP ldapadd -x -D "cn=Manager,dc=hadoop,dc=com" -W -f base.ldif 密碼是 duan 驗證 ldapsearch -x -b ‘dc= hadoop,dc=com‘ ‘(objectClass=*)‘ (3)將系統用戶生成ldif文件 cat /etc/passwd |grep duan > duan.txt /usr/share/migrationtools/migrate_passwd.pl duan.txt duan.ldif /usr/share/migrationtools/migrate_group.pl /etc/group group.ldif ldapadd -x -D "cn=Manager,dc=hadoop,dc=com" -W -f duan.ldif adding new entry "uid=duan,ou=People,dc=hadoop,dc=com" ldap_add: Invalid syntax (21) additional info: objectClass: value #0 invalid per syntax 這通常的原因是導入的ldif 中存在不合法的Class,與Schema 中定義不符。例如:objectclass:organizationalRole 寫成 objectclass:organizational 等等。 解決方法是,修改Schema文件,或使用正確的Class定義。操作:2.1.9 步驟,出現ldap_add: Other (e.g., implementation specific) error (80) additional info: olcAttributeTypes: Duplicate attributeType: "2.5.4.2" 忽略即可。 2.2 client 客戶端安裝 http://blog.51cto.com/11093860/2161809 2.2.1 yum安裝 yum install nss-pam-ldapd openldap-clients openldap -y 2.2.2配置openLDAP-client vi /etc/openldap/ldap.conf TLS_CACERTDIR /etc/openldap/cacerts SASL_NOCANON on URI ldap://192.168.116.139/ BASE dc=hadoop,dc=com 2.2.3 authconfig-tui # 將下圖中紅框中的選中,然後next,按照提示操作完成即可。 2.2.4 分別查看以下文件的內容,是否已經自動更改成如下所示,若沒有,請手動更改,手動更改後,請勿再執行authconfig-tui命令,否則會將手動更改的內容覆蓋掉! (1)vi /etc/nsswitch.conf passwd: files ldap shadow: files ldap group: files ldap automount: files sss ldap (2) vi /etc/pam.d/system-auth (關註紅色字體就好) auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 1000 quiet_success auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so account required pam_unix.so broken_shadow account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 1000 quiet account [default=bad success=ok user_unknown=ignore] pam_ldap.so account required pam_permit.so password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password sufficient pam_ldap.so use_authtok password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so -session optional pam_systemd.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional pam_ldap.so (3) vi /etc/pam.d/password-auth #%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authconfig is run. auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 1000 quiet_success auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so account required pam_unix.so broken_shadow account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 1000 quiet account [default=bad success=ok user_unknown=ignore] pam_ldap.so account required pam_permit.so password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password sufficient pam_ldap.so use_authtok password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so -session optional pam_systemd.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional pam_ldap.so (4) vi /etc/sysconfig/authconfig(其中兩個) USELDAP=yes USELDAPAUTH=yes (5)vi /etc/ssh/sshd_config #確保沒有其他禁止用戶登陸的選項,將使用pam模塊選項改成yes UsePAM yes 2.2.5 啟動服務 systemctl restart nslcd systemctl restart sshd 2.2.6 測試 在服務端創建一個test,客戶端沒有改用戶。在客戶端 查詢: id test uid=1001(test) gid=1001 組=1001
2.2.6 nslcd 服務(沒有操作)
cp /etc/nslcd.conf /etc/nslcd.conf.old cat >> /etc/nslcd.conf <<EOF uri ldap://hadoop.com base dc=hadoop,dc=com EOF
  1. LDAP 和 Kerberos

在Kerberos安全機制裏,一個principal就是realm裏的一個對象,一個principal總是和一個密鑰(secret key)成對出現的。 這個principal的對應物可以是service,可以是host,也可以是user,對於Kerberos來說,都沒有區別。 Kdc(Key distribute center)知道所有principal的secret key,但每個principal對應的對象只知道自己的那個secret key。這也是 “共享密鑰” 的由來。 為了使 Kerberos 能夠綁定到 OpenLDAP 服務器,請創建一個管理員用戶和一個 principal,並生成 keytab 文件,設置該文件的權限為 LDAP 服務運行用戶可讀( LDAP 服務運行用戶一般為 ldap): $ kadmin.local -q "addprinc ldapadmin" 密碼是duan $ kadmin.local -q "addprinc -randkey ldap/duan139" $ kadmin.local -q "ktadd -k /etc/openldap/ldap.keytab ldap/duan139" $ chown ldap:ldap /etc/openldap/ldap.keytab && chmod 640 /etc/openldap/ldap.keytab 確保 LDAP 啟動時使用上一步中創建的keytab文件,在 /etc/sysconfig/ldap 增加 KRB5_KTNAME 配置: export KRB5_KTNAME=/etc/openldap/ldap.keytab 然後,重啟 slapd 服務。 systemctl restart slapd

centos 7 安裝LDAP 並集成kerberos 和CDH