hostnamectl set-hostname idm.git.com.cn
echo '172.16.20.53 idm.git.com.cn' >> /etc/hosts
yum install ipa-server ipa-server-dns
一路回车即可, 或者根据自己需求填写
配置本机hosts, 域名指向idm服务
浏览器访问: https:// idm.git.com.cn
关于访问端口:
FreeIPA端口相关: https访问: 443 dns域名解析: 53 ntp时钟服务: 123 ldap协议: 389 ldap加密协议: 636 kadmind: 464 krb5kdc: 88 pki-tomcatd: 8443
echo 'Aa123456'|kinit admin
添加用户
echo 'Aa123456
Aa123456
'|ipa user-add wangshui --first=wang --last=shui --displayname=显示名称 --email=[email protected] --homedir=/home/wangshui --password
查询用户
# 方法一
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
# 创建分组
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
#!/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内容
# firstname@lastname@displayname
zhang@san@张三
li@si@李四
xiao@dangjia@小当家
如果Docker-compose部署的话, 添加一行
# 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
配置
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
验证
gitlab-ctl check-config
gitlab-ctl reconfigure
gitlab-rake gitlab:ldap:check
这里不知道dn或者base的, 可以使用
ldapsearch -x
去过滤查询
插件: LDAP
配置: 系统管理–>全局安全配置
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
- 不同的base dn返回属性不一样, cn=users,cn=accounts和cn=users,cn=compat返回结果的属性就不一样, 具体可以通过ldapsearch -x uid= 来查看怎么配置用户的dn
- jenkins的group search貌似不生效, 还没找到更好的办法, 只能说是, idm中的用户都能登录jenkins, 但是登录之后具体的权限, 需要jenkins内部控制一下了(可以使用Role-based Authorization和Authorize Project插件)
配置: 系统设置–>LDAP设置
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 认证: 勾选
配置: 管理–>用户管理–> 用户目录–> 添加目录–> LDAP
配置 LDAP 用户目录:
服务器设置:
名称: 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
组成员属性很关键, 否则无法读取用户组下面的用户,把用户添加到对应的组内, 测试的时候也会提示 ‘测试得到用户的会员资格 : 失败’