今日天气
  1. 博客/

部署 Devops 必备利器 OpenLdap

·953 字·2 分钟· ·
devops openldap centos7
Johny
作者
Johny
熟练的 云原生搬砖师
Table of Contents

环境说明:
#

  • 操作系统: Centos
  • Docker 版本: 19.03.8
  • 使用容器: osixia/phpldapadmin:latestosixia/openldap:latestgrams/ltb-self-service-password:latest

使用 docker-compose 部署 ldap
#

创建部署前所需的文件夹
#

mkdir -p /data/openldap/{data,config}

Docker-compose 部署
#

cat > docker-compose.yaml << EOF
version: "2"
services:
  openldap:
    container_name: "openldap"
    image: "osixia/openldap:latest"
    restart: always
    environment:
      LDAP_ORGANISATION: "openldap"
      LDAP_DOMAIN: "treesir.pub"
      LDAP_ADMIN_PASSWORD: "123456"
      LDAP_CONFIG_PASSWORD: "123456"
    volumes:
      - /data/openldap/data:/var/lib/ldap
      - /data/openldap/config:/etc/ldap/slapd.d
    ports:
      - '389:389'
  phpldapadmin:
    container_name: "phpldapadmin"
    image: "osixia/phpldapadmin:latest"
    restart: always
    links:
      - "openldap"
    environment:
      PHPLDAPADMIN_HTTPS: "false"
      PHPLDAPADMIN_LDAP_HOSTS: "openldap"
    ports:
      - '30004:80'
EOF

docker-compose 启动
#

docker-compose up -d

openLdap 目录结构的初始化
#

下面演示的的目录结构的创建,不一定适用于你们的环境,更具实际使用情况调整即可。

创建 users ou 组
#

image-20210304153242949

image-20210304153317510

image-20210304153335150

image-20210304153345469

创建 groups ou 组
#

上面 创建 users ou 组一样的

此时我们得到两个 ou组了,在接着创建 user & group

image-20210304153525116

创建 user 用户对象
#

image-20210304154011218

image-20210304154024308

选择创建 defuault 对象,这样的 好处 是我们可以自定义字段,将无用的字段进行排除 只保留有效的字段。。

找到 inetOrgPerson , 点击 Proceed

image-20210304154458948

image-20210304155017955

创建完成后选择提交,如果提交 没有任何响应,将最上面的对象设置为 cn

image-20210304155216888

创建 group 组对象,并将 用户拉入这个组中
#

image-20210304155549187

和上面一样,创建 default 对象

image-20210304154024308

找到 groupOfUniqueNames 点击创建

image-20210304155840895

image-20210304160001868

复制用户的信息,粘贴至 uniqueMember

image-20210304160137645

其他字段留空,点击并提交。

图片描述: image-20210304160222401.png

如需添加其他用户至这个组

image-20210304160550296

openLdap 优化
#

自助 修改密码服务 搭建
#

docker pull grams/ltb-self-service-password 

mkdir -p /etc/ldap-repasswd \
&& cd /etc/ldap-repasswd

wget https://cdn.treesir.pub/application/openldap/config.inc.php

vim config.inc.php  # 修改配置文件中 ldap 信息
$ldap_url = "ldap://192.168.8.1:389";
$ldap_starttls = false;
$ldap_binddn = "cn=admin,dc=treesir,dc=pub";
$ldap_bindpw = "123456";
$ldap_base = "dc=treesir,dc=pub";
$ldap_login_attribute = "uid";
$ldap_fullname_attribute = "cn";
$ldap_filter = "(&(objectClass=person)($ldap_login_attribute={login}))";

# 启动容器
docker run -p 8765:80 -d \
--restart always \
-v /etc/ldap-repasswd/config.inc.php:/usr/share/self-service-password/conf/config.inc.php \
--name ldap-repasswd \
grams/ltb-self-service-password

 # 如开启了 防火墙 需要将 端口 开放出来
firewall-cmd --zone=public --add-port=8765/tcp --permanent && firewall-cmd --reload

config.inc.php 配置文件为最基础配置,比如你需要配置 邮件通知密码的安全级别等高级功能请参考详细 文档

image-20210304152035767

使用脚本定期备份 ldap 数据
#

脚本如下所示:

#!/bin/bash

##########################################################
# Author        : LeafyJohn
# Email         : amoaloas@gmail.com
# Last modified : 2020-12-21 10:38:27
# Description   : openLdap backupup
# License: Attribution-NonCommercial 4.0 International
###########################################################
  
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
export PATH
BACKPATH=/data/rsyncd-backup/openldap
KEEPVERSION=30
function BACK() {
        ldapsearch -x -D "cn=admin,dc=treesir,dc=pub" -w '123456' -b 'dc=treesir,dc=pub' -LLL -H ldap://192.168.8.1 > "${BACKPATH}"/`date +"%Y%m%d"`.ldif
}

function CLEAR() {
        NUB=`ls "$BACKPATH"|wc -l`
        if [ "$NUB" -gt "$KEEPVERSION" ]
        then
                KEEP=`echo "$NUB - $KEEPVERSION"|bc`
                for DEL in `ls "$BACKPATH"|sort -nr 2>&1|tail -n "$KEEP"` 
                do
                        rm -rf  "$BACKPATH"/"$DEL"
                done
        fi
}


function main() {
        BACK
        CLEAR
}
main

配合 cron 进行定期执行

0 0 * * 1-5 bash /data/scripts/openldap-backup.sh >/dev/null 2>&1

数据恢复还原

数据恢复 此处省略,请此篇 文档

配置服务关联列表
#

Jenkins
#

jenkins 配置关联,在此篇 文档 中已有配置说明。

Gitlab
#

编辑 Gitlab 对应配置文件 gitlab.rb ,在最后面添加如下配置列即可

gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
    main: # 'main' is the GitLab 'provider ID' of this LDAP server
      label: 'LDAP'
      host: 'treesir.pub'
      port: 389 # usually 636 for SSL
      uid: 'uid' # This should be the attribute, not the value that maps to uid.
      # Examples: 'america\\momo' or 'CN=Gitlab Git,CN=Users,DC=mydomain,DC=com'
      bind_dn: 'cn=admin,dc=treesir,dc=pub'
      password: '123456'
      encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
      active_directory: false
      allow_username_or_email_login: false
      base: 'ou=users,dc=treesir,dc=pub'
      user_filter: ''
      attributes:
        username: ['uid', 'userid', 'sAMAccountName']
        email:    ['mail', 'email', 'userPrincipalName']
        name:       'cn'
        first_name: 'givenName'
        last_name:  'sn'
EOS

修改完成后,需要重载 Gitlab 使其配置文件生效, 不执行将导致不会生效

gitlab-ctl reconfigure

gitlab-ctl restart  # 重载配置 后 重启服务器生效

Rancher
#

Nexus
#

创建ldap 认证

image-20210528140743869

image-20210528140907136

image-20210528141034768

按照上面的配置连接后,记得进行 输入账号测试一下

image-20210528141157818

相关文章

Kind 部署本地k8s集群的使用记录
·326 字·1 分钟·
k8s docker devops centos7 kind
Docker Quickstart Redis Server
·174 字·1 分钟·
docker redis centos7
Docker 部署多网口 openWrt 软路由
·810 字·2 分钟·
openwrt linux centos7
kubernetes 集群中 控制平面 组件频繁发生重启的问题排查记录
·688 字·2 分钟·
k8s coredns flannel fix
Docker 部署的 openWrt 软路由, 并解决无法与宿主机通信问题
·923 字·2 分钟·
fix openwrt n1 docker-compose docker openwrt