OpenLdap

简述

    主要介绍Openldap简要概念、部署过程、基础命令以及同步ldap用户到linux主机。

一、部署环境说明

机器版本:CentOS Linux release 7.6.1810

ldap版本: 2.4.44-25.el7_9

二、Ldap基础概念

目录树概念

  1. 目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。

  2. 条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。

  3. 对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。

  4. 属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。

DC、UID、OU、CN、SN、DN、RDN概念

关键字英文全称含义
dcDomain Component域名的部分,其格式是将完整的域名分成几部分,如域名为example.com变成dc=example,dc=com(一条记录的所属位置)
uidUser Id用户ID songtao.xu(一条记录的ID)
ouOrganization Unit组织单位,组织单位可以包含其他各种对象(包括其他组织单元),如“oa组”(一条记录的所属组织)
cnCommon Name公共名称,如“Thomas Johansson”(一条记录的名称)
snSurname姓,如“许”
dnDistinguished Name“uid=songtao.xu,ou=oa组,dc=example,dc=com”,一条记录的位置(唯一)
rdnRelative dn相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=tom”或“cn= Thomas Johansson”

三、OpenLdap搭建步骤

1、安装openladp
yum -y install openldap openldap-servers openldap-clients  compat-openldap 
查看验证 
yum list installed|grep ldap
2、配置数据库(复制数据库模板)
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
chmod 700 -R /var/lib/ldap
3、设置开机启动并启动服务(可选)
systemctl enable slapd
systemctl start slapd

查看服务启动情况

#ldap服务端进程为slapd,端口389,默认情况下数据为明文传输,添加ssl配置后为密文数据传输,端口636
netstat -tunlp |grep slapd
4、生成openldap管理员密码
[root@cm118 ~]# slappasswd
New password:
Re-enter new password:
{SSHA}cWqVfoS+Tzpix6DwRWyyX/z2/VNv8Rrx

说明:这里要手动输入密码,我这里输入123456
5、编写 LDIF(一种LDAP 专用的数据交换格式)文件
[root@cm118 ldapd]# more chrootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}cWqVfoS+Tzpix6DwRWyyX/z2/VNv8Rrx

通过ldapadd命令将管理员密码导入到 LDAP配置文件中

[root@cm118 ldapd]# ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
6、向 LDAP 中导入一些基本的 Schema
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

说明:这些 Schema 文件位于 /etc/openldap/schema/ 目录中,schema控制着条目拥有哪些对象类和属性
7、配置 LDAP 的根域(以 dc=test,dc=com 为例)及其管理域

编辑配置文件vim chdomain.ldif

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
  read by dn.base="cn=admin,dc=test,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=test,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=test,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}x9JDKqBOhYvh9MUWD68jnmBJWxd06WNw

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=admin,dc=test,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=test,dc=com" write by * read

导入到ldap 配置中

[root@cm118 ldapd]# ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"
8、在上述基础上,创建组织以及角色

我们来创建一个叫做 wbigdata company 的组织,并在其下创建一个 admin 的组织角色(该角色内的用户具有管理整个 LDAP 的权限)和 People 和 Group 两个组织单元

编辑配置文件

[root@cm118 ldapd]# more basedomain.ldif
dn: dc=test,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: wbigdata Company
dc: test

dn: cn=admin,dc=test,dc=com
objectClass: organizationalRole
cn: admin

dn: ou=People,dc=test,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=test,dc=com
objectClass: organizationalRole
cn: Group

将其导入到ldap配置中

[root@cm118 ldapd]# ldapadd -x -D cn=admin,dc=test,dc=com -W -f basedomain.ldif
Enter LDAP Password:
adding new entry "dc=test,dc=com"

adding new entry "cn=admin,dc=test,dc=com"

adding new entry "ou=People,dc=test,dc=com"

adding new entry "ou=Group,dc=test,dc=com"

通过以上的所有步骤,我们就设置好了一个 LDAP 目录树:

