如何使用GitLab CE配置LDAPgydF4y2Ba

简介gydF4y2Ba

在GitLab中管理大量用户可能会成为系统管理员的负担。随着组织的发展,用户账户也在增长。在多个企业应用程序之间保持这些用户帐户的同步通常是一项耗时的任务。gydF4y2Ba

在本指南中,我们将重点介绍使用活动目录配置GitLab。gydF4y2Ba活动目录gydF4y2Ba是微软提供的一种流行的LDAP兼容目录服务,包含在所有现代Windows Server操作系统中。gydF4y2Ba

从那时起,GitLab就支持LDAP集成gydF4y2Ba版本2.2gydF4y2Ba.使用GitLab LDAPgydF4y2Ba组同步gydF4y2Ba被添加到GitLab企业版gydF4y2Ba版本6.0gydF4y2Ba.LDAP集成已经成为GitLab中最流行的特性之一。gydF4y2Ba

开始gydF4y2Ba

选择LDAP服务器gydF4y2Ba

组织选择使用LDAP服务器的主要原因是将整个组织的用户基础整合到一个中央存储库中。用户可以通过一次登录访问IT环境中的多个应用程序和系统。由于LDAP是一种开放的、与供应商无关的行业标准应用程序协议,因此使用LDAP身份验证的应用程序的数量不断增加。gydF4y2Ba

有很多商业的和开源的gydF4y2Ba目录服务器gydF4y2Ba支持LDAP协议。选择正确的目录服务器在很大程度上取决于服务器将集成到的现有IT环境。gydF4y2Ba

例如,gydF4y2Ba活动目录gydF4y2Ba通常在主要使用Windows的环境中更受欢迎,因为这允许与现有服务快速集成。其他流行的目录服务包括:gydF4y2Ba

GitLab使用gydF4y2BaNet:: LDAPgydF4y2Ba引擎盖下的图书馆。这意味着它支持所有gydF4y2BaIETFgydF4y2Ba兼容的LDAPv3服务器。gydF4y2Ba

Active Directory (AD)gydF4y2Ba

在本教程中,我们不会涉及Windows Server或Active Directory域服务的安装和配置。网上有很多资源可以指导你完成这个过程:gydF4y2Ba

快捷方式:gydF4y2Ba您可以使用PowerShell快速安装AD DSgydF4y2Ba安装- windowsfeature AD-Domain-Services -IncludeManagementToolsgydF4y2Ba

新建ADgydF4y2Ba欧gydF4y2Ba结构gydF4y2Ba

配置组织单位(gydF4y2Ba欧gydF4y2Bas)是设置Active Directory的重要组成部分。gydF4y2Ba欧gydF4y2BaS构成整个组织结构的基础。以GitLab为例,设计了gydF4y2Ba欧gydF4y2Ba结构下面使用地理gydF4y2Ba欧gydF4y2Ba模型。在地理模型中,我们进行分离gydF4y2Ba欧gydF4y2BaS代表不同的地理区域。gydF4y2Ba

GitLabgydF4y2Ba欧gydF4y2Ba设计gydF4y2Ba GitLab广告结构gydF4y2Ba
GitLab OU设计gydF4y2Ba GitLab广告结构gydF4y2Ba

使用PowerShell可以输出gydF4y2Ba欧gydF4y2Ba结构作为表(gydF4y2Ba所有名称仅为示例gydF4y2Ba):gydF4y2Ba

获取adobject -LDAPFilter "(objectClass=*)"-SearchBase 'OU=GitLab INT,DC=GitLab,DC=org' -Properties CanonicalName |格式-表名,CanonicalName -AgydF4y2Ba
OU CanonicalNamegydF4y2Ba---- -------------gydF4y2BaGitLab INT GitLab.org/GitLab INTgydF4y2Ba美国GitLab.org/GitLab INT/美国gydF4y2Ba开发者GitLab.org/GitLab INT/美国/开发者gydF4y2BaGary Johnson GitLab.org/GitLab INT/美国/开发者/Gary JohnsongydF4y2BaEllis Matthews GitLab.org/GitLab INT/United States/Developers/Ellis MatthewsgydF4y2BaWilliam Collins GitLab.org/GitLab INT/United States/Developers/William CollinsgydF4y2Ba人民行动GitLab.org/GitLab INT/美国/人民行动gydF4y2Ba玛格丽特·贝克GitLab.org/GitLab情报/美国/人民行动/玛格丽特·贝克gydF4y2BaLibby Hartzler GitLab.org/GitLab INT/美国/人民行动/Libby HartzlergydF4y2Ba维多利亚·赖尔GitLab.org/GitLab INT/美国/人民行动/维多利亚·赖尔斯gydF4y2Ba荷兰GitLab.org/GitLab INT/The NetherlandsgydF4y2Ba开发者GitLab.org/GitLab INT/The Netherlands/DevelopersgydF4y2BaJohn Doe GitLab.org/GitLab INT/The Netherlands/Developers/John DoegydF4y2BaJon Mealy GitLab.org/GitLab INT/The Netherlands/Developers/Jon MealygydF4y2BaJane Weingarten GitLab.org/GitLab INT/The Netherlands/Developers/Jane WeingartengydF4y2Ba生产GitLab.org/GitLab INT/荷兰/生产gydF4y2BaSarah Konopka GitLab.org/GitLab INT/荷兰/制作/Sarah KonopkagydF4y2Ba辛西娅·布鲁诺GitLab.org/GitLab INT/荷兰/制作/辛西娅·布鲁诺gydF4y2Ba大卫·乔治GitLab.org/GitLab INT/荷兰/生产/大卫·乔治gydF4y2Ba联合王国GitLab.org/GitLab INT/联合王国gydF4y2Ba开发者GitLab.org/GitLab INT/United Kingdom/开发者gydF4y2BaLeroy Fox GitLab.org/GitLab INT/United Kingdom/Developers/Leroy FoxgydF4y2BaChristopher Alley GitLab.org/GitLab INT/United Kingdom/Developers/Christopher AlleygydF4y2BaNorris Morita GitLab.org/GitLab INT/United Kingdom/Developers/Norris MoritagydF4y2Ba支持GitLab.org/GitLab INT/英国/支持gydF4y2Ba劳拉·斯坦利GitLab.org/GitLab INT/英国/支援/劳拉·斯坦利gydF4y2Ba妮基·舒曼GitLab.org/GitLab INT/英国/支持/妮基·舒曼gydF4y2BaHarriet Butcher GitLab.org/GitLab INT/联合王国/支持/Harriet ButchergydF4y2BaGlobal Groups GitLab.org/GitLab INT/Global GroupsgydF4y2BaDevelopersNL GitLab.org/GitLab INT/Global Groups/DevelopersNLgydF4y2BaDevelopersUK GitLab.org/GitLab INT/Global Groups/DevelopersUKgydF4y2BaDevelopersUS GitLab.org/GitLab INT/Global Groups/DevelopersUS .gydF4y2BaProductionNL GitLab.org/GitLab INT/Global Groups/ProductionNLgydF4y2Basupporttuk GitLab.org/GitLab INT/Global Groups/ supporttukgydF4y2BaPeople Ops US GitLab.org/GitLab INT/Global Groups/People Ops USgydF4y2Ba全局管理员GitLab.org/GitLab INT/全局组/全局管理员gydF4y2Ba

看到gydF4y2Ba更多的信息gydF4y2Ba在Windows PowerShell搜索活动目录从gydF4y2Ba编写脚本的人gydF4y2Ba

GitLab LDAP配置gydF4y2Ba

GitLab中LDAP的初始配置需要更改gydF4y2Bagitlab.rbgydF4y2Ba配置文件。下面是一个使用Active Directory的完整配置示例。gydF4y2Ba

两个活动目录特定的值是gydF4y2Baactive_directory:真gydF4y2Ba而且gydF4y2Bauid:“sAMAccountName”gydF4y2Ba.gydF4y2BasAMAccountNamegydF4y2Ba是Active Directory返回的用于GitLab用户名的属性。的示例输出gydF4y2BaldapsearchgydF4y2Ba对于“person”对象(用户)的属性的完整列表gydF4y2Ba广告gydF4y2Ba-gydF4y2BaldapsearchgydF4y2Ba例子gydF4y2Ba

group_base和admin_group配置选项仅在GitLab企业版中可用。看到gydF4y2BaGitLab EE - LDAP特性gydF4y2Ba

例子gydF4y2Bagitlab.rbgydF4y2BaLDAPgydF4y2Ba

Gitlab_rails ['ldap_enabled'] = truegydF4y2BaGitlab_rails ['ldap_servers'] = {gydF4y2Ba'main' => {gydF4y2Ba'label' => 'GitLab AD',gydF4y2Ba'host' => 'ad.example.org',gydF4y2Ba'port' => 636,gydF4y2Ba'uid' => 'sAMAccountName',gydF4y2Ba'加密' => 'simple_tls',gydF4y2Ba'verify_certificates' => true,gydF4y2Ba'bind_dn' => 'CN=GitLabSRV,CN=Users,DC=GitLab,DC=org',gydF4y2Ba'password' => 'Password1',gydF4y2Ba'active_directory' => true,gydF4y2Ba'base' => 'OU=GitLab INT,DC=GitLab,DC=org',gydF4y2Ba'group_base' => 'OU=全局组,OU=GitLab INT,DC=GitLab,DC=org',gydF4y2Ba'admin_group' => '全局管理员'gydF4y2Ba}gydF4y2Ba}gydF4y2Ba

注意:gydF4y2Ba记得要跑gydF4y2Bagitlab-ctl重新配置gydF4y2Ba修改后gydF4y2Bagitlab.rbgydF4y2Ba

安全改进(LDAPS)gydF4y2Ba

安全性是部署LDAP服务器时的一个重要方面。缺省情况下,LDAP流量采用不安全传输方式。LDAP可以使用称为LDAPS的SSL/TLS来保护,或者通常是“基于SSL的LDAP”。gydF4y2Ba

在Windows Server 2012上保护LDAP(启用LDAPS)涉及安装有效的SSL证书。有关详细信息,请参阅微软的指南gydF4y2Ba如何通过第三方认证机构启用LDAP over SSLgydF4y2Ba

缺省情况下,LDAP服务监听TCP和UDP端口389上的连接。LDAPS(基于SSL的LDAP)监听端口636gydF4y2Ba

测试AD服务器gydF4y2Ba

使用gydF4y2BaAdFindgydF4y2Ba(窗口)gydF4y2Ba

您可以使用gydF4y2BaAdFindgydF4y2Ba实用程序(在基于Windows的系统上)来测试您的LDAP服务器是否可访问,身份验证是否正常工作。这是由gydF4y2Ba乔·理查兹gydF4y2Ba.gydF4y2Ba

返回所有对象gydF4y2Ba

你可以使用滤镜gydF4y2Baobjectclass = *gydF4y2Ba返回所有目录对象。gydF4y2Ba

adfindgydF4y2Ba- hgydF4y2Baad.example.org: 636gydF4y2BasslgydF4y2Ba- ugydF4y2Ba“CN = GitLabSRV, CN =用户,DC = GitLab, DC = org "gydF4y2Ba长诚gydF4y2Ba密码gydF4y2Ba- bgydF4y2Ba“OU = GitLab INT, DC = GitLab, DC = org "gydF4y2Ba- fgydF4y2Ba(gydF4y2Ba对象类gydF4y2Ba=gydF4y2Ba*gydF4y2Ba)gydF4y2Ba

使用过滤器返回单个对象gydF4y2Ba

