基于FreeIPA的LDAP服务器搭建与Gitlab, JupyterHub, Metabase, JumpServer等集成配置

搭建OpenLDAP会变得不幸,FreeIPA也是

缘由

由于需要JupyterHub多用户使用,其文档中有LDAP认证方式,两年前曾搭建过OpenLDAP,异常复杂,今又参考鸟哥私房菜的教程发现了FreeIPA,至少搭建过程非常轻松。但又因原服务器是Ubuntu,安装FreeIPA需要RHEL系,这才得知CentOS即将结束支持,取而代之的有RockyLinux, AlmaLinux等。个人喜欢追新,故重装系统使用了AlmaLinux 9.4版本。由于也身处一个不大不小的团队,内网运行着数种服务,需要一个方案做SSO,故优先想进一步折腾LDAP这套old school方案,备选OAuth2, Excel表格粗放管理等。没想到,基于FreeIPA也有些麻烦,最后基本算是放弃了这套方案,但把折腾过程记录一下,没准后面又一时兴起继续折腾。

FreeIPA is All You Need

以下主要参考鸟哥私房菜的最新教程,https://linux.vbird.org/linux_server/rocky9/0240ldap.php

  • 准备一个RHEL系的操作系统
  • dnf install freeipa-server
  • ipa-server-install
  • 关闭防火墙,设置hostname等
  • FreeIPA安装完毕
  • 当前服务器80端口已开放FreeIPA web UI管理,增删改查用户

基于上面几步,似乎很爽。但是落实到客户端应用,就需要了解LDAP的机制。

FreeIPA的服务端同时作为客户端不知为何无法使用

上面谈到,FreeIPA的服务端是基于 AlmaLinux 9.4 的,由于也想复用这台机器,故安装完FreeIPA服务端后,又同时安装了客户端。但是在FreeIPA 的 web UI 中增加用户等,并不会在本机创建新的用户以及在家目录创建用户目录,sssd服务等均开启了,不知道为什么,留着以后折腾。也是因为这一点一直无法实现,故成为放弃这套方案的原因之一。

集成配置

Gitlab客户端配置

Step 1: 编辑 /etc/gitlab/gitlab.rb
Step 2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
gitlab_rails['ldap_enabled'] = true
main:
label: 'FreeIPA'
host: 'ipa.example.com'
port: 389
uid: 'uid'
method: 'tls'
bind_dn: 'uid=gitlab,cn=users,cn=accounts,dc=example,dc=com'
password: 'gitlabuserpassword'
encryption: 'plain'
base: 'cn=accounts,dc=example,dc=com'
verify_certificates: false
attributes:
username: ['uid']
email: ['mail']
name: 'displayName'
first_name: 'givenName'
last_name: 'sn'

Step 3: gitlab-ctl reconfigure

JupyterHub客户端配置

Step 1: 编辑 jupyterhub_config.py
Step 2:

1
2
3
4
5
6
7
8
c.JupyterHub.authenticator_class = 'ldapauthenticator.LDAPAuthenticator'
c.LDAPAuthenticator.server_address = 'ipa.example.com'
c.LDAPAuthenticator.bind_dn_template = 'uid={username},cn=users,cn=accounts,dc=example,dc=com'
c.LDAPAuthenticator.user_search_base = 'cn=users,cn=accounts,dc=example,dc=com'
c.LDAPAuthenticator.lookup_dn = True
c.LDAPAuthenticator.user_attribute = 'uid'
c.LDAPAuthenticator.lookup_dn_user_dn_attribute = 'uid'
c.LDAPAuthenticator.lookup_dn_search_filter = '({login_attr}={login})'

Step 3: jupyterhub

Metabase客户端配置

Step 1: 进入Web UI 的 Admin 管理 AUTHENTICATION 的 LDAP
Step 2:

1
2
3
4
5
6
LDAP Host: Server hostname
LDAP Port: 636
LDAP Security: SSL
Username or DN: uid=admin,cn=users,cn=accounts,dc=example,dc=com
Password: The password to bind with for the lookup user.
User search base: cn=users,cn=accounts,dc=example,dc=com

Step 3: Save and Test

JumpServer客户端配置

Step 1: 进入 Web UI 的 Admin 管理 Auth 的 LDAP
Step 2:

1
2
3
4
5
6
7
8
9
10
11
Enable LDAP auth
LDAP server: ldap://localhost:389
Bind DN: uid=admin,cn=users,cn=accounts,dc=example,dc=com
Password:
User OU: cn=users,cn=accounts,dc=example,dc=com
User search filter: (cn=%(user)s)
User attr map: {
"username": "uid",
"name": "cn",
"email": "mail"
}

Step 3: Save and Test

基于FreeIPA的LDAP服务器搭建与Gitlab, JupyterHub, Metabase, JumpServer等集成配置

https://www.lixeon.com/blog/20240617-freeipa/

Author

Jing Li

Posted on

2024-06-17

Updated on

2024-06-17

Licensed under