其中基准 dc=test,dc=com 是该树的根节点,其下有一个管理域 cn=admin,dc=test,dc=com

和两个组织单元 ou=People,dc=test,dc=com 及 ou=Group,dc=test,dc=com。

至此ldap1服务器端已配置完成。

可以使用下面命令查看所有条目

ldapsearch -x -b "dc=test,dc=com" -H ldap://127.0.0.1

四、Ldap管理工具安装

1、phpldapadming管理工具

1)安装httpd 服务

yum install httpd -y

2) 修改httpd服务配置

vim /etc/httpd/conf/httpd.conf 修改102行

<Directory />
    AllowOverride none
    Require all denied
</Directory>

 AllowOverride none 改为  AllowOverride all

3)启动httpd服务

systemctl start httpd

4)安装配置phpldapadmin

yum install phpldapadmin -y 

注:若无此安装包则执行yum -y install epel-release 后再执行上述命令安装

5)配置phpldapadmin

vim /etc/phpldapadmin/config.php

#取消下面配置的注释
$servers->setValue('server','host','127.0.0.1');  #298行
$servers->setValue('login','attr','dn'); #397行
#注释下面的配置
//$servers->setValue('login','attr','uid'); #398行

其他设置说明

其他设置:

# 460行,关闭匿名登录,否则任何人都可以直接匿名登录查看所有人的信息

$servers->setValue('login','anon_bind',false);

# 519行,设置用户属性的唯一性,这里我将cn,sn加上了,以确保用户名的唯一性

$servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn'));

温馨提示:进入命令行模式 可以输出:行号 直接跳转到当前行  set nu显示行号

6)配置http相关访问权限

vim /etc/httpd/conf.d/phpldapadmin.conf

<IfModule mod_authz_core.c>
    # Apache 2.4
    Require local
  </IfModule>
修改部分为  
Require local  修改为  Require all granted

7)重启httpd服务

systemctl restart httpd

8)打开页面并登录

http://192.168.242.118/phpldapadmin/  

提示:这里需要http协议打开 不是https。点击登录即可进行认证登录,注意用户是全路径

dc954e12723b8a228bb3777143af479f.png

67a15560b44b2c6ab872b4a1b4965e4a.png

当然还有其他管理工具,比如 ldap-account-management 、Ldap ADMIN等,感兴趣的可以自行了解。

五、Ldap基础命令

1、ldapadd

-x  进行简单认证

-D  用来绑定服务器的DN

-h  目录服务的地址

-w  绑定DN的密码

-f  使用ldif文件进行条目添加的文件

示例

ldapadd -x -D "cn=root,dc=starxing,dc=com" -w secret -f /root/test.ldif

ldapadd -x -D "cn=root,dc=starxing,dc=com" -w secret (这样写就是在命令行添加条目)

2、ldapsearch

-x  进行简单认证          -x:简单认证模式,不使用默认的SASL认证方法。

-D  用来绑定服务器的DN

-w  绑定DN的密码

-b  指定要查询的根节点    -b:指定查找的basedn

-H  制定要查询的服务器

-LLL:禁止输出与查找范围不匹配的信息。

-s:指定本次要搜索的属性对应的值。

ldapsearch -x -D "cn=root,dc=starxing,dc=com" -w secret -b "dc=starxing,dc=com"

使用简单认证,用 "cn=root,dc=starxing,dc=com" 进行绑定,

要查询的根是 "dc=starxing,dc=com"。这样会把绑定的用户能访问"dc=starxing,dc=com"下的

所有数据显示出来。

ldapsearch -x -W -D "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -b "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -h troy.osdn.zzti.edu.cn

ldapsearch -b "dc=canon-is,dc=jp" -H ldaps://192.168.0.92:636

3、ldapdelete

ldapdelete -x -D "cn=Manager,dc=test,dc=com" -w secret "uid=test1,ou=People,dc=test,dc=com"

