GitLab集成LDAP

目录
一、下载并安装GitLab
二、重置超级管理员的密码
三、开启LDAP
四、测试
五、LDAP详细配置说明
六、设置GitLab
七、关于老用户的账号权限问题
八、关于密码修改问题
九、关于拉取代码

一、下载并安装GitLab
1、下载地址
参考地址:https://www.gitlab.com.cn/downloads/
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/trusty/main/g/gitlab-ce/gitlab-ce_8.17.4-ce.0_amd64.deb

2、安装
sudo dpkg -i gitlab-ce_8.17.4-ce.0_amd64.deb

sudo dpkg -i gitlab-ce_8.17.4-ce.0_amd64.deb
(正在读取数据库 ... 系统当前共安装有 279385 个文件和目录。)
正准备解包 gitlab-ce_8.17.4-ce.0_amd64.deb  ...
正在将 gitlab-ce (8.17.4-ce.0) 解包到 (8.17.4-ce.0) 上 ...
正在设置 gitlab-ce (8.17.4-ce.0) ...


       *.                  *.
      ***                 ***
     *****               *****
    .******             *******
    ********            ********
   ,,,,,,,,,***********,,,,,,,,,
  ,,,,,,,,,,,*********,,,,,,,,,,,
  .,,,,,,,,,,,*******,,,,,,,,,,,,
      ,,,,,,,,,*****,,,,,,,,,.
         ,,,,,,,****,,,,,,
            .,,,***,,,,
                ,*,.

     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/


gitlab: Thank you for installing GitLab!
gitlab: To configure and start GitLab, RUN THE FOLLOWING COMMAND:

sudo gitlab-ctl reconfigure

gitlab: GitLab should be reachable at http://zhuwenping-PC
gitlab: Otherwise configure GitLab for your system by editing /etc/gitlab/gitlab.rb file
gitlab: And running reconfigure again.
gitlab: 
gitlab: For a comprehensive list of configuration options please see the Omnibus GitLab readme
gitlab: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md
gitlab: 

gitlab: GitLab now ships with a newer version of PostgreSQL (9.6.1), and will be used
gitlab: as the default in the next major release. To upgrade, RUN THE FOLLOWING COMMANDS:

sudo gitlab-ctl pg-upgrade

gitlab: For more details, please see:
gitlab: https://docs.gitlab.com/omnibus/settings/database.html#upgrade-packaged-postgresql-server
gitlab: 
It looks like GitLab has not been configured yet; skipping the upgrade script.

3、配置生效
sudo gitlab-ctl reconfigure

4、重启
sudo gitlab-ctl restart

sudo gitlab-ctl restart
ok: run: gitlab-workhorse: (pid 6742) 1s
ok: run: logrotate: (pid 6751) 0s
ok: run: nginx: (pid 6758) 1s
ok: run: postgresql: (pid 6769) 0s
ok: run: redis: (pid 6777) 0s
ok: run: sidekiq: (pid 6792) 0s
ok: run: unicorn: (pid 6797) 0s

二、重置超级管理员的密码
在安装完成后,访问gitlab地址,会进入密码的初始化设置界面。


密码的初始化.png

如果你漏设置,或者错过了,则需要进行下面步骤。
1、cd /opt/gitlab/bin/

2、sudo gitlab-rails console production

Loading production environment (Rails 4.2.7.1)
irb(main):001:0> u=User.where(id:1).first
=> #

用户名为[email protected]
密码设置为12345678

3、设置两遍密码

irb(main):005:0> u.password='12345678'
=> "12345678"
irb(main):006:0> u.password_confirmation='12345678'
=> "12345678"
irb(main):007:0> u.save!
Enqueued ActionMailer::DeliveryJob (Job ID: 6de78974-94dd-47ed-9d2c-1c38cdb46fa5) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", gid://gitlab/User/1
=> true
irb(main):008:0> exit

注意:密码的长度至少为8位,如果你设置为123456或admin这样子的大众密码,会在save的提示报错ActiveRecord::RecordInvalid: Validation failed: Password is too short (minimum is 8 characters)

irb(main):002:0> u.password='admin'
=> "admin"
irb(main):003:0> u.password_confirmation='admin'
=> "admin"
irb(main):004:0> u.save!
ActiveRecord::RecordInvalid: Validation failed: Password is too short (minimum is 8 characters)

三、开启LDAP
sudo vi /etc/gitlab/gitlab.rb

LDAP设置.png
GitLab用户的name.png

四、测试
访问地址http://localhost:8888/,本机IP就是192.168.8.17
这个访问地址是在/etc/gitlab/gitlab.rb中设置

GitLab URL.png

在原本登录框,增加了一个LDAP,对应下图的label


image.png

访问结果:


image.png

五、LDAP详细配置说明
/etc/gitlab/gitlab.rb 中:

### LDAP Settings
###! Docs: https://docs.gitlab.com/omnibus/settings/ldap.html
###! **Be careful not to break the indentation in the ldap_servers block. It is
###!   in yaml format and the spaces must be retained. Using tabs will not work.**

gitlab_rails['ldap_enabled'] = true

###! **remember to close this block with 'EOS' below**
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
   main: # 'main' is the GitLab 'provider ID' of this LDAP server
     label: 'LDAP'
     host: '192.168.10.62'
     port: 389
     uid: 'cn'
     bind_dn: 'cn=admin,dc=domain,dc=com'
     password: 'admin'
     encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
     active_directory: false
     allow_username_or_email_login: false
     block_auto_created_users: false
     base: 'ou=people,dc=domain,dc=com'
     user_filter: ''
     attributes:
       username: ['cn']
       email:    ['mail']
       name:     'description'
       first_name: 'givenName'
       last_name:  'sn'
     ## EE only
#     group_base: ''
#     admin_group: ''
#     sync_ssh_keys: false
EOS

其中:
label 是显示在GitLab登录框的上方文字描述。
host 和 port 是 LDAP 服务的主机地址及端口
bind_dn 和 password 是一个管理 LDAP 的 dn 及密码
base 表示 LDAP 将以该 dn 为 节点,向下查找用户
user_filter 表示以某种过滤条件筛选用户,比如假设我们只希望所属组为 java-platform 的用户来访问 GitLab,则可以在这里设置 (memberOf=ou=java-platform,ou=people,dc=domain,dc=com)
attributes 表示 GitLab 中的字段与 LDAP 中哪些字段可以相互对应,比如可以用 LDAP 中的 cn 来作为 GitLab 用户名, description 作为GitLab 的姓名。

六、设置GitLab
1、去掉注册


设置.png

Admin Area.png
image.png

登录效果见下:

image.png

2、解除Blocked用户


解除Blocked用户.png

3、创建用户为管理员


image.png
新建用户.png

七、关于老用户的账号权限问题
在实际情况下,我们一般是先gitlab已有账号,且运行了一段时日。后面的需求是接入LDAP,但是用户和账号是想保留,对于用户来说是无感知的接入。

下面说说我们的做法。
1、LDAP创建的账号,cn=手机号,description=姓名,mail=邮箱


LDAP创建的账号.png

2、gitLab创建的账号,Username=手机号,Name=姓名, Email=邮箱


gitLab创建的账号.png

两个账户体系的账号,只要做到LDAP的邮箱mail和gitLab的邮箱Email一致,前者就不会重新创建账号,后者的姓名不会被前者所覆盖。

3、gitLab登录,账号的密码是12345678


gitLab登录.png

4、LDAP登录,账号是上文配置/etc/gitlab/gitlab.rb的
attributes:
username: ['cn']
密码为初始值123456

LDAP登录.png

5、为了区分验证,是否覆盖,是否会创建两个用户。
我们可以把Name姓名设置为不相等的值。

6、如果两边的账号邮箱不一致,会存在两个账号。见下图:


账号邮箱不一致.png

八、关于密码修改问题
在gitlab通过[email protected]超级管理员修改某个用户的密码,并不会同步到LDAP。
背景描述:
一个用户在LDAP的账号,其邮箱是姓名格式,在gitLab的账号,其邮箱是手机号格式。
于是在gitLab后台看到两个用户。

如果我们修改他们的密码,gitLab账号保持8位密码12345678不变,LDAP账号修改为123456789,九位长度的密码,以作区别。

现在同样在LDAP和GitLab Standard两个tab页面登录。
1、LDAP页面登录


LDAP使用手机号登录成功.png

2、GitLab Standard页面登录
邮箱登录都能成功,但是登录密码需要对应好。
手机号、手机号格式的邮箱也都能登录成功,密码均为12345678
其中,姓名格式的邮箱,是LDAP的账号,超级管理员将密码修改为123456789

手机号格式的邮箱登录成功.png
手机号登录成功.png
姓名格式的邮箱登录成功.png

因为gitLab账号的Username为手机号,所以上面的手机号也能在GitLab Standard登录成功。


image.png

有个问题,手机号格式的邮箱账号,姓名格式的邮箱账号,手机号在GitLab Standard登录该使用哪个账号的密码呢??
原则是先入为主,先创建的账号是手机号格式的邮箱账号,后创建的账号是LDAP的姓名格式的邮箱账号。

3、GitLab Standard支持Username(在本文Username就是用户的手机号)和Email两种登录方式,密码是同一个。
这个不是关键,需要说明的是,LDAP接入后,gitLab管理后台,看到的用户列表,都是gitLab用户,只能在GitLab Standard登录框进行登录。
至于LDAP登录框, 使用的cn登录,后面把mail登录禁用就好。在本文,cn就是用户的手机号,密码默认为123456。

注意:同一个手机号在两个登录框尝试登录,所输入的密码不是同一个。
LDAP --------- 手机号/ 123456 (密码始终不会变,除非我们在lam修改)
GitLab Standard ---------- 手机号/12345678, [email protected]/12345678 (因为我们支持Username和Email两种登录方式)

九、关于拉取代码
只能使用LDAP的账号密码,不能使用GitLab Standard的账号。

git clone http://192.168.8.17:8888/project1/app1.git
13xxxxxxxx 密码是123456就能拉下来; 密码是123456789就不行。

image.png

你可能感兴趣的:(GitLab集成LDAP)