我有一个正在运行的 Gitlab CE 安装,并且使用 LDAP 身份验证。现在我想根据组成员身份限制访问权限。
该选项user_filter
似乎是可行的。但是,我似乎无法让任何人根据组成员身份登录。
我尝试的是这个(gitlabaccess
作为应该允许登录的组):
user_filter: '(&(objectclass=group)(samaccountname=gitlabaccess))'
或者:
user_filter: '(memberOf=cn=gitlabaccess,DC=my,DC=domain,DC=com)'
这文档说明以下内容但它也不起作用而且我不知道数字应该是多少:
user_filter: '(memberOf:1.2.840.113556.1.4.1941:=cn=gitlabaccess,DC=my,DC=domain,DC=com)'
特定用户的工作方式如下:
user_filter: '(&(objectclass=user)(samaccountname=jon.doe))'
从 omnibus 包安装的 Gitlab CE 版本 9.5.5。
如何根据 LDAP 组成员身份限制对 Gitlab 的访问?
答案1
我明白了。您需要指定包含所有 OU 的组的完整路径。在我的例子中,这是:
user_filter: '(&(objectClass=user)(memberOf=CN=gitlabaccess,OU=mail-distribution-groups,OU=staff,DC=my,DC=domain,DC=com))'
正如评论,上述查询仅返回该组的直接成员。如果您还想包括嵌套组的成员,则必须像这样:1.2.840.113556.1.4.1941:
添加:memberOf
user_filter: '(&(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=gitlabaccess,OU=mail-distribution-groups,OU=staff,DC=my,DC=domain,DC=com))'
如果您想添加特定用户,请使用以下命令:
user_filter: '(|(&(objectClass=user)(memberOf=CN=gitlabaccess,OU=mail-distribution-groups,OU=staff,DC=my,DC=domain,DC=com))(&(objectClass=user)(sAMAccountName=jon.doe)))'
答案2
- openLDAP 的解决方案:
创建一个具有 groupOfUniqueNames 而不是 groupOfNames 的组,因为默认情况下只有 groupOfUniqueNames 具有 memberOf 属性。
答案3
RHEL 9 和 GitLab 15.8.1 CE/EE 上的 FreeIPA 解决方案 (2023)
在 GitLab 中为 FreeIPA 设置 LDAP 过滤器的步骤与在 GitLab 中为 Active Directory 设置 LDAP 过滤器的步骤不同。
设置如下:
- FreeIPA 托管于:
- dc1.mydomain.com
- GitLab 托管于:
- gitlab.mydomain.com
执行以下步骤:
- 创建用于访问 GitLab 的 FreeIPA 用户
- 用户名:“快乐开发者”
- 名字: Happy
- 姓氏:开发人员
- 在 FreeIPA 中创建组以访问 Gitlab
- 组名:ug_gitlab_mydomain_com_login_ldap
- 在 FreeIPA 中将用户“Happy Developer”添加到用户组“ug_gitlab_mydomain_com_login_ldap”
- 在 FreeIPA 中创建用户,用于 gitlab.mydomain.com 的 LDAP 绑定
- 用户名:ldap.gitlab.mydomain.com
- 名字:ldap
- 姓氏:gitlab.mydomain.com
- 密码:字母数字,无特殊符号,如 $ < /
现在,从命令行检查组成员身份:
ldapsearch -b "dc=mydomain,dc=com" -s sub "(&(objectclass=person)(memberof=cn=ug_gitlab_mydomain_com_login_ldap,cn=groups,cn=accounts,dc=mydomain,dc=com))" -D "uid=ldap.gitlab.mydomain.com,cn=users,cn=accounts,dc=mydomain,dc=com" -W
您应该会看到一个小组成员,“快乐的开发者”。
现在更改 gitlab 配置:
sudo nano /etc/gitlab.gitlab.rb
找到包含 LDAP 配置的部分并添加以下文本:
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: 'My LDAP'
host: 'dc1.mydomain.com'
port: 636
uid: 'uid'
bind_dn: 'uid=ldap.myhost.mydomain.com,cn=users,cn=accounts,dc=mydomain,dc=com'
password: 'password'
encryption: 'simple_tls' # "start_tls" or "simple_tls" or "plain"
verify_certificates: false
smartcard_auth: false
active_directory: false
allow_username_or_email_login: false
lowercase_usernames: false
block_auto_created_users: false
base: 'dc=mydomain,dc=com'
user_filter: 'memberof=cn=ug_gitlab_mydomain_com_login_ldap,cn=groups,cn=accounts,dc=mydomain,dc=com'
## EE only
group_base: ''
admin_group: ''
sync_ssh_keys: false
EOS
重新配置并重启 GitLab,检查过滤结果:
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
sudo gitlab-rake gitlab:ldap:check
您应该能够看到授权登录的用户列表
注意:另一个 user_filter 是:
user_filter: '(&(objectclass=person)(memberof=cn=ug_gitlab_mydomain_com_login_ldap,cn=groups,cn=accounts,dc=mydomain,dc=com))'
注意:请确保您执行其他步骤,以通常的方式验证 LDAP 连接的 TLS 设置。
我不确定这是否支持嵌套组支持。但目前,对于大多数 FreeIPA 用户来说,这应该是一个很好的起点。