centos 7 安裝LDAP 並集成kerberos 和CDH


一,簡介
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
#
 
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 用戶及用戶組的添加  
 (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
cat /etc/group |grep duan > duangroup.txt
/usr/share/migrationtools/migrate_passwd.pl duan.txt duan.ldif
/usr/share/migrationtools/migrate_group.pl duangroup.txt duangroup.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" 忽略即可。
 (4) 驗證
ldapsearch -LLL -x -D 'cn=Manager,dc=hadoop,dc=com' -W -b 'dc=hadoop,dc=com' 'uid=duan'
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
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
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/sldap增加 KRB5_KTNAME 配置:
KRB5_KTNAME=/etc/openldap/ldap.keytab
備注:OPENldap使用的端口號: 明文:389 ,密文:636(需啟動TLS/SASL),可以在 /etc/sysconfig/sldap中修改為端口號為4567.如下:
SLAPD_URLS=”ldapi://0.0.0.0:4567/ ldap://0.0.0.0:4567/”
firewall-cmd  --zone=public --add-port=389/tcp --permanent 重啟防火牆。
然后,重啟 slapd 服務。
systemctl restart slapd
          4. LDAP集成impala
         4.1 打開cloudera manager--> impala --> 配置,修改以下選項:
(1)enable_ldap_auth 啟用LDAP身份驗證
(2)LDAP URL 填入:ldap://duan139
(3)LDAP BaseDN:ou=People,dc=hadoop,dc=com
(4)Impala 命令行參數高級配置代碼段(安全閥),填入 --ldap_passwords_in_clear_ok
說明:如果沒有開啟 ssl,則添加  -ldap_passwords_in_clear_ok=true,同樣如果開啟了 ssl,則  ldap_uri 值為  ldaps://XXXX
        4.2 驗證impala客戶端
LDAP:

impala-shell -l -u duan --auth_creds_ok_in_clear (密碼duan)

beeline -u "jdbc:hive2://duan140:21050/default;user=duan;password=duan" -n duan -p duan --verbose=true

kerberos:

kinit -kt /tmp/keytab/duan.keytab duan

impala-shell -i duan140 -d default -k

beeline -u "jdbc:hive2://duan140:21050/default;principal=impala/duan140@HADOOP.COM;AuthMeth=1"

 


免責聲明!

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



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