通过 Kerberos 使用 Active Directory 身份验证设置 GitLab
mportant;">本指南介绍了如何使用 Docker 设置 GitLab,并通过安全的 Kerberos 连接启用 Windows Active Directory 帐户的身份验证。
索引
第一件事
将 Debian 机器加入 Windows 域
为 GitLab 设置服务主体名称
设置 Docker 环境
配置 GitLab
NGINX 配置
Git 客户端访问
更多信息
第一件事
当然,您需要一个设置和配置的域控制器来托管 Active Directory 服务。在我的测试用例中,这是由 Windows Server 2012 R2 实例托管的。此外,您需要一台基于 Linux 的机器来托管 GitLab。为此,我使用了 Debian 10 Buster 映像。
本指南中的所有软件包安装过程都将使用
apt
执行。如果您使用不同的包管理器,请根据您的用例调整这些步骤。
将Debian机器加入Windows域
要访问托管 Active Directory 服务的域控制器,我们需要将 Debian 机器加入域。为此,我们使用 Linux 工具realmd
。
1. 使用您的包管理器安装realmd
:
# apt install realmd -y
2. 现在,使用以下命令检查并测试您是否可以通过网络访问域:
# realmd discover your.domain.com
当然,假名your.domain.com
必须换成你的域名。
其结果应如下所示:
your.domain.com type: kerberos real.name: YOUR.DOMAIN.COM domain-name: your.domain.com configured: no server-software: active-directory client-software: sssd required-packages: sssd-tools required-packages: sssd required-packages: libnss-sss required-packages: libpam-sss required-packages: adcli required-packages: samba-common-bin
3. 安装最后一条命令输出定义为required-packages
的包。
# apt install -y sssd-tools sssd libnss-sss ...
4. 将机器加入域:
# realm join your.domain.com -U 'admin' --install=/' -v
定义的用户必须是管理员或允许将机器加入域的用户。
注意
Linux 机器在加入域时可能不会在您的域控制器上自动创建 DNS 条目。在这种情况下,您需要手动将
A
记录添加到您的 DNS 服务器。
设置GitLab的服务主体名称
您需要为您的 Active Directory 机器对象设置一个服务主体名称 (SPN),以允许通过 Kerberos 对您的 Web 应用程序 (GitLab) 进行安全身份验证。
为此,请在域控制器上打开管理员控制台并使用以下命令:
> setspn -A HTTP/MachineName.your.domain.com MachineName
再次,您需要将MachineName
替换为 GitLab 服务器的 DNS 名称,并将your.domain.com
替换为您的域的实际名称。
搭建Docker环境
这些步骤取自官方 Docker 文档关于在 Debian 上安装。
*https://docs.docker.com/install/linux/docker-ce/debian
*https://docs.docker.com/compose/install
1. 安装所需的包以安装和运行 Docker 包:
# apt install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common
2. 添加 Dockers GPG 密钥:
# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
3. 将 Dockers 存储库添加到 apt:
# add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ $(lsb_release -cs) \ stable" && apt update
4. 安装 Docker 包:
# apt install -y docker-ce docker-ce-cli containerd.io
5. 安装 docker-compose:
# curl -L \ "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" \ -o /usr/local/bin/docker-compose# chmod +x /usr/local/bin/docker-compose
6. 创建一个docker-compose.yml
。
该文件定义了 Docker 将如何设置容器以及为它们使用哪些参数。此外,它在容器之间创建了一个虚拟网络,该虚拟网络只能由它们访问,并且可以通过暴露的端口访问。
在这里您可以阅读有关 docker-compose 的更多信息。
7. 拉取镜像并创建容器:
# docker-compose up -d
之后,再次停止容器:
# docker-compose stop
配置GitLab
1. 链接keytab
文件。
为了通过 Kerberos 安全地访问 Windows 域,Docker 容器需要访问主机krb5.keytab
文件,该文件是在使用位于/etc/krb5.keytab
的realm
加入域时创建的。
该文件既可以直接复制到挂载的主机目录/etc/gitlab/
(本例中为./volumes/gitlab/config/
),也可以直接作为文件挂载到容器中。
之后,容器需要读取krb5.keytab
文件的权限:
# docker exec gitlab chown root /etc/gitlab/krb5.keytab# docker exec gitlab chmod 0600 /etc/gitlab/krb5.keytab
如果您选择直接将文件挂载到容器中,请记住文件必须存在于主机系统上才能挂载文件,而不是在容器启动时创建目录。
2. 打开 GitLab 配置文件 (./volumes/gitlab/config/gitlab.rb
) 并在文件末尾添加以下行:
当您将
omniauth_allow_single_sign_on
设置为true
时,AD 用户可以登录,创建一个帐户并在之后自动阻止它。如果禁用此功能,则必须先在 GitLab 中创建每个帐户,然后将其链接到 AD 标识符。阅读这个了解更多信息。
3. 运行 GitLab 重新配置命令以使您的更改生效。此外,这必须在 docker 容器内完成:
# docker exec gitlab gitlab-ctl reconfigure
4. 重新启动 GitLab 容器。
然后,内部身份验证下方应该会出现一个名为Kerberos Spnego
的新身份验证方法。此方法使用您的 Windows 登录票作为身份验证,因此您无需输入您的帐户凭据。之后,将通知您的帐户已被阻止。不用担心,GitLab 默认会为 AD 用户创建账户并在之后自动阻止它。该帐户必须由 GitLab 管理员手动解除阻止。
NGINX 配置
正如docker-compose.yml
文件中定义的那样,我们将 ENGINX Web 服务器作为实际 GitLab 服务器之上的附加层。这对于管理 SSL 证书和配置到 GitLab 服务器的进一步 HTTP 路由非常有用。
在我们的例子中,我们使用以下命令创建一个自签名 SSL 证书:
# mkdir -p /etc/cert# openssl req \ -x509 \ -newkey rsa:4096 \ -keyout /etc/cert/key.pem \ -out /etc/cert/cert.pem \ -days 365 \ -nodes
当然,如果您已经拥有有效证书,则可以使用该证书。
然后,在容器的卷(./volumes/nginx/config/nginx.cfg
)中创建 NGINX 配置文件:
在这里您可以阅读有关 NGINX 配置的完整详细文档:
为了支持 Active Directory 身份验证,我们需要使用large_client_header_buffers
配置密钥来增加 NGINX 的客户端标头缓冲区的大小。在此处阅读有关此的更多信息。
Git客户端访问
通常,您可以在您的开发客户端上创建一个 GPG 密钥对,并将您的公钥推送到您的 GitLab 帐户,以通过 SSH 访问存储库。此步骤绕过 Kerberos 身份验证,因为它仅基于链接到您的私钥的相应公钥的身份验证。
当然,您还可以使用 Kerberos 身份验证通过 HTTPS 克隆和访问存储库。
为此,您需要在 Git 客户端上设置两个配置值:
首先,下载 GitLab 证书并使用浏览器将其作为 base64 编码的 X.509 证书文件进行保护。
然后,在您的 git 客户端配置中将该文件设置为受信任的证书:
$ git config --global http.sslCAInfo <PathToTheDownloadedCertFile>
此外,如果您使用的是 Git v.2.11 或更新版本并且会出现以下错误:
remote: HTTP Basic: Access deniedfatal: Authentication failed for '<KRB5 path>'
设置以下配置以解决此问题:
$ git config --global http.emptyAuth true
然后,您可以使用Kerberos
链接到您的存储库,例如https://:@MachineName:8443/jd/coolrepo.git
,访问客户端上的上游存储库。同样与 Web 界面登录类似,您不需要输入您的帐户凭据,因为身份验证使用 Kerberos 票证系统。
如果您使用HTTPS
链接,您可能需要输入您的 AD 帐户凭据,因为这是一种基于密码的身份验证方法。
更多信息
在这里,您可以找到我也用于实现此设置的更多阅读材料和信息:
https://docs.gitlab.com/ee/integration/kerberos.html
https://docs.gitlab.com/omnibus/docker/
https://4sysops.com/archives/join-a-debian-linux-server-to-an-active-directory-domain/
https://www.systutorials.com/docs/linux/man/8-realm/
https://blogs.technet.microsoft.com/pie/2018/01/03/all-you-need-to-know-about-keytab-files/
https://support.microsoft.com/en-us/help/929650/how-to-use-spns-when-you-configure-web-applications-that-are-hosted-on
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc731241(vu003dws.11)
有关 NGINX 的更多信息
https://www.nginx.com/resources/wiki/start
https://nginx.org/en/docs/http/ngx_http_core_module.html
有关 Docker 和 docker-compose 的更多信息
https://docs.docker.com/
https://docs.docker.com/compose/
https://docs.docker.com/compose/compose-file/
本文链接:https://www.kinber.cn/post/4511.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝: