先参照《1107-FreeIPA 和 FreeRadius 搭建双因子认证》完成 FreeIPA 环境配置。
如果 confluence 已经有很多用户,那么对不起,这些用户的密码都必须通知到个人,强制进行修改,旧有的密码完全无法导出(除非一个一个人问出来)。
confluence 实际上是用了一个内置的目录软件来管理用户的,用户唯一存在的凭据就是邮箱。
confluence 支持同时从多个目录树中按照顺序来查询用户,查询到的结果会合并。举例来说,排第一的目录树是freeipa,排第二位的目录树是内置目录,两个目录树都有一个用户,两条记录的邮件是一致的,那么会在排第一的 freeipa 树中认证用户,但会把两个目录树中用户的信息拼接合并起来总体返回。
这样就明白了把,我们只用第一个 freeipa 目录树来认证用户,原有的组权限还是用第二个内置目录树中的信息,保持两棵树中用户的 mail 保持一致即可。
首先要提前在freeIPA里面建立两个组:
到 Confluence 里,用户目录,添加一个 freeipa 的目录服务放在前面
详细的 LDAP 验证配置如下
Server Settings: - Namel: freeipa - Directory Type: OpenLDAP - Server: example.com - Port: 389 - Use SLL: false - Username: uid=admin,cn=users,cn=accounts,dc=bybon,dc=cn - Password: <insert password here> LDAP Schema: - Base DN: dc=bybon,dc=cn - Additional User DN: cn=users,cn=accounts - Additional Group DN:cn=groups,cn=accounts LDAP Permissions: Select Read/Write Advanced Settings: Default User Schema Settings - User Object Class: inetorgperson - User Object Filter: (&(objectclass=inetorgperson)(memberOf=cn=confluence-users,cn=groups,cn=accounts,dc=bybon,dc=cn)) - User Name Attribute: uid - User Name RDN Attribute: uid - User First Name Attribute: giveName - User Last Name Attribute: sn - User Display Name Attribute: displayName - User Email Attribute: mail - User Password Attribute: userPassword - User Password Encryption: SHA - User Unique ID Attribute: uid Group Schema Settings - Group Object Class: groupofnames # all lowercase - Group Object Filter: (objectclass=groupofnames) # all lowercase - Group Name Attribute: cn - Group Description Attribute: description Membership Schema Settings - Group Members Attribute: member #lowercase - User Membership Attribute:memberOf |
关于 admin 的问题,上面找用户的 filter 是找不到 admin 用户的。但是第一步认证是 ldap 做的,认证过了以后,freeipa 的 ldap filter 过滤后找不到 admin 这个用户,所以只会在内置目录有 admin 的信息,下面验证一下,admin 只存在于 Confluence Internal Directory 中。
补充一点,freeipa 是可以匿名访问的,但是匿名状态下,一些属性字段是看不见的,比如 mail 。所以想要查到全部字段,必须登录,放一个查询的脚本:
ldapsearch -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))' |