版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/9995aea194ef
一、概述
由于Hadoop安全模块不存储用户和用户组信息,同时在集群开启kerberos认证后,需要映射Kerberos Principle到linux的用户及用户组,统一管理用户信息的方式有OpenLDAP和AD,而AD是部署在Windows上的,本文主要介绍在linux环境下OpenLDAP的安装及部署。
二、Server端安装与配置
2.1 安装介质
$ yum install -y openldap openldap-clients openldap-servers migrationtools
查看版本
在2.4以前的版本中,OpenLDAP使用slapd.conf配置文件来进行服务器的配置,而2.4开始则使用slapd.d目录保存细分后的各种配置,数据存储位置在/etc/openldap/slapd.d。
2.2 设置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
修改内容:
olcSuffix: dc=hadoop,dc=com
olcRootDN:cn=Manager,dc=hadoop,dc=com
添加内容:
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
修改内容:
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服务
$ systemctl start slapd
$ systemctl enable slapd
查看运行状态
OpelLDAP默认监听端口是389,确认服务正常启动。
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 执行ldapsearch -x检查是否有如下输出
$ldapsearch -x -b '' -s base'(objectclass=*)'
如显示上面信息,表示服务已经启动成功。
2.10 创建管理员账号
$ 编辑/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
导入数据库
$ 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实现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.导入用户信息
将系统用户生成ldif文件,此处以yhxwfx(用户行为分析)这个用户为例
# cat /etc/passwd |grep yhxwfx > yhxwfx.txt
生成用户ldif文件
#/usr/share/migrationtools/migrate_passwd.pl yhxwfx.txt yhxwfx.ldif
这个文件生成之后,第一行dn的配置中默认是少了dc=hadoop的,经过数十次失败的尝试,确定需要额外新增加粗内容,否则你怎么添加条目都会报错:
因此,下面这个文件为标准配置文件,需作为用户新增的模板,善加保存!
[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.导入用户组信息
将系统用户组生成ldif文件,此处以yhxwfx(用户行为分析)这个用户为例
# cat /etc/group |grep yhxwfx > yhxwfxgroup.txt
生成用户组ldif文件
#/usr/share/migrationtools/migrate_passwd.pl yhxwfxgroup.txt yhxwfxgroup.ldif
同样的,这个文件生成之后,第一行dn的配置中也少了dc=hadoop,需要额外新增加粗内容
[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',我们就能够查询到这个用户的数据。
3、Client端安装与配置
3.1 安装介质
$ 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 验证
操作系统层面不存在某个用户,那么执行id username会报如下错:
在Client配置好之后,即便操作系统上不存在该用户,执行id usename依然会检索到该用户,因为该用户已经存入在LDAP数据库中。
至此,LDAP的配置就已完成。
4、LDAP集成Kerberos
4.1 创建LDAP管理员用户
为了使kerberos能够绑定到OpenLDAP服务器,需创建一个管理员用户
$ 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文件权限
$ 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启动时使用上一步创建的keytab文件,在/etc/sysconfig/sldap中增加如下内容:
KRB5_KTNAME=/etc/openldap/ldap.keytab
之后重启服务
$ systemctl restart slapd
至此,LDAP与kerberos已完成集成。
kerberos的配置可查阅: