doc-locale/fr-fr/integration/kerberos.md
{{< details >}}
{{< /details >}}
GitLab peut s'intégrer à Kerberos en tant que mécanisme d'authentification.
Kerberos est uniquement disponible sur les instances qui utilisent GitLab Enterprise Edition (EE). Si vous utilisez GitLab Community Edition (CE), vous pouvez convertir GitLab CE en GitLab EE.
[!warning] GitLab CI/CD ne fonctionne pas avec une instance GitLab sur laquelle Kerberos est activé, sauf si l'intégration est configurée pour utiliser un port dédié.
Pour que GitLab propose une authentification basée sur les jetons Kerberos, effectuez les prérequis suivants. Vous devez toujours configurer votre système pour l'utilisation de Kerberos, notamment en spécifiant les royaumes. GitLab utilise les paramètres Kerberos du système.
gitlab.example.com et votre royaume Kerberos EXAMPLE.COM, créez un principal de service HTTP/[email protected] dans votre base de données Kerberos./etc/http.keytab.Le fichier keytab est un fichier sensible qui doit être lisible par l'utilisateur GitLab. Définissez la propriété et protégez le fichier de manière appropriée :
sudo chown git /etc/http.keytab
sudo chmod 0600 /etc/http.keytab
[!note] Pour les installations compilées manuellement, assurez-vous que le groupe de gems
kerberosa été installé.
Modifiez la section kerberos de gitlab.yml pour activer l'authentification par ticket Kerberos. Dans la plupart des cas, vous devez uniquement activer Kerberos et spécifier l'emplacement du fichier keytab :
omniauth:
enabled: true
allow_single_sign_on: ['kerberos']
kerberos:
# Allow the HTTP Negotiate authentication method for Git clients
enabled: true
# Kerberos 5 keytab file. The keytab file must be readable by the GitLab user,
# and should be different from other keytabs in the system.
# (default: use default keytab from Krb5 config)
keytab: /etc/http.keytab
Redémarrez GitLab pour que les modifications prennent effet.
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_allow_single_sign_on'] = ['kerberos']
gitlab_rails['kerberos_enabled'] = true
gitlab_rails['kerberos_keytab'] = "/etc/http.keytab"
Pour éviter que GitLab crée des utilisateurs automatiquement lors de leur première connexion via Kerberos, ne définissez pas kerberos pour gitlab_rails['omniauth_allow_single_sign_on'].
Reconfigurez GitLab pour que les modifications prennent effet.
GitLab propose désormais la méthode d'authentification negotiate pour la connexion et l'accès HTTP Git, permettant aux clients Git qui prennent en charge ce protocole d'authentification de s'authentifier avec des jetons Kerberos.
Configurez les paramètres communs pour ajouter kerberos en tant que fournisseur d'authentification unique. Cela active le provisionnement de comptes Just-In-Time pour les utilisateurs qui ne possèdent pas encore de compte GitLab.
Vous pouvez soit lier un compte Kerberos à un compte GitLab existant, soit configurer GitLab pour créer un nouveau compte lorsqu'un utilisateur Kerberos tente de se connecter.
{{< history >}}
{{< /history >}}
Si vous êtes administrateur, vous pouvez lier un compte Kerberos à un compte GitLab existant. Pour ce faire :
Si vous n'êtes pas administrateur :
Dans l'un ou l'autre cas, vous devriez maintenant pouvoir vous connecter à votre compte GitLab avec vos identifiants Kerberos.
La première fois que des utilisateurs se connectent à GitLab avec leurs comptes Kerberos, GitLab crée un compte correspondant. Avant de continuer, consultez les options des paramètres de configuration communs pour les instances avec package Linux et les instances compilées manuellement. Vous devez également inclure kerberos.
Avec ces informations en main :
'kerberos' avec le paramètre allow_single_sign_on.block_auto_created_users par défaut, true.Si block_auto_created_users est défini sur true, l'utilisateur Kerberos peut voir un message tel que :
Your account has been blocked. Please contact your GitLab
administrator if you think this is an error.
Si block_auto_created_users est défini sur false, l'utilisateur Kerberos est authentifié et connecté à GitLab.
[!warning] Nous vous recommandons de conserver la valeur par défaut pour
block_auto_created_users. Les utilisateurs Kerberos qui créent des comptes sur GitLab sans que l'administrateur en soit informé peuvent représenter un risque de sécurité.
Si vos utilisateurs se connectent avec Kerberos, mais que vous avez également activé l'intégration LDAP, vos utilisateurs sont liés à leurs comptes LDAP lors de leur première connexion. Pour que cela fonctionne, certains prérequis doivent être satisfaits :
Le nom d'utilisateur Kerberos doit correspondre à l'UID de l'utilisateur LDAP. Vous pouvez choisir quel attribut LDAP est utilisé comme UID dans la configuration LDAP de GitLab, mais pour Active Directory, il doit s'agir de sAMAccountName.
Le royaume Kerberos doit correspondre à la partie domaine du nom distinctif (Distinguished Name) de l'utilisateur LDAP. Par exemple, si le royaume Kerberos est AD.EXAMPLE.COM, le nom distinctif de l'utilisateur LDAP doit se terminer par dc=ad,dc=example,dc=com.
Pris ensemble, ces règles signifient que la liaison ne fonctionne que si les noms d'utilisateur Kerberos de vos utilisateurs sont de la forme [email protected] et que leurs noms distinctifs LDAP ressemblent à sAMAccountName=foo,dc=ad,dc=example,dc=com.
Vous pouvez configurer des royaumes autorisés personnalisés lorsque le royaume Kerberos de l'utilisateur ne correspond pas au domaine du DN LDAP de l'utilisateur. La valeur de configuration doit spécifier tous les domaines que les utilisateurs sont susceptibles d'avoir. Tous les autres domaines sont ignorés et aucune identité LDAP n'est liée.
{{< tabs >}}
{{< tab title="Linux package (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['kerberos_simple_ldap_linking_allowed_realms'] = ['example.com','kerberos.example.com']
Enregistrez le fichier et reconfigurez GitLab pour que les modifications prennent effet.
{{< /tab >}}
{{< tab title="Self-compiled (source)" >}}
Modifiez config/gitlab.yml :
kerberos:
simple_ldap_linking_allowed_realms: ['example.com','kerberos.example.com']
Enregistrez le fichier et redémarrez GitLab pour que les modifications prennent effet.
{{< /tab >}}
{{< /tabs >}}
Un compte Kerberos lié vous permet d'utiliser git pull et git push avec votre compte Kerberos, ainsi qu'avec vos identifiants GitLab standard.
Les utilisateurs GitLab disposant d'un compte Kerberos lié peuvent également utiliser git pull et git push à l'aide de jetons Kerberos. C'est-à-dire sans avoir à envoyer leur mot de passe à chaque opération.
[!warning] Il existe un problème connu avec
libcurlantérieur à la version 7.64.1, dans lequel les connexions ne sont pas réutilisées lors de la négociation. Cela entraîne des problèmes d'autorisation lorsque le push est plus grand que la configurationhttp.postBuffer. Assurez-vous que Git utilise au moinslibcurl7.64.1 pour éviter ce problème. Pour connaître la version delibcurlinstallée, exécutezcurl-config --version.
En raison d'un bug dans les versions actuelles de Git, la commande CLI git utilise uniquement la méthode d'authentification negotiate si le serveur HTTP la propose, même si cette méthode échoue (par exemple, lorsque le client ne possède pas de jeton Kerberos). Il n'est donc pas possible de revenir à une authentification par nom d'utilisateur et mot de passe intégrés (également connue sous le nom de basic) si l'authentification Kerberos échoue.
Pour permettre aux utilisateurs GitLab d'utiliser l'authentification basic ou negotiate avec les versions actuelles de Git, il est possible de proposer l'authentification basée sur les tickets Kerberos sur un port différent (par exemple, 8443), tandis que le port standard ne propose que l'authentification basic.
[!note] Git 2.4 et versions ultérieures prend en charge le repli vers l'authentification
basicsi le nom d'utilisateur et le mot de passe sont transmis de manière interactive ou via un gestionnaire d'identifiants. Le repli échoue lorsque le nom d'utilisateur et le mot de passe sont transmis dans le cadre de l'URL. Par exemple, cela peut se produire dans les jobs GitLab CI/CD qui s'authentifient avec le jeton de job CI/CD.
{{< tabs >}}
{{< tab title="Linux package (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['kerberos_use_dedicated_port'] = true
gitlab_rails['kerberos_port'] = 8443
gitlab_rails['kerberos_https'] = true
Reconfigurez GitLab pour que les modifications prennent effet.
{{< /tab >}}
{{< tab title="Self-compiled (source) with HTTPS" >}}
Modifiez le fichier de configuration NGINX pour GitLab (par exemple, /etc/nginx/sites-available/gitlab-ssl) et configurez NGINX pour écouter sur le port 8443 en plus du port HTTPS standard :
server {
listen 0.0.0.0:443 ssl;
listen [::]:443 ipv6only=on ssl default_server;
listen 0.0.0.0:8443 ssl;
listen [::]:8443 ipv6only=on ssl;
Mettez à jour la section kerberos de gitlab.yml :
kerberos:
# Dedicated port: Git before 2.4 does not fall back to Basic authentication if Negotiate fails.
# To support both Basic and Negotiate methods with older versions of Git, configure
# nginx to proxy GitLab on an extra port (for example: 8443) and uncomment the following lines
# to dedicate this port to Kerberos authentication. (default: false)
use_dedicated_port: true
port: 8443
https: true
Redémarrez GitLab et NGINX pour que les modifications prennent effet.
{{< /tab >}}
{{< /tabs >}}
Après cette modification, les URL distantes Git doivent être mises à jour vers https://gitlab.example.com:8443/mygroup/myproject.git pour utiliser l'authentification basée sur les tickets Kerberos.
Dans les versions précédentes de GitLab, les utilisateurs devaient soumettre leur nom d'utilisateur et leur mot de passe Kerberos à GitLab lors de la connexion.
Nous avons supprimé les connexions Kerberos par mot de passe dans GitLab 15.0.
Lors de l'utilisation de l'authentification Kerberos basée sur les tickets dans un domaine Active Directory, il peut être nécessaire d'augmenter la taille maximale des en-têtes autorisée par NGINX, car les extensions du protocole Kerberos peuvent générer des en-têtes d'authentification HTTP plus grands que la taille par défaut de 8 ko. Configurez large_client_header_buffers sur une valeur plus grande dans la configuration NGINX.
Lorsque vous créez un fichier keytab avec un chiffrement exclusivement AES (Advanced Encryption Standard), vous devez cocher la case This account supports Kerberos AES <128/256> bit encryption pour ce compte dans le serveur AD. Que la case soit en 128 ou 256 bits dépend de la puissance de chiffrement utilisée lors de la création du fichier keytab. Pour vérifier cela, sur le serveur Active Directory :