在开始之前,请容许我尽情的发泄一下,话说关于jira和ldap的认证我至少是弄过两次了,第一次是在前一家公司,环境是CentOS 6.5+Jira 6.2+Windows AD 2012, 大概耗费了一周的时间,终于搞定了jira通过Microsoft AD进行认证,由于项目进度紧张,大概只是在几张纸上记录了一下配置要点,所以结果可想而知,根本没有任何总结留下来。然后现在的需求是jira要使用openldap进行认证,由于没有之前的积累,所以还是从头再来,不过花了两天时间终于还是完成了,于是这次下定决心一定要把配置给总结一下,不然下次再有这种需求又要苦逼了。顺便吐槽一下,网上关于jira 6.x部署的教程或文档有很多,但是关于jira和ldap进行整合的教程真的少的可怜,百度出来的结果竟然还是jira 4.2的版本,MG,这都多少年过去了,不能不说国内这种技术分享还是缺乏的,算了,吐槽完了,开始正文。
1、使用管理员账号登录jira之后,找到主页右上方的螺丝形按钮,然后点击并选择“用户管理”。
2、在进入用户管理界面后,点击左侧的“用户目录”,默认情况下用户目录中只有jira内部目录,而使用ldap进行认证的前提就是创建一个ldap目录,所以这里点击“添加目录”。
3、在点击添加目录之后,选择目录类型为LDAP。
4、根据ldap的类型和相关配置进行配置ldap用户目录,这个可以参考官方文档。
5、配置完成之后,可以点击“Quick Test”进行测试,测试正确之后再进行保存。
6、出现以下的信息表示服务器和schema的配置正确,可以保存配置。但并不能说明ldap用户就可以登录jira了,还需要对用户是否存在、组的信息是否正确、用户是否可以进行认证等信息进行测试。
7、回到用户管理下的用户目录,然后输入一个ldap账号进行测试,看是否能通过认证。
8、如果测试的结果全部都通过的话,那么jira通过ldap认证基本上就没有什么问题了,如下图。如果有一两个是红色的(不通过),那可能你就需要根据环境好好排查了。
9、下面给出我的ldap用户目录配置截图:
服务器配置如下图:
注意:如果用户组模板配置中组的属性(objectClass)使用postsixGroup,那么Directory Type就选择OpenLDAP(Read-Only Posix Schema),不然在使用用户进行认证测试的时候retrieve group这一步始终无法通过;如果用户组模板配置中组的属性使用groupOfNames,那么Directory Type就选择OpenLDAP即可,这一点需要特别注意。
ldap权限配置如下图:
User Schema设置如下图:
用户模板设置如下图:
10、下面顺便贴上openldap中的用户和组的数据:
[root@ldapsrv01 ~]# ldapsearch -D cn=admin,dc=contoso,dc=com -W -b dc=contoso,dc=com
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base
# filter: (objectclass=*)
# requesting: ALL
#
# contoso.com
dn: dc=contoso,dc=com
dc: contoso
objectClass: top
objectClass: domain
# People, contoso.com
dn: ou=People,dc=contoso,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
# Group, contoso.com
dn: ou=Group,dc=contoso,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
# tech, Group, contoso.com
dn: cn=tech,ou=Group,dc=contoso,dc=com
objectClass: posixGroup
description: Technology
gidNumber: 10001
cn: tech
memberUid: zhangsan
memberUid: lisi
memberUid: test01
memberUid: test02
memberUid: test04
# zhangsan, People, contoso.com
dn: uid=zhangsan,ou=People,dc=contoso,dc=com
objectClass: posixAccount
objectClass: top
objectClass: inetOrgPerson
givenName: zhang
sn: san
displayName: zhang san
uid: zhangsan
homeDirectory: /home/zhangsan
loginShell: /bin/bash
physicalDeliveryOfficeName: 1001
o: contoso.com
title: IT
cn: zhang san
uidNumber: 16474
gidNumber: 10001
userPassword:: e1NTSEF9V2kxcldOVXQybVVrYzRFSnY0ank2dG1QaHBOTmFsa3hWR3RsWWxGRFQ
wST0=
# test, Group, contoso.com
dn: cn=test,ou=Group,dc=contoso,dc=com
objectClass: posixGroup
objectClass: top
cn: test
description: Test Group
gidNumber: 3401
# lisi, People, contoso.com
dn: uid=lisi,ou=People,dc=contoso,dc=com
objectClass: posixAccount
objectClass: top
objectClass: inetOrgPerson
objectClass: shadowAccount
givenName: li
sn: si
displayName: li si
uid: lisi
homeDirectory: /home/lisi
loginShell: /bin/bash
telephoneNumber: 110
physicalDeliveryOfficeName: 110
o: contoso.com
l: Shenzhen
title: IT
uidNumber: 7164
shadowFlag: 0
shadowMin: 90
shadowMax: 99999
shadowWarning: 7
shadowInactive: 99999
shadowLastChange: 12011
shadowExpire: 99999
cn: li si
gidNumber: 10001
userPassword:: e1NTSEF9djlJUFB3OU5pVmR3enVnMDBzYmYvQXN0a3laQ05VSjBZa0pIVkZCYU5
YZz0=
# test01, People, contoso.com
dn: uid=test01,ou=People,dc=contoso,dc=com
objectClass: posixAccount
objectClass: top
objectClass: inetOrgPerson
givenName: test01
uid: test01
sn: test01
homeDirectory: /home/test01
loginShell: /bin/bash
st: CN
telephoneNumber: 110
physicalDeliveryOfficeName: 110
o: contoso.com
l: Shenzhen
title: IT
cn: test01
uidNumber: 12586
gidNumber: 10001
userPassword:: e1NTSEF9YkJuMVA5NGhMSXhQQUpzSU1hem5VYzUza1M1WWNHbFVkV05XZUVFNVM
yVT0=
# test02, People, contoso.com
dn: uid=test02,ou=People,dc=contoso,dc=com
objectClass: posixAccount
objectClass: top
objectClass: inetOrgPerson
uid: test02
loginShell: /bin/bash
st: CN
telephoneNumber: 110
physicalDeliveryOfficeName: 110
o: contoso.com
l: Shenzhen
title: IT
cn: test01
uidNumber: 12587
givenName: test02
sn: test02
homeDirectory: /home/test02
gidNumber: 10001
userPassword:: e1NTSEF9bjJjVHQ4cVgyZGdzL3k0UkxUWEhodFl4SzVGVGNVMDJVWGd5YVZoQ1N
Iaz0=
# test04, People, contoso.com
dn: uid=test04,ou=People,dc=contoso,dc=com
objectClass: posixAccount
objectClass: top
objectClass: inetOrgPerson
gidNumber: 0
givenName: test04
sn: test04
displayName: test04
uid: test04
homeDirectory: /home/test04
loginShell: /bin/bash
telephoneNumber: sfa
physicalDeliveryOfficeName: safas
o: sdfasf
facsimileTelephoneNumber: sfa
l: fasfsdaf
title: sfas
cn: test04
uidNumber: 35426
userPassword:: e1NTSEF9dWdsR1M2Y252SGJFckU2dDhkVTM2UDJyZWFkRVpGRXhVVTh2YWpCMWI
wcz0=
# jira-users, Group, contoso.com
dn: cn=jira-users,ou=Group,dc=contoso,dc=com
objectClass: posixGroup
objectClass: top
cn: jira-users
description: jira-users
gidNumber: 1587
memberUid: test04
# search result
search: 2
result: 0 Success
# numResponses: 12
# numEntries: 11
11、成功配置完成ldap目录之后,jira会自动与ldap进行同步,可以在用户管理下的用户界面中看到openldap中的用户。
12、在上一步,我发现用户同步过来之后是在tech组,但是tech组是openldap中的组,在jira中是没有定义这个组的角色的,所以我需要定义这个tech组的角色。(因为我设置的ldap permissions是只读的,所以同步过来的用户组是ldap的用户组,并没有添加到jira默认的用户组中,如果选择第二项Read-Only with local groups就可以将同步过来的用户添加到设置好的jira组中)
打开系统中的全局权限菜单,然后在右侧可以看到jira默认的项目角色,我要做的就是将openldap中的用户组tech添加jira的权限,方式就是使用下方的添加权限菜单,然后给tech添加“JIRA用户”和“创建共享的对象”等两个权限,修改完成后如下图。
13、注销管理员登录,然后使用openldap中的账号进行登录测试。
14、登录成功,进入jira的Dashboard界面,至此jira 6.3.6使用openldap认证结束。
本文转自 jerry1111111 51CTO博客,原文链接:http://blog.51cto.com/jerry12356/1862090,如需转载请自行联系原作者