eryajf / go-ldap-admin

🌉 基于Go+Vue实现的openLDAP后台管理项目

Home Page:http://ldapdoc.eryajf.net

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

go-ldap-admin创建组后同步不到SecureLink

kanebay opened this issue · comments

你使用了哪个版本? | Which version did you use?

go-ldap-admin-v0.5.16-linux-amd64

问题描述:
在go-ldap-admin创建了分组,并在分组下创建用户后,在应用端导入的时候:
如果搜索入口用 ou=test,dc=test,dc=com (这个ou是分组所在的ou),则提示找不到用户;
如果搜索入口用 ou=people,dc=test,dc=com(所有用户所在的ou),能导入在控制台创建的所有用户,但是导入不了分组信息;

提问:
如何将在控制台创建的用户和组信息,同时导入到应用中?搜索入口应该使用什么? 谢谢

您好 @kanebay👋,我已收到您的反馈,我将安排时间考虑您提交的信息并进行回复。-- 这条信息是由自动回复的机器人发出的。

Hello @kanebay. I have received your feedback, and I will arrange time to consider the information you submitted and reply. -- This message is sent by an automatic reply robot.

看这里可以了解当前设计的思路: http://ldapdoc.eryajf.net/pages/5683c6/

你应该创建 cn 类型的分组,然后把用户放进去,检索的时候写: cn=test,dc=eryajf,dc=net ,就可以解决你的问题。

看这里可以了解当前设计的思路: http://ldapdoc.eryajf.net/pages/5683c6/

你应该创建 cn 类型的分组,然后把用户放进去,检索的时候写: cn=test,dc=eryajf,dc=net ,就可以解决你的问题。

请问下,您这里描述的用户放进去的cn类的分组,是指这样:
cn=group,cn=test,dc=eryajf,dc=net;
cn=group1,cn=test,dc=eryajf,dc=net;
cn=group2,cn=test,dc=eryajf,dc=net
搜索入口写:cn=test,dc=eryajf,dc=net

还是这样:
cn=test,dc=eryajf,dc=net
cn=test1,dc=eryajf,dc=net
cn=test2,dc=eryajf,dc=net
搜索入口写:cn=test,dc=eryajf,dc=net

搜索入口应该是你分组的完整dn,也就是 cn=group1,cn=test,dc=eryajf,dc=net,那么搜索入口也应该是 cn=group1,cn=test,dc=eryajf,dc=net

了解了; 我现在的需求是想把如下这种组织关系导入到第三方系统里:
group1中的user1(uid=user1,ou=people,dc=eryajf,dc=net),以及group1(cn=group1,cn=test,dc=eryajf,dc=net)这个组;
group2中的user2(uid=user2,ou=people,dc=eryajf,dc=net),以及group2(cn=group2,cn=test,dc=eryajf,dc=net)这个组;

导入第三方系统后,能带出来如下组信息:
|-group1
空格 |--user1
|-group2
空格 |--user2

这样我就能对group1和group2赋权了,不用通过给每个用户赋权。

请问我如何实现这种,我现在试了多种方式,都不太行,请教下

你看看我这篇文档,应该就会用了:https://wiki.eryajf.net/pages/e78558/

好的 非常感谢,我在看了。

我仔细阅读了文章,也掌握了文章里列到的ldapsearch命令的各个参数。

尝试了几种过滤器语句,但是还是没有思路,不知您能否给点建议? 该如何将组织结构导入第三方系统(第三方支持组织结构导入)

我如果在ou=people,dc=cun,dc=com 这个ou下,即ldap-admin默认用户所属的ou下,手动创建2个cn作为组用,然后在这2个cn下分别手动创建1个uid,以 ou=people,dc=cun,dc=com 为搜索入口,检索条件是 (objectclass=person),是能导入组信息和用户的:

手动创建cn作为组,手动创建uid作为用户,ldap树结构信息是这样的:

>                    ou=people,dc=cun,dc=com  
>           cn=test1,ou=people,dc=cun,dc=com
>           cn=test2,ou=people,dc=cun,dc=com
> uid=test1,cn=test1,ou=people,dc=cun,dc=com
> uid=test2,cn=test2,ou=people,dc=cun,dc=com

> 导入第三方系统后的组结构(这个就是我想要的):

> |-test1组
>     |--test1用户
> |-test2组
>     |--user2用户

当前的现象是:
ldap-admin控制台上创建的用户,不管分配到哪个组,其实都放在了ou=people,dc=cun,dc=com这个ou下,我仔细研读了设计原则,也明白当前就是这么定的。
ldap-admin控制台上创建的组,却没有放到ou=people,dc=cun,dc=com这个ou,这我也知道也是设计成这样的;我观察了组的属性字段,其中‘uniqueMember’这个字段,关联了本组下的所有用户的dn。

我的问题是:
如何使用您的go-ldap-admin控制台来创建用户和组信息(而不是用phpadmin简陋的控制台界面),且能将将用户和组信息导入第三方系统,像这样:

> 期望的导入第三方系统后的组结构:

> |-test1组
>     |--test1用户
> |-test2组
>     |--user2用户

期待回复。

大佬能回复下上面我提到的吗?

你看看这样设计是不是就是你想要的效果了:

刚刚创建的时候我发现了,我之前创建的默认group,给指定为cn了,然后按照你设计的,删除掉之后,重新创建为ou了。