还可以通过gydF4y2Ba指定gydF4y2Ba对象名称或全文gydF4y2BaDNgydF4y2Ba.在本例中,我们只指定对象名称gydF4y2BaCN = Leroy福克斯gydF4y2Ba.gydF4y2Ba

adfindgydF4y2Ba- hgydF4y2Baad.example.org: 636gydF4y2BasslgydF4y2Ba- ugydF4y2Ba“CN = GitLabSRV, CN =用户,DC = GitLab, DC = org "gydF4y2Ba长诚gydF4y2Ba密码gydF4y2Ba- bgydF4y2Ba“OU = GitLab INT, DC = GitLab, DC = org "gydF4y2Ba- fgydF4y2Ba(gydF4y2Ba&gydF4y2Ba(gydF4y2BaobjectcategorygydF4y2Ba=gydF4y2Ba人gydF4y2Ba)(gydF4y2BaCNgydF4y2Ba=gydF4y2Ba勒罗伊福克斯gydF4y2Ba))gydF4y2Ba”gydF4y2Ba

使用gydF4y2BaldapsearchgydF4y2Ba(Unix)gydF4y2Ba

您可以使用gydF4y2BaldapsearchgydF4y2Ba实用程序(在基于Unix的系统上)来测试您的LDAP服务器是否可访问,身份验证是否正常工作。方法中包含此实用程序gydF4y2Baldap-utilsgydF4y2Ba包中。gydF4y2Ba

返回所有对象gydF4y2Ba

你可以使用滤镜gydF4y2Baobjectclass = *gydF4y2Ba返回所有目录对象。gydF4y2Ba

ldapsearchgydF4y2Ba- dgydF4y2Ba“CN = GitLabSRV, CN =用户,DC = GitLab, DC = org "gydF4y2Ba\gydF4y2Ba- wgydF4y2Ba密码gydF4y2Ba- pgydF4y2Ba636gydF4y2Ba- hgydF4y2Baad.example.orggydF4y2Ba\gydF4y2Ba- bgydF4y2Ba“OU = GitLab INT, DC = GitLab, DC = org "gydF4y2Ba- zgydF4y2Ba\gydF4y2Ba- sgydF4y2Ba子gydF4y2Ba”(objectclass = *) "gydF4y2Ba

使用过滤器返回单个对象gydF4y2Ba

还可以通过gydF4y2Ba指定gydF4y2Ba对象名称或全文gydF4y2BaDNgydF4y2Ba.在本例中,我们只指定对象名称gydF4y2BaCN = Leroy福克斯gydF4y2Ba.gydF4y2Ba

ldapsearchgydF4y2Ba- dgydF4y2Ba“CN = GitLabSRV, CN =用户,DC = GitLab, DC = org "gydF4y2Ba- wgydF4y2Ba密码gydF4y2Ba- pgydF4y2Ba389gydF4y2Ba- hgydF4y2Baad.example.orggydF4y2Ba- bgydF4y2Ba“OU = GitLab INT, DC = GitLab, DC = org "gydF4y2Ba- zgydF4y2Ba- sgydF4y2Ba子gydF4y2Ba“CN = Leroy狐狸”gydF4y2Ba

全输出gydF4y2BaldapsearchgydF4y2Ba命令:gydF4y2Ba-过滤gydF4y2BaCN = Leroy福克斯gydF4y2Ba

# LDAPv3gydF4y2Ba# base  with scope subtreegydF4y2Ba# filter: CN=Leroy FoxgydF4y2Ba#请求:全部gydF4y2Ba#gydF4y2Ba# Leroy Fox,开发者,英国,GitLab INT, GitLab.orggydF4y2Badn: CN=Leroy Fox,OU=开发者,OU=英国,OU=GitLab INT,DC=GitLab,DC=orgydF4y2BaggydF4y2Ba对象类:上gydF4y2Ba对象类:人gydF4y2BaorganizationalPerson对象类:gydF4y2Ba对象类:用户gydF4y2Bacn: Leroy FoxgydF4y2Basn:狐狸gydF4y2BagivenName:勒罗伊gydF4y2BadistinguishedName: CN=Leroy Fox,OU=Developers,OU=United Kingdom,OU=GitLab INT,gydF4y2BaDC = GitLab, DC = orggydF4y2BainstanceType: 4gydF4y2Baz whenCreated: 20170210030500.0gydF4y2Baz whenChanged: 20170213050128.0gydF4y2BadisplayName: Leroy FoxgydF4y2BauSNCreated: 16790gydF4y2BamemberOf: CN=DevelopersUK,OU=Global Groups,OU=GitLab INT,DC=GitLab,DC=orggydF4y2BauSNChanged: 20812gydF4y2Ba名字:Leroy FoxgydF4y2BaobjectGUID:: rBCAo6NR6E6vfSKgzcUILg = =gydF4y2BauserAccountControl: 512gydF4y2BabadPwdCount: 0gydF4y2Ba代码页:0gydF4y2BacountryCode: 0gydF4y2BabadPasswordTime: 0gydF4y2BalastLogoff: 0gydF4y2BalastLogon: 0gydF4y2BapwdLastSet: 131311695009850084gydF4y2BaprimaryGroupID: 513gydF4y2BaobjectSid:: AQUAAAAAAAUVAAAA9GMAb7tdJZvsATf7ZwQAAA = =gydF4y2BaaccountExpires: 9223372036854775807gydF4y2BalogonCount: 0gydF4y2BasAMAccountName: LeroyfgydF4y2BasAMAccountType: 805306368gydF4y2BauserPrincipalName: Leroyf@GitLab.orggydF4y2BaobjectCategory: CN =人,CN =模式,CN =配置,DC = GitLab, DC = orggydF4y2Baz dSCorePropagationData: 16010101000000.0gydF4y2BalastLogonTimestamp: 131314356887754250gydF4y2Ba#搜索结果gydF4y2Ba搜索:2gydF4y2Baresult: 0 Success成功gydF4y2Ba# numResponses: 2gydF4y2Ba# numEntries: 1gydF4y2Ba

基本用户认证gydF4y2Ba

配置LDAP后,基本身份验证将可用。然后,用户可以使用他们的目录凭据登录。为配置的LDAP服务器,在GitLab登录屏幕上添加了一个额外的选项卡(例如“gydF4y2BaGitLab广告gydF4y2Ba”)。gydF4y2Ba

GitLab OU结构gydF4y2Ba

从LDAP基本组中删除的用户(例如gydF4y2BaOU = GitLab INT, DC = GitLab, DC = orggydF4y2Ba)将是gydF4y2Ba阻塞gydF4y2Ba在GitLab。gydF4y2Ba更多的信息gydF4y2Ba有关LDAP安全性的信息。gydF4y2Ba

如果gydF4y2Baallow_username_or_email_logingydF4y2Ba如果在LDAP配置中启用,GitLab将忽略登录时使用的LDAP用户名中第一个“@”之后的所有内容。示例:用户名gydF4y2Bajon.doe@example.comgydF4y2Ba转换为gydF4y2Bajon.doegydF4y2Ba当使用LDAP服务器进行身份验证时。如果使用,请禁用此设置gydF4y2BauserPrincipalNamegydF4y2Ba随着gydF4y2BauidgydF4y2Ba.gydF4y2Ba

GitLab EE上的LDAP扩展特性gydF4y2Ba

与gydF4y2BaGitLab企业版(EE)gydF4y2Ba,除了我们刚刚描述的所有功能,您还可以使用LDAP扩展功能,例如:gydF4y2Ba

  • 组同步gydF4y2Ba
  • 组权限gydF4y2Ba
  • 更新用户权限gydF4y2Ba
  • 多台LDAP服务器gydF4y2Ba

通读这篇文章gydF4y2Ba用于GitLab EE的LDAPgydF4y2Ba概述。gydF4y2Ba

Baidu
map