ldapdelete -x -D 'cn=root,dc=it,dc=com' -w secert 'uid=zyx,dc=it,dc=com'

这样就可以删除'uid=zyx,dc=it,dc=com'记录了,应该注意一点,如果o或ou中有成员是不能删除的。

4、ldappasswd

-x  进行简单认证

-D  用来绑定服务器的DN

-w  绑定DN的密码

-S  提示的输入密码

-s pass 把密码设置为pass

-a pass 设置old passwd为pass

-A  提示的设置old passwd

-H  是指要绑定的服务器

-I  使用sasl会话方式

#ldappasswd -x -D 'cm=root,dc=it,dc=com' -w secret 'uid=zyx,dc=it,dc=com' -S

New password:

Re-enter new password:

就可以更改密码了,如果原来记录中没有密码,将会自动生成一个userPassword。

5、ldapmodify

-a 添加新的条目.缺省的是修改存在的条目.

-C 自动追踪引用.

-c 出错后继续执行程序并不中止.缺省情况下出错的立即停止.比如如果你的ldif 文

 件内的某个条目在数据库内并不存在,缺省情况下程序立即退出,但如果使用了该参数,程

 序忽略该错误继续执行.

-n 用于调试到服务器的通讯.但并不实际执行搜索.服务器关闭时,返回错误;服务器

 打开时,常和-v 参数一起测试到服务器是否是一条通路.

-v 运行在详细模块.在标准输出中打出一些比较详细的信息.比如:连接到服务器的

 ip 地址和端口号等.

-M[M] 打开manage DSA IT 控制. -MM 把该控制设置为重要的.

-f file 从文件内读取条目的修改信息而不是从标准输入读取.

-x 使用简单认证.

-D binddn 指定搜索的用户名(一般为一dn 值).

-W 指定了该参数,系统将弹出一提示入用户的密码.它和-w 参数相对使用.

-w bindpasswd 直接指定用户的密码. 它和-W 参数相对使用.

