首页 > 其他分享 >OpenLDAP 系列7 --- memberof & refint

OpenLDAP 系列7 --- memberof & refint

时间:2022-12-18 18:45:44浏览次数:69  
标签:refint cn memberof dc --- Group ou com example

一、概念

设想一下,一家互联网公司有以下团队:

IT团队负责维护各种硬件,他们有权限给任何服务器打补丁,他们拥有系统最高权限,但是对于数据库他们没有访问权限;

OPS团队负责上线部署,他们掌管线上环境的读写权限(包括数据库),但他们对开发环境不屑一顾;

开发团队负责开发并将代码部署至开发环境,但他们没有访问线上环境的权限,或者仅有只读权限。

我们可以通过在LDAP中设置不同的组来满足这种权限划分,我们可以创建IT Group,OPS Group和Engineer Group并未不同的组赋予不同的权限,当不同环境的不同系统进行鉴权的时候就可以利用当前登录者的所属组进行授权。我们最好还要有自动更新机制,比如我们修改了一个员工的dn,我们希望与他相关的Group能动态做出更新。

IT Group: cn=IT,ou=Group,dc=example,dc=com

dn: cn=IT,ou=Group,dc=example,dc=com
objectclass: groupOfNames
cn: IT

OPS Group: cn=OPS,ou=Group,dc=example,dc=com

dn: cn=OPS,ou=Group,dc=example,dc=com
objectclass: groupOfNames
cn: OPS

Engineer Group: cn=Engineer,ou=Group,dc=example,dc=com

dn: cn=Engineer,ou=Group,dc=example,dc=com
objectclass: groupOfNames
cn: Engineer

1. Overlays

Overlays是Open LDAP的一种软件功能模块,它通过给其他功能提供一些钩子(Hook)来实现类似backend的功能。

我们标题中提到的Member和Referential都是一种Overlay。

2. memberof

Member是连接Group和Entry的桥梁。

继续我们上面提到的需求场景,我们把所有员工创建在"ou=People,dc=example,dc=com"这个DN之下,然后将员工的Entry添加到不同Group下。

dn: ou=People,dc=example,dc=com
objectclass: organizationalUnit
ou: People

dn: uid=zhangsan,ou=People,dc=example,dc=com
objectclass: account
uid: zhangsan

dn: cn=IT,ou=Group,dc=example,dc=com
objectclass: groupOfNames
cn: IT
member: uid=zhangsan,ou=People,dc=example,dc=com

3. refint

全称是Referential Integrity,它用于支持动态更新。

继续上面的例子,当配置refint之后,我们将zhangsan删除,或者将张三的dn改为“uid=lisi,ou=People,dc=example,dc=com”,那么Group “cn=IT,ou=Group,dc=example,dc=com”内的member属性会被动态更新。

二、准备

1. 查看已启用的模块:

sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b  cn=config | grep -i module

如果没有配置过任何module,则会显示:

2. 查看安装路径

find / -iname memberof.la

目录为:

/usr/lib64/openldap/memberof.la

另一个我们要配置的refint.la位于:

/usr/lib64/openldap/refint.la

3. 工作目录

cd ~/OpenLDAP

三、配置

1. memberof

(1) 新建module4memberof.ldif文件:

vi module4memberof.ldif

(2) 初始化内容

dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModuleLoad: memberof.la
olcModulePath: /usr/lib64/openldap

(3) 添加模块

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f module4memberof.ldif

(4) 校验

sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config | grep -i module

2. 将memberof配置到数据库

(1) 查询数据库配置,本文使用的数据库为mdb

sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcDatabase | grep mdb

(2) 创建overlay4memberof.ldif

vi overlay4memberof.ldif

(3) 初始化内容

dn: olcOverlay=memberof,olcDatabase={3}mdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfRefInt: TRUE
olcMemberOfDangling: ignore
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

(4) 添加配置

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f overlay4memberof.ldif

3. refint

(1) 创建module4refint.ldif

vi module4refint.ldif

(2) 初始化内容

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: refint.la

(3) 更新配置

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f module4refint.ldif

(4) 校验

sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config | grep -i module

4. 配置Group和Member 

(1) 添加数据

使用LDAP命令方式添加Group的过程在之前https://www.cnblogs.com/eagle6688/p/15978344.html中有提及,不再赘述。

我个人强烈建议使用PHPLDAPAdmin UI添加Group,Member和它们之间的关系,这样容易的多。

需要提醒的是,针对不同的角色,我建议使用以下ObjectClass:

二层:organizationalRole

Group:groupOfNames

People:inetOrgPerson

Server: device + ipHost + shadowAccount

(2) 检验memberof属性,

sudo ldapsearch -H ldapi:/// -Y EXTERNAL -LLL -b uid=<<用户名>>,ou=People,dc=example,dc=com memberOf

五、参考

https://www.openldap.org/doc/admin24/overlays.html#Reverse%20Group%20Membership%20Maintenance

https://kifarunix.com/how-to-create-openldap-member-groups/

标签:refint,cn,memberof,dc,---,Group,ou,com,example
From: https://www.cnblogs.com/eagle6688/p/16990393.html

相关文章

  • 经典文献阅读之--Swin Transformer
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • Docker进阶--Docker Compose
    Docker进阶DockerCompose一、定义:compose是Docker官方开源项目,轻松管理容器、定义运行多个容器应用,批量容器编排。二、使用过程定义、运行多个容器YAML配置文......
  • Nginx入门--学习总结
    Nginx入门核心功能:反向代理、负载均衡、动静分离nginx的安装、启动nginx常用命令,进入/usr/local/nginx/sbin./nginx--启动./nginx-sstop--停止nginx./ng......
  • K8S--环境运维记录一
    K8S使用K8S使用过程中的命令与错误整理常用命令利用configmap创建配置信息文件kubectlcreateconfigmap-neurekaeureka-config--from-file=application.......
  • 【Python012-递归函数&匿名函数(lambda)&内置函数】
    递归的特点函数内部自己调用自己必须有出口应用:3以内数字累加和代码#3+2+1defsum_numbers(num):#1.如果是1,直接返回1--出口ifnum==1:return1......
  • DRF视图集中添加其他API--@action装饰器
    问题:DRF视图集中若想添加其他API?通过给视图集中的函数,添加DRF的@action()装饰器DRF的@action装饰器,用来为函数添加路由,主要参数有:methods:支持的请求方式,值为一个列表,默......
  • 【Pytest--html报告优化+增加错误截图,获取统计数据】
    一、pytest生成的原始html报告1、在我们实际工作中,环境信息不一定要在报告中详细提现,可以增减2、用例信息,默认展示的是用例的model名::用例名称,并不直观,所以我们可以增加一......
  • 浅谈入行Qt桌面端开发程序员-从毕业到上岗(1):当我们说到桌面端开发时,我们在谈论什么?
    谈谈我自己大家好,我是轩先生,是一个刚入行的Qt桌面端开发程序员。我的本科是双非一本的数学专业,22年毕业,只是部分课程与计算机之间有所交叉,其实在我毕业的时候并没有想过会......
  • 实验七-缓冲区溢出
    实验七-缓冲区溢出 实验指导书内容一、实验简介   缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的......
  • Java8-Stream流在项目中的常用方式。
    Java8-Stream流在项目中的常用方式。1.Stream简单介绍​ Stream流是Jdk1.8的高级新特性,它允许允许以声名式的方式处理数据集合,简单来说就是运用流式Api来处理数组、集合......