企業實戰|LDAP對接Gitlab+Wiki+Jumpserver+Open***

不少公司內部都有Gitlab,Open***,Jumpserver,Jira,Jenkins,內部各類運維繫統等,每一個新員工入職,運維小馬就須要一個挨一個的登陸到每一個系統的後臺給新員工開通帳號,設置密碼,而後員工離職,小馬還得去到每一個系統後臺去關閉帳號,想一想多浪費時間,那麼能不能維護一套帳號,對全部系統生效呢?固然有,那就是 LDAP

LDAP 全稱輕量級目錄訪問協議(英文:Lightweight Directory Access Protocol),是一個運行在 TCP/IP 上的目錄訪問協議。目錄是一個特殊的數據庫,它的數據常常被查詢,可是不常常更新。其專門針對讀取、瀏覽和搜索操做進行了特定的優化。目錄通常用來包含描述性的,基於屬性的信息並支持精細複雜的過濾能力。好比 DNS 協議即是一種最被普遍使用的目錄服務。php


LDAP 中的信息按照目錄信息樹結構組織,樹中的一個節點稱之爲條目(Entry),條目包含了該節點的屬性及屬性值。條目均可以經過識別名 dn 來全局的惟一肯定1,能夠類比於關係型數據庫中的主鍵。好比 dn 爲 uid=ada,ou=People,dc=xinhua,dc=org 的條目表示在組織中一個名字叫作 Ada Catherine 的員工,其中 uid=ada 也被稱做相對區別名 rdn。git

一個條目的屬性經過 LDAP 元數據模型(Scheme)中的對象類(objectClass)所定義,下面的表格列舉了對象類 inetOrgPerson(Internet Organizational Person)中的一些必填屬性和可選屬性。docker

OpenLDAP 是 LDAP 協議的一個開源實現。LDAP 服務器本質上是一個爲只讀訪問而優化的非關係型數據庫。它主要用作地址簿查詢(如 email 客戶端)或對各類服務訪問作後臺認證以及用戶數據權限管控。(例如,訪問 Samba 時,LDAP 能夠起到域控制器的做用;或者 Linux 系統認證 時代替 /etc/passwd 的做用。shell

LDAP 術語

Entry (or object) 條目(或對象):LDAP中的每一個單元都認爲是條目。數據庫

dn:條目名稱。vim

ou:組織名稱。windows

dc:域組件。例如,likegeeks.com是這樣寫的:dc=likegeeks,dc=com。瀏覽器

cn:通用名稱,如人名或某個對象的名字安全

1、安裝OpenLDAP

# 環境說明:
OpenLdap服務器地址:100.111.21.68

一、使用docker方式安裝配置OpenLDAP

# 建立文件夾:
shell> mkdir -p /data/openldap/{config,database}

# 拉取openldap鏡像
shell > docker pull osixia/openldap:1.2.2

# 啓動openldap服務
shell> docker run -d --name ldap-service --hostname ldap-service -p 389:389 -p 689:689 -v /data/openldap/database:/var/lib/ldap -v /data/openldap/config:/etc/ldap/slapd.d --env LDAP_ORGANISATION="magedu.com" --env LDAP_DOMAIN="magedu.com" --env LDAP_ADMIN_PASSWORD="magedupassword" --env LDAP_TLS=false --detach osixia/openldap:1.2.2

# 啓動phpldapadmin圖形管理工具
shell > docker pull osixia/phpldapadmin:0.7.2

shell > docker run --name phpldapadmin-service -p 6443:443 -p 6680:80 --hostname phpldapadmin-service --link ldap-service:magedu.com --env PHPLDAPADMIN_LDAP_HOSTS=magedu.com --env PHPLDAPADMIN_HTTPS=false --detach osixia/phpldapadmin:0.7.2

二、訪問phpldapAdmin:

打開瀏覽器訪問:http://100.111.21.68:6680

帳號:cn=admin,dc=magedu,dc=com
密碼:magedupassword

三、登陸phpLdapAdmin添加ldap帳號

1.在瀏覽器中打開http://100.111.21.68:6680

2.點擊【建立新條目】.

3.點擊【Generic: Postfix Group.

4. 輸入【users, 點擊【建立對象】,建立一個組

5. 點擊【提交】

6. 下一步添加用戶,點擊剛纔所建立的組【users

7. 點擊【建立一個子條目】

8. 點擊【Generic: User Account】按鈕。

9.根據本身的狀況,添加信息而後點擊【建立對象】

10. 點擊【提交】

11.提交完成後,點擊新增的用戶,點擊右側【增長新的屬性】

12.選擇屬性【Email

13. 添好Email地址

14.點擊【Update Object


2、OpenLDAP+Gitlab配置

# 環境說明:
GitLab: 10.2.5
OpenLdap: 1.2.2

一、修改Gitlab配置文件

shell> vim /home/git/gitlab/config/gitlab.yml

ldap:
enabled: true
servers:
   label: 'LDAP'
   host: '100.111.21.68'
   port: 389
   uid: 'cn'
   encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
   verify_certificates: false
   ca_file: ''
   ssl_version: ''

   bind_dn: 'cn=admin,dc=magedu,dc=com'
   password: 'magedupassword'
   timeout: 10
   active_directory: false
   allow_username_or_email_login: true
   block_auto_created_users: false
   base: 'dc=magedu,dc=com'
   user_filter: ''
   attributes:
     username: ['cn', 'uid', 'userid', 'sAMAccountName']
     email: ['mail', 'email', 'userPrincipalName']
     name:       'cn'
     first_name: 'givenName'

     last_name:  'sn'服務器


# 配置參數說明:
hostldap服務器地址
portldap服務端口
uid:以哪一個屬性做爲驗證屬性,能夠爲uidcn等,咱們使用uid
method:若是開啓了tlsssl則填寫對應的tlsssl,都沒有就填寫plain
bind_dnsearch搜索帳號信息的用戶完整bind(須要一個有read權限的帳號驗證經過後搜索用戶輸入的用戶名是否存在)
passwordbind_dn用戶的密碼,bind_dnpassword兩個參數登陸ldap服務器搜索用戶
active_directoryLDAP服務是不是windowsAD,咱們是用的openldap,這裏寫false
allow_username_or_email_login:是否容許用戶名或者郵箱認證,若是是則用戶輸入用戶名或郵箱均可
base:從哪一個位置搜索用戶,例如容許登陸gitlab的用戶都在ou gitlab裏,name這裏能夠寫ou=gitlab,dc=domain,dc=com
filter:添加過濾屬性,例如只過濾employeeTypedeveloper的用戶進行認證(employeeType=developer

重啓gitlab服務,看到頁面已經有ldap的登陸選項了

3、OpenLDAP+Confluence(Wiki)配置

環境說明:
Confluence: 5.6.6
OpenLdap: 1.2.2

一、使用管理員登陸Confluence

依次點擊:通常配置-->用戶&安全-->用戶目錄–添加目錄-->LDAP-->Openldap
名稱:LDAP服務器
目錄類型:OpenLDAP
主機名:100.111.21.68
端口:389
帳號:cn=admin,dc=magedu,dc=com
密碼:magedupassword
基礎DNdc=magedu,dc=com
附加用戶DN:不用寫
附加組DN:不用寫

- LDAP權限:只讀,且爲本地組
(從LDAP服務器上檢索到的用戶、用戶組及成員,且沒法在Confluence中修改。你能夠將LDAP的用戶添加到維護在Confluence內部目錄的用戶組中。)

默認組成員:confluence-users
(首次登錄系統後,將添加的組成員列表,且每一個成員以逗號分開。若是不存在該組,則會自動建立這個組。這裏意思是openldap的用戶登陸confluence的時候默認加入到哪一個組裏面,confluence-users組是confluence的默認普通用戶權限組,登陸後會自動加入到這個組裏面)

- 設置用戶模式
用戶名屬性:cn
用戶名RDN屬性:cn
用戶名字屬性:givenName
用戶姓氏屬性:sn
用戶顯示名屬性:displayName
用戶郵箱: Email
用戶密碼屬性: Password
用戶密碼加密:MD5

二、配置完成後,點擊快速測試

- 若是測試成功,會提示:
測試成功
這裏僅測試此服務器可鏈接且認證信息正確。保存設置後您可點擊 瀏覽目錄 頁面的 「測試」 鏈接能夠進行更全面的測試.

4、OpenLDAP+Jumpserver配置

一、登陸jumpserver設置ldap

 
 

- 系統設置 - LDAP設置


LDAP地址:ldap://100.111.21.68:389
綁定DNcn=admin,dc=magedu,dc=com
密碼:magedupassword
用戶OUdc=magedu,dc=com
用戶過濾器:(cn=%(user)s)
LDAP屬性映射:{"username": "cn", "name": "sn", "email": "mail"}

啓用LDAP認證:打勾

二、配置完成後,重啓jumpserver

重啓jumpserver容器使用ldap用戶直接登陸系統

5、Openldap+Open***配置

# 環境說明:
OpenLdap: 1.2.2
open***-2.4.6
open***-auth-ldap-2.0.3

一、安裝open***須要的依賴包

shell> yum install open***-auth-ldap

二、編輯配置文件

#編輯ldap文件
shell> vi /etc/open***/auth/ldap.conf

<LDAP>
       URL             ldap://100.111.21.68:389
       BindDN          cn=admin,dc=magedu,dc=com
       Password        magedupassword
       Timeout         15
       TLSEnable       no
       FollowReferrals no
</LDAP>

<Authorization>
       BaseDN          "dc=magedu,dc=com"
       SearchFilter    "cn=%u"
       RequireGroup    false

       <Group>
               BaseDN          "cn=users,dc=magedu,dc=com"
               SearchFilter    "cn=***"
               MemberAttribute memberUid
       </Group>
</Authorization>


# 編輯open***的配置文件/etc/open***/server.conf
shell> vim /etc/open***/server.conf

port 1194
proto tcp
dev tun
ca keys/ca.crt
cert keys/***01.magedu.com.crt
key keys/***01.magedu.com.key  # This file should be kept secret
dh keys/dh2048.pem
server 100.15.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.0.0.0 255.0.0.0"
push "route 100.64.0.0 255.192.0.0"
client-to-client
keepalive 10 120
persist-key
persist-tun
status /var/log/open***/open***-status.log
log         /var/log/open***/open***.log
log-append  /var/log/open***/open***.log
verb 4

plugin /usr/lib64/open***/plugin/lib/open***-auth-ldap.so "/etc/open***/auth/ldap.conf"
client-cert-not-required

三、客戶端的配置調整以下:

client
dev tun

proto tcp


# ***外網ip

remote 61.20.90.111 1194
# nobind
persist-key
persist-tun

<ca>
-----BEGIN CERTIFICATE-----
MIIEsDCCA5igAwIBAgIJAOToyUe9fEooMA0GCSqGSI
EQfFmb3QRtwjazDHgaNc9FyVPsUY3iS7wnikXle4wS/rpdjBZWnw4XACnrpyo
2j6s1WkgSTx0h43MbKmipHbe9WRfdVO5MC72KMf7VSXZDCeYE5o8v45H4UcUtxup
MQ0wCwYDVQQLEwR0ZWNRMwEQYDVQQDEwp2aWRlb2
EQfFmb3QRtwjazDHgaXjoNc9FyVPsUY3iS7wnikXle4wS/rpdjBZWnw4XACnrpyo
2j6s1WkgSTx0h43MbKmipHbe9WRfdVO5MC72KMf7VSXZDCeYE5o8v45H4UcUtxup
MQ0wCwYDVQQLEwR0ZWNoMQYDVQQDEwp2aWRlb2
EQfFmb3QRtwjazDHgaXjoNc9FyVPsUY3iS7wnikXle4wS/rpdjBZWnw4XACnrpyo
2j6s1WkgSTx0h43MbKmHbe9WRfdVO5MC72KMf7VSXZDCeYE5o8v45H4UcUtxup
MQ0wCwYDVQQLEwR0ZWNoMRMwEQYDVQQDEwp2aWRlb2
EQfFmb3QRtwjazDHgaXjoNc9FyVPsUY3iS7wnikXle4wS/rpdjBZWnw4XACnrpyo
2j6s1WkgSTx0h43MbKmipHbe9WRfdVO5MC72KMf7VSXZDCeYE5o8v45H4UcUtxup
7B47Mg==

-----END CERTIFICATE-----

</ca> # ns-cert-type server

auth-user-pass
remote-cert-tls server
verb 4
auth-user-pass是新加入的配置開啓了用戶名密碼認證

6、配置過程當中可能會遇到的問題

若是報以下錯誤

由於 Undefined method `provider' for nil:nilclass,因此您沒法從 Ldapmain 得到受權。
(也有網友登陸的時候報 Could not authorize you from LDAP because (ldap) account must provide a dn,uid and email address)

這是由於Gitlab要求有email屬性
因此須要添加email

登陸phpldapadmin管理,http://ldap-server/phpldapadmin/
給用戶添加email屬性便可
相關文章
相關標籤/搜索