-H ldapuri 指定连接到服务器uri(ip 地址和端口号,常见格式为

 ldap://hostname:port).如果使用了-H 就不能使用-h 和-p 参数.

-h ldaphost 指定要连接的主机的名称/ip 地址.它和-p 一起使用.

-p ldapport 指定要连接目录服务器的端口号.它和-h 一起使用.

 如果使用了-h 和-p 参数就不能使用-H 参数.

-Z[Z] 使用StartTLS 扩展操作.如果使用-ZZ,命令强制使用StartTLS 握手成功.

-V 启用证书认证功能,目录服务器使用客户端证书进行身份验证,必须与-ZZ 强制启用

 TLS 方式配合使用,并且匿名绑定到目录服务器.

-e 设置客户端证书文件,例: -e cert/client.crt

-E 设置客户端证书私钥文件,例: -E cert/client.key

#ldapmodify -x -D "cn=root,dc=it,dc=com" -W -f modify.ldif

将modify.ldif中的记录更新原有的记录。

6、其他命令

slapd -VV  #查看ldap版本

六、LDAP实操

1、新增CN(公共名称),可以理解为Linux系统上的用户组

在Group组织单元中,增加名称为tom的公共名称,配置文件如下

[root@cm118 ldapd]# more add_group_tom.ldif
dn: cn=tom,ou=Group,dc=test,dc=com
objectClass: posixGroup
objectClass: top
cn: tom
gidNumber: 1000

执行命令向ldap中添加tom cn条目

[root@cm118 ldapd]# ldapadd -h 192.168.242.118 -w 123456 -x  -D "cn=admin,dc=test,dc=com"  -f add_group_tom.ldif
adding new entry "cn=tom,ou=Group,dc=test,dc=com"
2、添加用户ID即uid ,理解为linux上的用户

编辑配置文件,功能是增加一个名称为tom 的uid

[root@cm118 ldapd]# more add_user_tom.ldif
dn: uid=tom,ou=Group,dc=test,dc=com
uid: tom
cn: tom
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
loginshell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/tom
userpassword: tom123456

执行命令向ldap中添加tom uid条目

[root@cm118 ldapd]# ldapadd -h 192.168.242.118 -w 123456 -x  -D "cn=admin,dc=test,dc=com"  -f add_user_tom.ldif
adding new entry "uid=tom,ou=Group,dc=test,dc=com"
3、查找CN或者UID

查看cnldapsearch -x -LLL -h localhost -b "dc=test,dc=com" -D "cn=admin,dc=test,dc=com" -w 123456 "(&(objectClass=posixGroup)(cn=tom))"

查找uidldapsearch -x -LLL -h localhost -b "dc=test,dc=com" -D "cn=admin,dc=test,dc=com" -w 123456 "(&(objectClass=posixAccount)(uid=tom))"

查找所有uidldapsearch -x -LLL -h localhost -b "dc=test,dc=com" -D "cn=admin,dc=test,dc=com" -w 123456 "(&(objectClass=posixAccount)(uid=*))"

查看所有组idldapsearch -x -LLL -h localhost -b "dc=test,dc=com" -D "cn=admin,dc=test,dc=com" -w 123456 "(&(objectClass=posixGroup)(cn=*))"|grep gidNumber |sort -t " " -k2

查看所有uid ldapsearch -x -LLL -h localhost -b "dc=test,dc=com" -D "cn=admin,dc=test,dc=com" -w 123456 "(&(objectClass=posixAccount)(uid=*))" |grep uidNumber|sort -t " " -k2

限制返回两条displayName值  相当于限制了查询  -z 2 displayNameldapsearch -x -LLL -h localhost -b "dc=test,dc=com" -D "cn=admin,dc=test,dc=com" -w 123456 "(&(objectClass=posixGroup)(cn=*))" -z 2 displayName

4、删除uid和cn

删除uidldapdelete -h localhost -x -D 'cn=admin,dc=test,dc=com' -w 123456 'uid=tom,ou=People,dc=test,dc=com'

删除cnldapdelete -h localhost -x -D 'cn=admin,dc=test,dc=com' -w 123456 'cn=tom,ou=People,dc=test,dc=com'

5、修改LDAP用户密码

示例中修改的新密码是testww45678

ldappasswd -x -h localhost -D  'cn=admin,dc=test,dc=com' -w 123456 'uid=tom,ou=Group,dc=test,dc=com' -s testww45678

注:密码不可以查看只能校验。因此忘记密码只能重置。

七、配置Ldap用户同步至Linux

实现目的:当在ldap中创建一个用户,可以在linux 中通过id 用户查看,但是linux /etc/passwd无此用户。

此操作是基于Ldap搭建完成情况下进行。

1、安装sssd相关服务
yum -y install  openldap-clients sssd sssd-client sssd-ldap sssd-tools authconfig nss-pam-ldapd oddjob-mkhomedir

说明:此时sssd服务是启动不成功的,因为还没有/etc/sssd/sssd.conf配置文件

2、通过authconfig对sssd进行配置
authconfig --enableldap --enableldapauth --ldapserver="192.168.242.118" --ldapbasedn="dc=test,dc=com" --update

此时会生成/etc/sssd/sssd.conf 配置文件,启动sssd服务。

systemctl start sssd

扩展

authconfig是Linux系统上一个对各种认证资源进行统一配置的工具,我们将通过它完成一部分的SSSD配置

3、查看上面创建的tom用户

id tom

c27a6e7c37f3578248fb08b4dda028e2.png

说明已配置同步完成

此篇文档为后续ranger同步ldap用户做铺垫。

本人旨在分享工作中一些用到的知识技能

如有感兴趣欢迎关注Wbigdata微信公众号,也可私信留下你的联系方式交流大数据相关以及之外的技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值