LDAP

GitLab与LDAP集成以支持用户身份验证。这种集成适用于大多数LDAP兼容的目录服务器,包括Microsoft Active directory、Apple Open directory、Open LDAP和389 Server。GitLab EE包括增强的集成,包括组成员同步。

安全

GitLab假设LDAP用户不能更改他们的LDAP 'mail', 'email'或'userPrincipalName'属性。允许在LDAP服务器上更改其电子邮件的LDAP用户可能会接管任何账户在您的GitLab服务器上。

如果允许LDAP用户更改LDAP服务器上的'mail'、'email'或'userPrincipalName'属性,我们建议不要使用LDAP集成。

用户删除

如果用户从LDAP服务器中删除,他们也将在GitLab中被阻止。用户将立即被阻止登录。但是,LDAP检查缓存时间(同步时间)为一小时(参见注释)。这意味着已经登录或通过SSH使用Git的用户仍然可以访问GitLab长达一个小时。手动阻止用户在GitLab Admin区域,立即阻止所有访问。

请注意: GitLab EE支持可配置的同步时间,默认为一小时。

Git密码认证

启用了LDAP的用户始终可以使用他们的GitLab用户名或电子邮件和LDAP密码对Git进行身份验证,即使在应用程序设置中禁用了Git的密码身份验证。

配置

有关使用GitLab Community Edition配置LDAP的完整指南,请查看admin指南如何配置LDAP与GitLab CE

要启用LDAP集成,需要添加LDAP服务器设置/etc/gitlab/gitlab.rb/home/git/gitlab/config/gitlab.yml

有一个检查LDAP配置的Rake任务。在使用下面的文档配置LDAP之后,请参见LDAP检查Rake任务有关LDAP检查Rake任务的信息。

请注意:在GitLab EE中,您可以配置多个LDAP服务器连接到一个GitLab服务器。

在7.4版本之前,GitLab使用不同的语法来配置LDAP集成。旧的LDAP集成语法仍然有效,但可能在将来的版本中被删除。如果你的gitlab.rbgitlab.yml文件包含旧语法和新语法的LDAP设置,只有语法将被GitLab使用。

内部配置gitlab_rails(“ldap_servers”)下面是对不正确缩进的敏感。请确保保留示例中给出的缩进。复制/粘贴有时会导致问题。

综合配置

gitlab_rails“ldap_enabled”真正的gitlab_rails“ldap_servers”YAML负载<<-EOS#记住用下面的“EOS”关闭这个区块main: # 'main'是这个LDAP服务器的GitLab '提供商ID'# #标签#为您的LDAP服务器取一个人类友好的名字。标签可以稍后更改,#例如,如果你发现它太大,不适合网页。#示例:“Paris”或“Acme, Ltd.”标签:“LDAP”#示例:'ldap.mydomain.com'主持人:“_your_ldap_server”#这个端口是一个例子,它有时是不同的,但它总是一个整数,而不是字符串端口:389 # SSL通常为636uid: 'sAMAccountName' #这应该是属性,而不是映射到uid的值。#例子:美国\ \momo'或'CN=Gitlab Git,CN=Users,DC=mydomain,DC=com'bind_dn:“_the_full_dn_of_the_user_you_will_bind_with”密码:“_the_password_of_the_bind_user”#加密方法。不赞成使用“方法”键#“加密”。##示例:“start_tls”或“simple_tls”或“plain”##弃用值:"tls"被替换为"start_tls", "ssl"被替换#替换为"simple_tls"。#加密:“平原”#如果加密方式为,则启用SSL证书验证# "start_tls"或"simple_tls"。自GitLab 10.0以来默认为true for#安全。这可能会在升级到10.0时破坏安装#不知道他们的LDAP SSL证书没有正确设置。为例如,当使用自签名证书时,ca_file路径可以#需要指定。verify_certificates:真指定pem格式CA证书文件的路径。#例如,如果您需要使用内部CA。##示例:'/etc/ca.pem'#ca_file:“如果OpenSSL是默认的,则指定OpenSSL使用的SSL版本#不合适。#示例:'TLSv1_1'#ssl_version:“设置LDAP查询的超时时间,以秒为单位。这有助于避免阻塞如果LDAP服务器没有响应,则发送一个请求。#值为0表示没有超时。超时:10#此设置指定LDAP服务器是否为Active Directory LDAP服务器。#对于非AD服务器,它跳过AD特定的查询。如果您的LDAP服务器不是AD,请将此设置为false。active_directory:真#如果allow_username_or_email_login被启用,GitLab将忽略所有内容用户在登录时提交的LDAP用户名的第一个“@”后面加#。##的例子:# -用户输入'jane.doe@example.com'和'p@ssw0rd'作为LDAP凭据;# - GitLab用jane查询LDAP服务器。Doe '和'p@ssw0rd'。##如果你在ActiveDirectory上使用"uid: 'userPrincipalName'",你需要#禁用此设置,因为userPrincipalName包含一个“@”。allow_username_or_email_login:假为了严格控制GitLab安装的活跃用户数量,#启用此设置以阻止新用户,直到他们被管理员清除#(默认:false)。block_auto_created_users:假# Base,我们可以搜索用户##交货。'ou=People,dc=gitlab,dc=example'或' dc= mydomain, dc= com'#基础:“#过滤LDAP用户##格式:RFC 4515 https://tools.ietf.org/search/rfc4515#示例(employeeType=developer)#注:GitLab不支持omniauth-ldap的自定义过滤器语法。##获取特定用户的示例:#’(& (objectclass =用户)(| (samaccountname =莫莫)(samaccountname =托托)))”#user_filter:“# LDAP属性,GitLab将使用这些属性为LDAP用户创建帐户。#指定的属性可以是字符串形式的属性名(例如:“邮件”),#或按顺序尝试的属性名数组(例如['mail', 'email'])。请注意,用户的LDAP登录将始终是上面指定的“uid”属性。属性:#用户名将用于用户自己项目的路径#(如' gitlab.example.com/username/project ')和当提到#他们在问题,合并请求和评论(像' @username ')。#如果为' username '指定的属性包含一个电子邮件地址,# GitLab用户名将作为电子邮件地址的一部分,在“@”之前。用户名:['uid', 'userid', 'sAMAccountName']email: ['mail', 'email', 'userPrincipalName']如果在name属性中找不到全名,使用指定的属性来确定全名# ' first_name '和' last_name '。名称:“cn”first_name:“givenName”last_name:“锡”#如果启用了lowercase_usernames, GitLab会将用户名小写。lowercase_usernames:假##仅限EE#基地,我们可以搜索组##示例:ou=groups,dc=gitlab,dc=example#group_base:“包含GitLab管理员的组的CN## Ex. administrators##注意:不是“cn=administrators”或完整DN#admin_group:“包含用户的SSH公钥的LDAP属性##执行ssh_public_key#sync_ssh_keys:假# GitLab EE:添加更多LDAP服务器选择一个由a-z和0-9组成的ID。这个ID将存储在数据库中这样GitLab可以记住用户属于哪个LDAP服务器。# uswest2:#标签:#主机:#……EOS

源配置

使用与。相同的格式gitlab_rails(“ldap_servers”)以下内容服务器:在下面的例子中:

生产:#剪断…ldap:启用:假服务器:main: # 'main'是这个LDAP服务器的GitLab '提供商ID'# #标签#为您的LDAP服务器取一个人类友好的名字。标签可以稍后更改,#例如,如果你发现它太大,不适合网页。#示例:“Paris”或“Acme, Ltd.”标签:“LDAP”#剪断…

使用LDAP过滤器限制对GitLab服务器的访问

如果希望将所有GitLab访问限制为LDAP服务器上LDAP用户的一个子集,那么第一步应该是缩小配置的范围基地.然而,有时需要进一步过滤用户。在这种情况下,您可以设置LDAP用户过滤器。过滤器必须符合RFC 4515

综合配置

gitlab_rails“ldap_servers”YAML负载<<-EOS主要:#剪断…user_filter:“(employeeType =开发者)”EOS

源配置

生产ldap服务器主要#剪断…user_filter(employeeType =开发者)'

