版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載默怨。http://www.reibang.com/p/9995aea194ef
一樟氢、概述
由于Hadoop安全模塊不存儲用戶和用戶組信息,同時在集群開啟kerberos認證后镇饺,需要映射Kerberos Principle到linux的用戶及用戶組乎莉,統(tǒng)一管理用戶信息的方式有OpenLDAP和AD,而AD是部署在Windows上的奸笤,本文主要介紹在linux環(huán)境下OpenLDAP的安裝及部署惋啃。
二、Server端安裝與配置
2.1 安裝介質(zhì)
?$ yum install -y openldap openldap-clients openldap-servers migrationtools
查看版本
在2.4以前的版本中监右,OpenLDAP使用slapd.conf配置文件來進行服務(wù)器的配置边灭,而2.4開始則使用slapd.d目錄保存細分后的各種配置,數(shù)據(jù)存儲位置在/etc/openldap/slapd.d健盒。
2.2 設(shè)置OpenLDAP管理員密碼
$ [root@wgqcasappun05 ~]# slappasswd -s wangkuan {SSHA}nNKPLICNp05v/eh27DquhJZkmsaCSgUx
上述加密后的字段需要保存下來绒瘦,后面配置文件中會用到。
2.3 配置文件修改
[root@wgqcasappun05slapd.d]# vi /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
修改內(nèi)容:
olcSuffix: dc=hadoop,dc=com
olcRootDN:cn=Manager,dc=hadoop,dc=com
添加內(nèi)容:
olcRootPW:{SSHA}nNKPLICNp05v/eh27DquhJZkmsaCSgUx???
說明扣癣,cn=Manager中的Manager表示OpenLDAP管理員的用戶名惰帽,而olcRootPW:為開始通過slappasswd生成的密碼,需注意格式的嚴謹搏色,“:”后必須有空格善茎,否則會因格式錯誤導致認證失敗频轿!
[root@wgqcasappun05 cn=config]# cat olcDatabase\=\{2\}hdb.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Useldapmodify.
# CRC32 17630c65
dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=hadoop,dc=com
olcRootDN:cn=Manager,dc=hadoop,dc=com
olcRootPW:{SSHA}nNKPLICNp05v/eh27DQuhJZkmsaCSgUx
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givennameeq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID:c8b8daea-16cd-1039-9fc3-01f93c3094e1
creatorsName: cn=config
createTimestamp: 20190530022423Z
entryCSN:20190530022423.917195Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20190530022423Z
2.4 修改驗證
[root@wgqcasappun05cn=config]#vi /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif
修改內(nèi)容:
olcAccess: {0}to * bydn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" readby dn.base="cn=Manager,dc=hadoop,dc=com" read by * none
[root@wgqcasappun05 ~]# cat ?/etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif
# AUTO-GENERATED FILE - DO
? NOT EDIT!! Use ldapmodify.
# CRC32 2dc3347a
dn: olcDatabase={1}monitor
objectClass: olcDatabaseConfig
olcDatabase: {1}monitor
olcAccess: {0}to * by? dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"? read by dn.base="cn=Manager,dc=hadoop,dc=com" read by * none
structuralObjectClass:olcDatabaseConfig
entryUUID: c8b8d0ea-16cd-1039-9fc2-01f93c3094e1
creatorsName: cn=config
createTimestamp: 20190530022423Z
entryCSN: 20190530022423.916939Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20190530022423Z ?
2.5 更新配置庫
$ 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.6 驗證
$slaptest -u
看見:config file testing succeeded ?#驗證成功垂涯,否則失敗
可以看到烁焙,驗證成功了,前面兩條信息可以忽略耕赘。
2.7 啟動OpenLDAP服務(wù)
$ systemctl start slapd
$ systemctl enable slapd
查看運行狀態(tài)
OpelLDAP默認監(jiān)聽端口是389骄蝇,確認服務(wù)正常啟動。
2.8 導入基本Schema
$ 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.9 執(zhí)行l(wèi)dapsearch -x檢查是否有如下輸出
$ldapsearch -x -b '' -s base'(objectclass=*)'
如顯示上面信息操骡,表示服務(wù)已經(jīng)啟動成功九火。
2.10 創(chuàng)建管理員賬號
$ 編輯/etc/openldap/schema/base.ldif文件
[root@wgqcasappun05 schema]# cat 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
導入數(shù)據(jù)庫
$ ldapadd -x -D ?"cn=Manager,dc=hadoop,dc=com" -W -f base.ldif
密碼是wangkuan,查詢驗證
[root@wgqcasappun05 schema]# ldapsearch -x -b 'dc= hadoop,dc=com'? '(objectClass=*)'
# extended LDIF
#
# LDAPv3
# base 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
# wangkuan, People, hadoop.com
dn: uid=wangkuan,ou=People,dc=hadoop,dc=com
uid: wangkuan
cn: wangkuan
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSEh
shadowLastChange: 18046
shadowMin: 1
shadowMax: 90
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 5199
gidNumber: 5199
homeDirectory: /home/wangkuan
# wangkuan1, People, hadoop.com
dn: uid=wangkuan1,ou=People,dc=hadoop,dc=com
uid: wangkuan1
cn: wangkuan1
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSEh
shadowLastChange: 18046
shadowMin: 1
shadowMax: 90
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 5200
gidNumber: 5200
homeDirectory: /home/wangkuan1
# search result
search: 2
result: 0 Success
# numResponses: 7
# numEntries: 6
2.11 migrationtools實現(xiàn)OpelLDAP用戶及用戶組的添加
1册招、修改配置文件/usr/share/migrationtools/migrate_common.ph
# Default DNS domain
$DEFAULT_MAIL_DOMAIN= "hadoop.com";
# Default base
$DEFAULT_BASE= "hadoop,dc=com";
2岔激、導入用戶及用戶組信息
a.導入用戶信息
將系統(tǒng)用戶生成ldif文件,此處以yhxwfx(用戶行為分析)這個用戶為例
# cat /etc/passwd |grep yhxwfx > yhxwfx.txt
生成用戶ldif文件
#/usr/share/migrationtools/migrate_passwd.pl?yhxwfx.txt yhxwfx.ldif
這個文件生成之后是掰,第一行dn的配置中默認是少了dc=hadoop的虑鼎,經(jīng)過數(shù)十次失敗的嘗試,確定需要額外新增加粗內(nèi)容键痛,否則你怎么添加條目都會報錯:
因此炫彩,下面這個文件為標準配置文件,需作為用戶新增的模板絮短,善加保存江兢!
[root@wgqcasappun05? migrationtools]# cat yhxwfx.ldif
dn: uid=yhxwfx,ou=People,dc=hadoop,dc=com
uid: yhxwfx
cn: yhxwfx
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}!!
shadowLastChange: 18050
shadowMin: 1
shadowMax: 90
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 5201
gidNumber: 5201
homeDirectory: /home/yhxwfx
將用戶導入到ldap中
# ldapadd -x -D "cn=Manager,dc=hadoop,dc=com" -W -f?yhxwfx.ldif
沒有報錯即說明導入成功。
b.導入用戶組信息
將系統(tǒng)用戶組生成ldif文件丁频,此處以yhxwfx(用戶行為分析)這個用戶為例
# cat /etc/group |grep yhxwfx > yhxwfxgroup.txt
生成用戶組ldif文件
#/usr/share/migrationtools/migrate_passwd.pl?yhxwfxgroup.txt yhxwfxgroup.ldif
同樣的杉允,這個文件生成之后,第一行dn的配置中也少了dc=hadoop限府,需要額外新增加粗內(nèi)容
[root@wgqcasappun05? migrationtools]# cat yhxwfxgroup.ldif
dn: cn=yhxwfx,ou=Group,dc=hadoop,dc=com
objectClass: posixGroup
objectClass: top
cn: yhxwfx
userPassword: {crypt}x
gidNumber: 5201
將用戶組導入到ldap中
# ldapadd -x -D "cn=Manager,dc=hadoop,dc=com" -W -f?yhxwfxgroup.ldif
沒有報錯即說明導入成功夺颤。
3、驗證
# ldapsearch -LLL -x -D 'cn=Manager,dc=hadoop,dc=com' -W -b 'dc=hadoop,dc=com' 'uid= yhxwfx'
可以看到胁勺,通過指定'uid= yhxwfx',我們就能夠查詢到這個用戶的數(shù)據(jù)独旷。
3署穗、Client端安裝與配置
3.1 安裝介質(zhì)
$ yum install nss-pam-ldapd openldap-clients openldap -y ?
3.2 Client端配置ldap.conf
編輯/etc/openldap/ldap.conf文件,指向ladp server端地址嵌洼,并配置dn案疲。
[root@wgqcasappun06wk]# cat /etc/openldap/ldap.conf
#
#LDAP Defaults
#
#See ldap.conf(5) for details
#This file should be world readable but not world writable.
#BASE? dc=example,dc=com
#URI??? ldap://ldap.example.com ldap://ldap-master.example.com:666
#SIZELIMIT 12
#TIMELIMIT 15
#DEREF????? never
TLS_CACERTDIR/etc/openldap/cacerts
#Turning this off breaks GSSAPI used with krb5 when rdns = false
SASL_NOCANON???? on
URL ldap://172.29.91.117/
BASE dc=hadoop,dc=com
URI ldap://172.29.91.117/
3.3 配置authconfig-tui
命令行輸入
$ authconfig-tui
選中圖中的*號項,點擊Next
填寫ldap地址:172.29.91.117麻养,并更新Base DN: dc=haddop,dc=com
3.4 驗證
操作系統(tǒng)層面不存在某個用戶褐啡,那么執(zhí)行id username會報如下錯:
在Client配置好之后,即便操作系統(tǒng)上不存在該用戶鳖昌,執(zhí)行id usename依然會檢索到該用戶备畦,因為該用戶已經(jīng)存入在LDAP數(shù)據(jù)庫中低飒。
至此,LDAP的配置就已完成懂盐。
4褥赊、LDAP集成Kerberos
4.1 創(chuàng)建LDAP管理員用戶
為了使kerberos能夠綁定到OpenLDAP服務(wù)器,需創(chuàng)建一個管理員用戶
$ kadmin.local -q "addprinc ldapadmin@SPDB.COM"
4.2 添加principal
$ kadmin.local -q "addprinc -randkey ldap/wgqcasappun05@SPDB.COM"
4.3 生成keytab文件
$ kadmin.local -q "ktadd -k /etc/openldap/ldap.keytab ldap/wgqcasappun05@SPDB.COM"
4.4 賦予keytab文件權(quán)限
$ chown ldap:ldap /etc/openldap/ldap.keytab && chmod 640 /etc/openldap/ldap.keytab
4.5 驗證keytab文件
使用ldapadmin用戶測試莉恼,輸入密碼沒有報錯說明已通過kerberos身份驗證拌喉。
$ kinit ldapadmin
4.5 增加KRB5_KTNAME配置
確保LDAP啟動時使用上一步創(chuàng)建的keytab文件,在/etc/sysconfig/sldap中增加如下內(nèi)容:
KRB5_KTNAME=/etc/openldap/ldap.keytab
之后重啟服務(wù)
$ systemctl restart? slapd
至此俐银,LDAP與kerberos已完成集成尿背。
kerberos的配置可查閱: