安装FreeIPA

主机名设置

1
hostnamectl set-hostname idm.git.com.cn

Hosts配置

  • 很关键, 不然会有很多问题, 比如named服务无法启动
1
echo '172.16.20.53 idm.git.com.cn' >> /etc/hosts

YUM安装

1
yum install ipa-server ipa-server-dns

一路回车即可, 或者根据自己需求填写

访问

配置本机hosts, 域名指向idm服务

浏览器访问: https:// idm.git.com.cn

关于访问端口:

1
2
3
4
5
6
7
8
9
FreeIPA端口相关: 
https访问: 443
dns域名解析: 53
ntp时钟服务: 123
ldap协议: 389
ldap加密协议: 636
kadmind: 464
krb5kdc: 88
pki-tomcatd: 8443

配置

免交互操作

管理员登录

1
echo 'Aa123456'|kinit admin

用户操作

添加用户

1
2
3
echo 'Aa123456
Aa123456
'|ipa user-add wangshui --first=wang --last=shui --displayname=显示名称 --email=wangshui@git.com.cn --homedir=/home/wangshui --password

查询用户

1
2
3
4
5
6
7
8
9
10
11
# 方法一
ldapsearch -x -h idm.git.com.cn -b dc=idm,dc=com,dc=cn uid=admin

# 方法二
配置/etc/openldap/ldap.conf
SASL_NOCANON on
URI ldaps://idm.git.com.cn
BASE dc=idm,dc=com,dc=com,dc=cn
TLS_CACERT /etc/ipa/ca.crt

ldapsearch -x uid=wangshui

用户组操作

1
2
3
4
5
6
7
8
9
10
11
# 创建分组
ipa group-add D-Team-Java-01 --desc='GroupLeader: wangzhenlei' --nonposix
ipa group-add D-Team-Java-02 --desc='GroupLeader: xiaopengcheng' --nonposix
ipa group-add D-Team-Java-03 --desc='GroupLeader: zhangjing' --nonposix
ipa group-add GitLab --desc='GitLab Repository' --nonposix
ipa group-add Jira --desc='Project Management' --nonposix
# 添加用户
ipa group-add-member dev-java-01 --users=wangshui --users=lixuchun

# 查询分组
ipa group-show gitlab

简单的用户创建脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

admin_login() {
echo 'Aa123456'|kinit admin
}

add_user() {
for user in `cat user.info|egrep -v "^$|#"`
do
firstname=$(echo $user|awk -F'@' '{print $1}')
lastname=$(echo $user|awk -F'@' '{print $2}')
username=${firstname}${lastname}
displayname=$(echo $user|awk -F'@' '{print $3}')
echo "123456
123456
"|ipa user-add ${username} --first=${firstname} --last=${lastname} --displayname=${displayname} --email=${username}@git.com --homedir=/home/${username} --password
done
}
admin_login
add_user

user.info内容

1
2
3
4
# firstname@lastname@displayname
zhang@san@张三
li@si@李四
xiao@dangjia@小当家

FreeIPA统一登录集成

如果Docker-compose部署的话, 添加一行

1
2
3
4
5
6
7
# idm未配置DNS服务, 则加入如下hosts解析
extra_hosts:
- "idm.git.com.cn:172.16.20.53"

# 如果idm配置了dns服务, 主机A记录已经添加了idm.git.com.cn, 则配置如下即可:
dns:
- 172.16.20.53

集成GitLab

  • idm创建一个gitlab组, 并添加用户

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
vim gitlab.rb
gitlab_rails['ldap_enabled'] = true
gitlab_rails['prevent_ldap_sign_in'] = false
gitlab_rails['ldap_group_sync_worker_cron'] = "0 */1 * * * *"

gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: 'LDAP'
host: 'idm.git.com.cn'
port: 389
uid: 'uid'
bind_dn: 'uid=admin,cn=users,cn=accounts,dc=git,dc=com,dc=cn'
password: 'Aa123456.'
encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
verify_certificates: false
smartcard_auth: false
active_directory: true
allow_username_or_email_login: false
lowercase_usernames: false
block_auto_created_users: false
base: 'dc=git,dc=com'
attributes:
username: 'uid'
email: 'mail'
name: 'displayname'
first_name: 'givenName'
last_name: 'sn'

## EE only
group_base: ''
admin_group: ''
sync_ssh_keys: false
EOS

验证

1
2
3
gitlab-ctl check-config
gitlab-ctl reconfigure
gitlab-rake gitlab:ldap:check

这里不知道dn或者base的, 可以使用ldapsearch -x 去过滤查询

集成Jenkins

插件: LDAP

配置: 系统管理–>全局安全配置

1
2
3
4
5
6
7
8
9
10
Server:							ldap://idm.git.com.cn
root DN: dc=git, dc=com, dc=cn
User search base: cn=users,cn=accounts
User search filter: uid={0}
Group search base: 空即可
Group membership: 选择Search for LDAP groups containing user, Group membership filter值留空即可
Manager DN: uid=admin,cn=users,cn=accounts,dc=git,dc=com,dc=cn
Manager Password: Aa123456
Display Name LDAP attribute: displayname
Email Address LDAP attribute: mail
  1. 不同的base dn返回属性不一样, cn=users,cn=accounts和cn=users,cn=compat返回结果的属性就不一样, 具体可以通过ldapsearch -x uid= 来查看怎么配置用户的dn
  2. jenkins的group search貌似不生效, 还没找到更好的办法, 只能说是, idm中的用户都能登录jenkins, 但是登录之后具体的权限, 需要jenkins内部控制一下了(可以使用Role-based Authorization和Authorize Project插件)

集成Jumpserver

配置: 系统设置–>LDAP设置

1
2
3
4
5
6
7
8
9
10
LDAP服务器:
LDAP地址: ldap://idm.git.com.cn:389
绑定 DN: uid=admin,cn=users,cn=accounts,dc=git,dc=com,dc=cn
密码: Aa123456
LDAP用户:
用户 OU: cn=users,cn=accounts,dc=git,dc=com,dc=cn
用户过滤器: (cn=%(user)s)
LDAP属性映射: {"username":"uid","name":"displayname","email":"mail"}
其他:
启用 LDAP 认证: 勾选

集成Jira或者Confluence

  • 创建jira-administrators分组, 并将admin加入到组中
  • 创建jira-software-users分组, 并加入用户

配置: 管理–>用户管理–> 用户目录–> 添加目录–> LDAP

配置 LDAP 用户目录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
服务器设置:
名称: FreeIPA
目录类型: OpenLDAP
主机名: idm.git.com.cn
端口: 389
用户名: uid=admin,cn=users,cn=accounts,dc=git,dc=com,dc=cn
密码: Aa123456
LDAP模式:
基本DN: dc=git,dc=com,dc=cn
附加用户DN: cn=users,cn=accounts
附加组DN: cn=groups,cn=accounts
LDAP权限:
只读: 勾选
高级设置:
简单DN匹配: 勾选
同步间隔(分钟): 5分钟(根据实际情况)
其余不变
用户模式设置:
用户对象类: posixaccount
用户对象过滤器: (objectclass=posixaccount)
用户名属性: uid
用户名RDN属性: uid
用户名字属性: givenName
用户姓氏属性: sn
用户显示名属性: displayName
用户电邮属性: mail
用户密码属性: userPassword
用户密码加密: SHA
用户唯一的ID属性: uidNumber
组模式设置:
组对象类: groupofnames
组对象过滤器: (objectclass=groupofnames)
组名属性: cn
组描述属性: description
成员模式设置:
组成员属性: member //这里和OpenLdap不一样, 取成员的方法不是uniqueMember
成员属性: memberOf

组成员属性很关键, 否则无法读取用户组下面的用户,把用户添加到对应的组内, 测试的时候也会提示 ‘测试得到用户的会员资格 : 失败’