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
/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
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/ldap 增加 KRB5_KTNAME 配置:
export KRB5_KTNAME=/etc/openldap/ldap.keytab
然后,重启 slapd 服务。
systemctl restart slapd
 

猜你喜欢

转载自www.cnblogs.com/duaner92/p/9931156.html