提示:如果要限制对活动目录组的嵌套成员的访问,可以使用以下语法:

(memberOf: 1.2.840.113556.1.4.1941: = CN =我的小组,DC =示例中,DC = com)

有关“LDAP_MATCHING_RULE_IN_CHAIN”过滤器的更多信息,请参见https://msdn.microsoft.com/en-us/library/aa746475 (v = vs.85) . aspx.在用户筛选器中支持嵌套成员不应与组同步嵌套组支持(仅限EE)

请注意,GitLab不支持omniauth-ldap使用的自定义过滤器语法。

为现有的GitLab用户启用LDAP登录

当用户第一次使用LDAP登录到GitLab时,他们的LDAP电子邮件地址是现有GitLab用户的主电子邮件地址,那么LDAP DN将与现有用户相关联。如果在GitLab的数据库中没有找到LDAP email属性,则创建一个新用户。

换句话说,如果现有的GitLab用户想要为自己启用LDAP登录,他们应该检查他们的GitLab电子邮件地址是否与他们的LDAP电子邮件地址匹配,然后通过他们的LDAP凭据登录到GitLab。

启用LDAP用户名小写

一些LDAP服务器(取决于它们的配置)可以返回大写的用户名。这可能会导致一些令人困惑的问题,例如,使用大写名称创建链接或名称空间。

通过启用配置选项,GitLab可以自动小写LDAP服务器提供的用户名lowercase_usernames.默认情况下,此配置选项为

综合配置

  1. 编辑/etc/gitlab/gitlab.rb
gitlab_rails“ldap_servers”YAML负载<<-EOS主要:#剪断…lowercase_usernames:真EOS
  1. 重新配置GitLab使更改生效。

源配置

  1. 编辑配置/ gitlab.yaml
生产ldap服务器主要#剪断…lowercase_usernames真正的
  1. 重启GitLab使更改生效。

加密

TLS服务器身份验证

有两种加密方法,simple_tlsstart_tls

对于任何一种加密方法,如果设置verify_certificates:假,在交换任何LDAP协议数据之前,与LDAP服务器建立TLS加密,但不执行LDAP服务器的SSL证书验证。

请注意在GitLab 9.5之前,verify_certificates:假如果未指定,则为默认值。

限制

TLS客户端身份验证

不是由Net:: LDAP.您应该禁用匿名LDAP身份验证,并启用简单或SASL身份验证。LDAP服务器中的TLS客户机身份验证设置不能是强制性的,并且客户机不能使用TLS协议进行身份验证。

故障排除

使用ldapsearch调试LDAP用户过滤器

本例使用ldapsearch,并假设您正在使用ActiveDirectory。下面的查询返回用户的登录名,如果您配置了自己的user_filter,这些用户将被允许登录到GitLab。

ldapsearch -H ldaps://$host:$port -D "$bind_dn" -y bind_dn_password.txt -b "$base" "$user_filter" sAMAccountName .txt
  • 以a开头的变量从配置文件的LDAP部分引用一个变量。
  • 如果使用的是普通身份验证方法,请将ldaps://替换为ldap://。港口389是默认值ldap: / /港口和636是默认值ldap: / /端口。
  • 我们假设bind_dn用户的密码在bind_dn_password.txt中。

登录时凭据无效

  • 确保与您绑定的用户有足够的权限来读取用户树并遍历它。
  • 检查一下user_filter不会阻止其他有效的用户。
  • 执行以下check命令确保LDAP设置正确,并且GitLab可以看到您的用户:

    #用于Omnibus安装sudogitlab-rake gitlab: ldap:检查#从源代码安装sudo- ugit- h执行rake gitlab: ldap:检查RAILS_ENV生产

连接拒绝

如果在尝试连接LDAP服务器时出现“Connection Refused”错误,请再次检查LDAP港口加密GitLab使用的设置。常见的组合有加密:“平原”端口:389,或加密:“simple_tls”端口:636

故障排除

如果由于LDAP配置导致某个用户被阻止或解锁,则会记录一条消息application.log

如果在LDAP查找过程中出现意外错误(配置错误、超时),则拒绝登录,并将记录一条消息production.log

Baidu
map