настройка LDAP-аутентификации GitLab без специального пользователя gitlab
Я хочу настроить GitLab с LDAP нашей компании в качестве демонстрации. Но, к сожалению, мне нужно ввести пароль администратора в gitlab.yml, чтобы сделать GitLab доступ к службе LDAP. Проблема на самом деле заключается в администрировании, поскольку они не хотят настраивать другую учетную запись только для Gitlab. Есть ли способ обойти это без заполнения мой пароль? Есть ли способ заставить Gitlab установить соединение LDAP только с предоставленными учетными данными пользователя?
любые идеи помимо ведения журнала в качестве анонима?
уже написал здесь.
3 ответов
Я еще не пробовал, но из того, что я построил до сих пор, аутентифицируясь против LDAP и информации из файла конфигурации, эта учетная запись пользователя, похоже, нужна только тогда, когда ваш LDAP не поддерживает анонимную привязку и поиск.
поэтому я бы оставил две записи bind_dn
и password
прокомментировал и попробуйте, работает ли это или нет.
обновление
я реализовал LDAP-Autehntication в Gitlab, и это довольно просто.
на gitlab.yml
-файл есть раздел под названием ldap
.
там вы должны предоставить информацию для подключения к LDAP. Кажется, что все поля должны быть даны, кажется, нет резервного значения по умолчанию! Если вы хотите использовать анонимную привязку для извлечения DN пользователей, укажите пустую строку для bind_dn
и password
. Комментировать их, похоже, не работает! По крайней мере, я получил сообщение об ошибке 501.
больше информации можно найти на https://github.com/patthoyts/gitlabhq/wiki/Setting-up-ldap-auth и (более устаревший, но все еще полезный)https://github.com/intridea/omniauth-ldap
я исправил gitlab для работы таким образом и документировал процесс в http://foivos.zakkak.net/tutorials/gitlab_ldap_auth_without_querying_account.html
я бесстыдно копирую здесь инструкции для самосовершенствования.
Примечание: этот учебник был последний раз протестирован с GitLab 8.2, установленным из источника.
этот учебник призван описать, как изменить Gitlab установки для использование пользователей учетные данные для аутентификации на сервере LDAP. От по умолчанию Gitlab полагается на анонимную привязку или специальный запрос пользователь чтобы спросить сервер LDAP о существовании пользователя раньше опознать ее по ее собственным документам. По соображениям безопасности, однако многие администраторы отключают анонимную привязку и запрещают создание специальных запрос пользователи LDAP.
в этом уроке мы предполагаем, что у нас есть настройка gitlab на
gitlab.example.com и сервер LDAP, работающий на ldap.example.com, и
пользователи имеют DN следующей формы:
CN=username,OU=Users,OU=division,OU=department,DC=example,DC=com
.
исправления
сделать Gitlab работа в таких случаях нужно частично изменить его механизм проверки подлинности по протоколу LDAP.
во-первых, мы заменяем модуль omniauth-ldap на этой деривации. К
достичь этого мы применяем следующий патч к gitlab/Gemfile
:
diff --git a/Gemfile b/Gemfile
index 1171eeb..f25bc60 100644
--- a/Gemfile
+++ b/Gemfile
@@ -44,4 +44,5 @@ gem 'gitlab-grack', '~> 2.0.2', require: 'grack'
# LDAP Auth
# GitLab fork with several improvements to original library. For full list of changes
# see https://github.com/intridea/omniauth-ldap/compare/master...gitlabhq:master
-gem 'gitlab_omniauth-ldap', '1.2.1', require: "omniauth-ldap"
+#gem 'gitlab_omniauth-ldap', '1.2.1', require: "omniauth-ldap"
+gem 'gitlab_omniauth-ldap', :git => 'https://github.com/zakkak/omniauth-ldap.git', require: 'net-ldap', require: "omniauth-ldap"
теперь нам нужно выполните следующие действия:
sudo -u git -H bundle install --without development test mysql --path vendor/bundle --no-deployment
sudo -u git -H bundle install --deployment --without development test mysql aws
эти команды будут получать модифицированный модуль omniauth-ldap в
gitlab/vendor/bundle/ruby/2.x.x/bundler/gems
. Теперь, когда модуль
извлеченный, нам нужно изменить его, чтобы использовать DN, который ожидает наш сервер LDAP. Мы
достичь этого путем исправления lib/omniauth/strategies/ldap.rb
in
gitlab/vendor/bundle/ruby/2.x.x/bundler/gems/omniauth-ldap
С:
diff --git a/lib/omniauth/strategies/ldap.rb b/lib/omniauth/strategies/ldap.rb
index 9ea62b4..da5e648 100644
--- a/lib/omniauth/strategies/ldap.rb
+++ b/lib/omniauth/strategies/ldap.rb
@@ -39,7 +39,7 @@ module OmniAuth
return fail!(:missing_credentials) if missing_credentials?
# The HACK! FIXME: do it in a more generic/configurable way
- @options[:bind_dn] = "CN=#{request['username']},OU=Test,DC=my,DC=example,DC=com"
+ @options[:bind_dn] = "CN=#{request['username']},OU=Users,OU=division,OU=department,DC=example,DC=com"
@options[:password] = request['password']
@adaptor = OmniAuth::LDAP::Adaptor.new @options
С помощью этого модуля gitlab использует учетные данные пользователя для привязки к LDAP сервер и запросить его, а также, для аутентификации сам пользователь.
это, однако, будет работать только до тех пор, пока пользователи не используют ssh-ключи для аутентификация с помощью Gitlab. При аутентификации через ssh-ключ, по умолчанию Gitlab запрашивает сервер LDAP, чтобы узнать, соответствующий пользователь является (по-прежнему) действительным пользователем или нет. На данный момент, мы не удается использовать учетные данные пользователя для запроса сервера LDAP, так как пользователь не предоставил их нам. В результате мы отключаем это механизм, по существу, позволяя пользователям с зарегистрированными ssh-ключами, но удаленными из Сервер LDAP по-прежнему использует наш Gitlab настройка. Чтобы запретить таким пользователям будучи в состоянии по-прежнему использовать Gitlab настройка, вам придется вручную удалите их ssh-ключи из любых учетных записей в вашей настройке.
чтобы отключить этот механизм, мы исправляем gitlab/lib/gitlab/ldap/access.rb
с:
diff --git a/lib/gitlab/ldap/access.rb b/lib/gitlab/ldap/access.rb
index 16ff03c..9ebaeb6 100644
--- a/lib/gitlab/ldap/access.rb
+++ b/lib/gitlab/ldap/access.rb
@@ -14,15 +14,16 @@ module Gitlab
end
def self.allowed?(user)
- self.open(user) do |access|
- if access.allowed?
- user.last_credential_check_at = Time.now
- user.save
- true
- else
- false
- end
- end
+ true
+ # self.open(user) do |access|
+ # if access.allowed?
+ # user.last_credential_check_at = Time.now
+ # user.save
+ # true
+ # else
+ # false
+ # end
+ # end
end
def initialize(user, adapter=nil)
@@ -32,20 +33,21 @@ module Gitlab
end
def allowed?
- if Gitlab::LDAP::Person.find_by_dn(user.ldap_identity.extern_uid, adapter)
- return true unless ldap_config.active_directory
+ true
+ # if Gitlab::LDAP::Person.find_by_dn(user.ldap_identity.extern_uid, adapter)
+ # return true unless ldap_config.active_directory
- # Block user in GitLab if he/she was blocked in AD
- if Gitlab::LDAP::Person.disabled_via_active_directory?(user.ldap_identity.extern_uid, adapter)
- user.block unless user.blocked?
- false
- else
- user.activate if user.blocked? && !ldap_config.block_auto_created_users
- true
- end
- else
- false
- end
+ # # Block user in GitLab if he/she was blocked in AD
+ # if Gitlab::LDAP::Person.disabled_via_active_directory?(user.ldap_identity.extern_uid, adapter)
+ # user.block unless user.blocked?
+ # false
+ # else
+ # user.activate if user.blocked? && !ldap_config.block_auto_created_users
+ # true
+ # end
+ # else
+ # false
+ # end
rescue
false
end
конфигурация
на gitlab.yml
использовать что-то вроде следующего (изменить в соответствии с вашими потребностями):
#
# 2. Auth settings
# ==========================
## LDAP settings
# You can inspect a sample of the LDAP users with login access by running:
# bundle exec rake gitlab:ldap:check RAILS_ENV=production
ldap:
enabled: true
servers:
##########################################################################
#
# Since GitLab 7.4, LDAP servers get ID's (below the ID is 'main'). GitLab
# Enterprise Edition now supports connecting to multiple LDAP servers.
#
# If you are updating from the old (pre-7.4) syntax, you MUST give your
# old server the ID 'main'.
#
##########################################################################
main: # 'main' is the GitLab 'provider ID' of this LDAP server
## label
#
# A human-friendly name for your LDAP server. It is OK to change the label later,
# for instance if you find out it is too large to fit on the web page.
#
# Example: 'Paris' or 'Acme, Ltd.'
label: 'LDAP_EXAMPLE_COM'
host: ldap.example.com
port: 636
uid: 'sAMAccountName'
method: 'ssl' # "tls" or "ssl" or "plain"
bind_dn: ''
password: ''
# This setting specifies if LDAP server is Active Directory LDAP server.
# For non AD servers it skips the AD specific queries.
# If your LDAP server is not AD, set this to false.
active_directory: true
# If allow_username_or_email_login is enabled, GitLab will ignore everything
# after the first '@' in the LDAP username submitted by the user on login.
#
# Example:
# - the user enters 'jane.doe@example.com' and 'p@ssw0rd' as LDAP credentials;
# - GitLab queries the LDAP server with 'jane.doe' and 'p@ssw0rd'.
#
# If you are using "uid: 'userPrincipalName'" on ActiveDirectory you need to
# disable this setting, because the userPrincipalName contains an '@'.
allow_username_or_email_login: false
# To maintain tight control over the number of active users on your GitLab installation,
# enable this setting to keep new users blocked until they have been cleared by the admin
# (default: false).
block_auto_created_users: false
# Base where we can search for users
#
# Ex. ou=People,dc=gitlab,dc=example
#
base: 'OU=Users,OU=division,OU=department,DC=example,DC=com'
# Filter LDAP users
#
# Format: RFC 4515 http://tools.ietf.org/search/rfc4515
# Ex. (employeeType=developer)
#
# Note: GitLab does not support omniauth-ldap's custom filter syntax.
#
user_filter: '(&(objectclass=user)(objectclass=person))'
GitLab использует omniauth для управления несколькими источниками входа (включая LDAP).
Итак, если вы можете как-то расширить omniauth
чтобы управлять соединением LDAP по-разному, вы можете получить пароль из другого источника.
Это позволит вам избежать сохранения указанного пароля в раздел ldap gitlab.yml
конфигурационный файл.