剩下的就是你在test1和test2里边加人就可以了。

你是说我创建test1和test2分组的时候,放到group下?group由默认的cn改成OU?

属性创建之后应该无法更改,所以可先删除group,再创建ou类型的group。然后如上截图就可以了

不是太明白; 算啦,已经搞了好几天了,搞不赢,老老实实去搞那个phpldapadmin了,多谢大佬!!!

不是太明白; 算啦,已经搞了好几天了,搞不赢,老老实实去搞那个phpldapadmin了,多谢大佬!!!

手动创建cn作为组,手动创建uid作为用户,ldap树结构信息是这样的:

>                    ou=people,dc=cun,dc=com  
>           cn=test1,ou=people,dc=cun,dc=com
>           cn=test2,ou=people,dc=cun,dc=com
> uid=test1,cn=test1,ou=people,dc=cun,dc=com
> uid=test2,cn=test2,ou=people,dc=cun,dc=com

话说你已经理解到这里了,现在只是把people换成group,有啥还不理解的吗,我看下来,可能也就只有一点了。

go-ldap-admin默认所有用户在people下,这是没问题的,之后你再创建上边截图的分组,然后把用户添加到cn=test1,ou=group,dc=eryajf,dc=net和cn=test2,ou=group,dc=eryajf,dc=net里就可以了,你不明白的点是什么呢

我反复测试过,我理解在go-ldap-admin管控台上创建的用户,不管添加到哪个组下比如:cn=test1,ou=group,dc=eryajf,dc=net或cn=test2,ou=group,dc=eryajf,dc=net,实际的用户最终的dn,还是 uid=test1,ou=people,dc=cun,dc=com或者 uid=test2,ou=people,dc=cun,dc=com; 这个是你的设计原则,people是换不成别的ou的比如:ou=group,dc=eryajf,dc=net,不知我理解的对不对

这个理解没有问题,的确是这样的。

这样设计针对你的场景,有什么问题吗,毕竟三方应用对接之后,都是通过test1,test2作为用户名登陆,而不是dn。

在go-ldap-admin管控台上创建组和用户后:

现在我的组的dn信息是这样的:
cn=test1,ou=group,dc=eryajf,dc=net
cn=test2,ou=group,dc=eryajf,dc=net

用户的dn是这样的:
uid=test1,ou=people,dc=eryajf,dc=net ##在组1下
uid=test2,ou=people,dc=eryajf,dc=net ##在组2下

这个是你的设计原则对吧?

问题是:
如果导入的时候,搜索入口写:ou=people,dc=eryajf,dc=net ,过滤条件写:objectClass=person,是可以导入用户的,但是导入的用户全部在people这个组下,导入后结构是这样的:
/people/test1
/people/test2

如果导入的时候,搜索入口写ou=group,dc=eryajf,dc=net,过滤条件写:objectClass=person,一个用户都导不进去。

我其实期望的最终效果,是这样的:

|-test1组
|--test1用户
|-test2组
|--user2用户

你对接的这个第三方应用是什么

是SecureLink,一款终端安全软件

再请问下:memberOf属性,是怎么加到 uid对象上的了?我尝试手动加,总是加不进去

我对你说的这个软件不是很熟悉,但是部署了一个jenkins进行测试,至少用我当前的思路,是没问题的。

# 用户
uid=zhangsan,ou=people,dc=eryajf,dc=net
uid=lisi,ou=people,dc=eryajf,dc=net

# 分组
cn=test1,ou=group,dc=eryajf,dc=net
	包含用户: uid=zhangsan,ou=people,dc=eryajf,dc=net
cn=test2,ou=group,dc=eryajf,dc=net
	包含用户:uid=lisi,ou=people,dc=eryajf,dc=net

从上图也可以看出,测试登陆的时候,会自动识别到lisi这个用户归属于test2这个组。

你可以借鉴参考,如果你这个软件通过这种方式配置不出来,那也许是软件端没有很好地支持,不过一般这些都是通用的,应该没问题。

再请问下:memberOf属性,是怎么加到 uid对象上的了?我尝试手动加,总是加不进去

这应该不是一个属性,我看了下,目前用户对应的属性里边没有这个。关于这一点儿,建议你看这篇文章,https://wiki.eryajf.net/pages/ea10fa/ 读后应该会有所悟。

我对你说的这个软件不是很熟悉,但是部署了一个jenkins进行测试,至少用我当前的思路,是没问题的。

# 用户
uid=zhangsan,ou=people,dc=eryajf,dc=net
uid=lisi,ou=people,dc=eryajf,dc=net

# 分组
cn=test1,ou=group,dc=eryajf,dc=net
	包含用户: uid=zhangsan,ou=people,dc=eryajf,dc=net
cn=test2,ou=group,dc=eryajf,dc=net
	包含用户:uid=lisi,ou=people,dc=eryajf,dc=net

从上图也可以看出,测试登陆的时候,会自动识别到lisi这个用户归属于test2这个组。

你可以借鉴参考,如果你这个软件通过这种方式配置不出来,那也许是软件端没有很好地支持,不过一般这些都是通用的,应该没问题。

请问下,你这个搜索入口写的是什么了?

原来你是配着截图的,github功能有问题,我回复之后才看到你配图了。

对,你借鉴着配置试试看

好的,谢谢。