很多时候我们需要管理多个内容管理系统,比如Jira、Jenkins、GitEA/Gitlab等等各种管理系统,我们需要每一套管理系统每个人都管理一套密码,每套系统每套密码简直是一种灾难,于是LDAP可以解决我们的问题,帮我们统一账户登录认证,是最早的SSO系统雏形,方便的在各个系统中登录。

首先我们需要搭建一个LDAP管理系统,我们选用FreeIDA,宿主系统我们选用Fedora。

 

由于使用FreeIPA会顺便帮我们搭建好一系列有关Linux账户、DNS服务、389 Directory LDAP服务、证书管理等各种账户统一 登录认证、策略等功能,于是我们选用FreeIPA来帮我们做好大部分工作,我们只需要配置好我们的服务器为静态IP、并且想好一个域名即可,比如我们当前的例子使用的根域名为dsfedora.org,主机域名hostname 为 www.dsfedora.org,配置/etc/hostname和/etc/hosts绑定时需要注意本机名称一致性。

$ vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
# 本地IP地址,主机名,注意IP需要先配置为静态IP
192.168.0.200  www.dsfedora.org


$ vim /etc/hostname 
# 注意本机主机名要和hosts中的本机绑定主机名一致
www.dsfedora.org

并且在防火墙加入放行端口:

$ sudo firewall-cmd --add-service=freeipa-ldap --add-service=freeipa-ldaps
$ sudo firewall-cmd --add-service=freeipa-ldap --add-service=freeipa-ldaps --permanent

然后安装FreeIPA包:

$ sudo dnf install freeipa-*
$ sudo dnf install bind bind-chroot

如果是centos系统,则使用yum命令,而不是dnf。

然后执行ipa-server-install命令,过程参考这个哥们的配置:

https://blog.csdn.net/hdyebd/article/details/88712320 

注意点1,在配置ipa-server-install过程中需要输入目录服务管理器密码,以及IPA管理员admin用户密码,在这里我们都设置为12345678, 用作测试。

注意点2,在配置ipa-server-install过程中需要配置DNS转发,请一定要设置一个公开的DNS地址,比如114.114.114.114、8.8.8.8等,否则会因为不转发DNS导致本机无法透过网络进行域名解析。

 

于是我们就配置好了FreeIPA,现在我们可以在我们的内网测试机中加入hosts

在C:\Windows\System32\drivers\etc文件加入行:

192.168.0.200  www.dsfedora.org

我们此时就可以在浏览器中打开Free IPA 的web控制台了。

 

 

我们需要登录进去,添加测试用户。

这里使用我们刚才的管理员用户密码:admin,密码12345678。

我们 点击添加增加新用户,添加了一个test用户,密码为test. 然后退出admin账户,登录test账户,会让我们修改密码,我们重新修改成12345678,并且登录进去,我们可以看到这是一个权限非常受限的账户。

由此我们Free IPA配置和测试账户建立结束。FreeIPA的LDAP也已经就绪。待我们使用GitEA接入了。

 

现在我们打开GitEA管理员账户:进入管理面板,选择认证源并且添加一个LDAP认证源。并且填写以下内容。主机名按照自己的配置来设置:

 

以上表单的配置,除了主机名按照自己的配置以外,均可以按照上图原封不动的照抄配置。添加认证源后,我们下次登录时,就可以用FreeIPA中的用户直接登录到我们的Git EA系统中了,GitEA可以直接从我们的FreeIPA的LDAP认证源中读取用户信息了。

其中,由于我们的FreeIPA同时也创建了证书,如果认证源使用了安全协议LDAPS或者TLS,会因为证书信任问题被Git EA拒绝连接,所以我们不选择加密认证,使用Unencrypted。

 

到此为止我们已经配置好了使用LDAP用户登录我们的系统。

需要解释的两个地方:

 

用户搜索基准:

cn=users,cn=accounts,dc=dsfedora,dc=org

由于FreeIPA的LDAP模型是在组织dsfedora.org下的条目(又称DN)cn=accounts存储用户信息条目cn=users的,在cn=users条目下存储了条目,这些条目就是用户id,比如test用户的条目就叫uid=test,该条目下就会存储test用户相关的任意属性和对象类别,比如上图中的uid、sn、givenName、以及mail等属性,这些大多数都是Text类型的属性。

 

用户过滤规则:

(&(objectclass=top)(uid=%s))

刚才说了uid=test下有很多属性,其中还有一种属性叫做ObjectClass,叫对象类别 类型,它是一种属性类型,并且有多个名叫objectclass的对象类别属性(注意大小写),因此我们在用户过滤规则中,可以用一个通用的对象类别为objectclass=top,然后将uid作为查找依据uid=%s进行用户过滤。

绑定user DN和绑定password可以留空。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