封尘网

让学习成为一种习惯!

Gogs加入ldap认证登陆

最近使用了gogs和gitea两个使用Go开发的Git仓库后,发现其它简洁,清爽,快速,占资源小等优势;已经把自己的私有仓库都移到gogs 上面来了。本次记录LDAP认证功能,方便我直接从公司的ldap服务器上认证,直接从gitlab切过来可以说开发者感知就完成了。

ldap版本:openldap-servers-2.4.40-12.el6.x86_64
gogs: docker方式 latest版

gogs的安装就不再详述了,可能参考上一篇的[[适合中小型企业的自助git服务工具](https://www.58jb.com/html/use-gitea-or-gogs.html)],因为安装界面基本一样。

使用安装时配置的管理帐号登陆gogs系统,点击头像进入管理面板—>认证管理源—>添加新的源,根据自己的ldap配置填入即可。

这里就是一个绑定帐号,配置过gitlab的也差不多,也是需要一个帐号来获取ldap 帐号树的信息.

这里的搜索基准可以使用根,或者到Ou下

用户搜索基准

ou=People,dc=stest,dc=com

用户过滤规则

(&(|(objectclass=person))(|(memberof=cn=gitgroup,ou=group,dc=stest,dc=com))((uid=%s)))

以下三个可以全选择;

异常1
配置过程中配置不当导致无法获取到帐号,可以通过日志查看到大至的信息

2019/07/03 02:16:09 [ERROR] [...kg/auth/ldap/ldap.go:186 SearchEntry()] LDAP connect failed for '192.168.18.8': StartTLS: LDAP Result Code 200 "": TLS handshake failed (EOF)

上面的提示就是配置不当,注意上面配置中用户过滤规则和搜索基准还有就是的名字属性因这官方没有写出displayName或者使用cn也是可以的。

说明
上面虽然是实现了ldap的认证,但是ldap上的用户都可以登陆到gogs系统中;

实现分组过滤

意思就是在ldap中的指定一个组内的成员可以登陆到gogs系统中,其它的ldap帐号都无法登陆到此系统,这样即可实现分组授权管理。

先看看我ldap 上的分组情况

我的分组中gitgroup中的用户是可以登陆到gitlab或者gogs系统的;而cn=jenkins中的用户就是可以登陆到jenkins的,当然他们之中也可以是相同的用户,这样把权限细化的话容易管理些。而所有的用户都在ou=People中。

要在gogs实现分组过滤,之前我就一直认为需要用过后台中的组认证模块来添加,但是不断的尝试都是失败,不能成功实现,大致会遇到以下错误日志提示:
[TRACE] LDAP: Failed search using filter XXXX
或者
Ldap login problem: “LDAP Result Code 201”

实现方法

最后只有在用户过滤规则中加入详细的条件实现;其它的配置跟上面一样就是只有这里下面的配置不同。

用户过滤规则
这里的objectclass=person也可以使用objectclass=inetOrgPerson效果一样的。

(&(|(objectclass=person))(|(memberof=cn=gitgroup,ou=group,dc=stest,dc=com))((uid=%s)))

效果:

至此,困扰了几天的问题终于解决了。

提醒:本文最后更新于 1543 天前,文中所描述的信息可能已发生改变,请谨慎使用。