公司决定用统一用户管理系统,那必然是微软的 AD 和开源的 LDAP 二选一了
自然用 Freeipa 作为首选。
花时间仔细调研了一下,先说结论:
如果 confluence 已经有很多用户,那么对不起,这些用户的密码都必须通知到个人,强制进行修改,旧有的密码完全无法导出(除非一个一个人问出来)。
confluence 实际上是用了一个内置的目录软件来管理用户的,用户唯一存在的凭据就是邮箱。
confluence 支持同时从多个目录树中按照顺序来查询用户,查询到的结果会合并。举例来说,排第一的目录树是freeipa,排第二位的目录树是内置目录,两个目录树都有一个用户,两条记录的邮件是一致的,那么会在排第一的 freeipa 树中认证用户,但会把两个目录树中用户的信息拼接合并起来总体返回。
这样就明白了把,我们只用第一个 freeipa 目录树来认证用户,原有的组权限还是用第二个内置目录树中的信息,保持两棵树中用户的 mail 保持一致即可,步骤如下。
我们首先要提前在freeIPA里面建立两个组:
confluence-administrators
confluence-users
然后跑到 Confluence 里,用户目录,添加一个 freeipa 的目录服务放在前面
详细配置的参数如下:
1配置如下:
2
3Server Settings:
4- Namel: freeipa
5- Directory Type: OpenLDAP
6- Server: example.com
7- Port: 389
8- Use SLL: false
9- Username: uid=admin,cn=users,cn=accounts,dc=bybon,dc=cn
10- Password: <insert password here>
11
12
13LDAP Schema:
14- Base DN: dc=bybon,dc=cn
15- Additional User DN: cn=users,cn=accounts
16- Additional Group DN:cn=groups,cn=accounts
17
18
19LDAP Permissions:
20Select Read/Write
21
22
23Advanced Settings: Default
24
25
26User Schema Settings
27- User Object Class: inetorgperson
28- User Object Filter: (&(objectclass=inetorgperson)(memberOf=cn=confluence-users,cn=groups,cn=accounts,dc=bybon,dc=cn))
29- User Name Attribute: uid
30- User Name RDN Attribute: uid
31- User First Name Attribute: giveName
32- User Last Name Attribute: sn
33- User Display Name Attribute: displayName
34- User Email Attribute: mail
35- User Password Attribute: userPassword
36- User Password Encryption: SHA
37- User Unique ID Attribute: uid
38
39
40Group Schema Settings
41- Group Object Class: groupofnames # all lowercase
42- Group Object Filter: (objectclass=groupofnames) # all lowercase
43- Group Name Attribute: cn
44- Group Description Attribute: description
45
46
47Membership Schema Settings
48- Group Members Attribute: member #lowercase
49- User Membership Attribute:memberOf
50
51
52
放全中文的图如下:
折磨了很久才弄出来,验证一下用户:
跑到 confluence 里面查看,明显是两个目录树合并的结果:
关于 admin 的问题,注意一下,我们上面找用户的 filter 是找不到 admin 用户的。但是第一步认证是 ldap 做的,认证过了以后,freeipa 的 ldap filter 过滤后找不到 admin 这个用户,所以只会在内置目录有 admin 的信息,下面验证一下,admin 只存在于 Confluence Internal Directory 中。
再补充一点,freeipa 是可以匿名访问的,但是匿名状态下,一些属性字段是看不见的,比如 mail 。
所以想要查到全部字段,必须登录,放一个查询的脚本:
1ldapsearch -W -D uid=admin,cn=users,cn=accounts,dc=bybon,dc=cn -h localhost -b cn=users,cn=accounts,dc=bybon,dc=cn '(&(objectclass=inetorgperson)(memberOf=cn=confluence-users,cn=groups,cn=accounts,dc=bybon,dc=cn))'