前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第二章 OpenLDAP运维管理

第二章 OpenLDAP运维管理

原创
作者头像
Jerly.Yan
修改2023-07-18 17:49:05
1.4K0
修改2023-07-18 17:49:05
举报

1.OpenLdap GUI 管理工具

1.1通过phpLDAPadmin 管理OpenLDAP

phpLDAPadmin 是一款LDAP GUI客户端管理软件,它提供一个简单并且支持多种语言的LDAP管理软件。

1.添加OU

添加ou
添加ou

选择ou
选择ou

添写OU名称
添写OU名称

创建 Posix Group组

创建group
创建group
group 名称
group 名称

创建用户

注:默认情况下openldap的用户组属性是Posixgroup,Posixgroup用户组属性和用户没有实际的对应关系。如果我们一定要把Posixgroup和user对应起来的话,就需要单独把用户设置到Posixgroup中,将Posixgroup和user 关联起来。

添加memberUID属性。将用户与组关联起来

找到Posixgroup 用户组,

将用户与group关联起来

注意:

以上设置基本可以满足大部分业务场景的需要,但是如果我们需要根据用户组来过滤用户的话,Posixgroup用户组属性,是无法满足需要的。比如,confluence 、jira与openldap集成时,以用户组过淲用户时,Posixgroup用户组属性是无法满足的。需要用GroupOfUniqueNames用户组属性。

创建GroupOfUniqueNames用户组属性

添加用户到GroupOfUniqueNames用户组

1.2通过LDAP admin 工具管理OpenLDAP

LDAP admin,是一款在windows 平台下用于对OpenLDAP目录树条目进行管理的编辑程序。通过LDAP Admin程序,可以对目录树条目灵活地修改。

1. LDAP Admin 获取与安装

下载地址 :http://www.ldapadmin.org/download/ldapadmin.html

目前最新版本为1.83

LDAP Admin安装非常简单 ,下载后直接解压,双运行即可。

2.LDAP Admin程序使用

3.新建OU

4.新建用户

设置用户密码

创建groupOfNames Group

2.openldap命令管理

Openldap 管理命令汇总

  • ldapsearch:搜索Openldap 目录树条目。
  • ldapadd: 通过LDIF格式,添加目录树条目。
  • ldapdelete:删除OpenLDAP 目录树条目。
  • ldapmodify:修改OpenLDAP目录树条目。
  • ldapwhoami:检验OpenLDAP 用户的身份。
  • ldapmodrdn:修改OpenLDAP目录树DN条目。
  • ldappasswd:修改OpenLDAP目录树用户条目实现密码重置
  • slapindex:创建OpenLDAP目录树索引,提高查询效率。
  • slapcat:将数据条目转换为OpenLDAP的LDIF文件。

2.1 ldapadd命令

ldapadd命令 用于通过 LDIF格式添加目录树条目。ldapadd在功能上等同于ldapmodify -a命令。

a.创建ou案例

代码语言:javascript
复制
cat > ou.ldif << EOF
dn: ou=People,dc=daemon,dc=com
ou: People
objectClass: organizationalUnit
objectClass: top
EOF

创建一个名为People的OU条目

代码语言:javascript
复制
ldapadd -x -D "cn=admin,dc=daemon,dc=com" -w 'Admin@123#!' -f ou.ldif

ldapadd参数说明:

  • -x :使用简单的认证
  • -D:指定查找的DN,DN是整个OpenLDAP树的唯 一识别名称
  • -w :后面跟ldap管理员的密码。
  • -W:提示输入密码
  • -f:使用目标文件名作为命令的输入。

b.创建GroupOfUniqueNames用户组案例

代码语言:javascript
复制
cat > group.ldif << EOF 
dn: cn=华南事业部,ou=shangjiankeji,dc=daemon,dc=com 
cn: 华南事业部
objectClass: top
objectClass: groupOfUniqueNames
uniqueMember:
EOF

创建一个华南事业部的group

ldif中的参数详解

  • cn:为group名称:
  • ou 为group所在的shangjiankeji OU(此OU的条目是已经存在的,否则创建失败)。
  • objectClass :组的对象属性(groupOfUniqueNames和top)
  • uniqueMember:为group下归属用户,这里可以为空。
代码语言:javascript
复制
ldapadd -x -D "cn=admin,dc=daemon,dc=com" -w 'Admin@123#!' -f group.ldif

c.创建一个用户案例

代码语言:javascript
复制
cat > user.ldif << EOF
dn: uid=zhangsan,ou=People,dc=daemon,dc=com
cn: 张三
displayName: 张三
objectClass: top
objectClass: organizationalperson
objectClass: inetorgperson
bjectClass: posixaccount 
loginShell: /sbin/nologin 
givenName: 三 
sn: 张 
homeDirectory: /home/zhangsan 
uid: zhangsan 
mail: zhangsan@daemon.com 
mobile: 0 
uidNumber: 1016 
gidNumber: 0 
userPassword: {MD5}4QrcOUm6Wau+VuBX8g+IPg== EOF

创建一个名称张三的用户。

ldif文件中的参数详解:

  • uid:表示用户名;
  • cn:用户姓名;
  • displayName:为用户的显示名称;
  • objectClass :用户对象属性(organizationalperson,inetorgperson,posixaccount)
  • loginShell: 用户登录shell;
  • givenName:用户的名;
  • sn:为用户的姓;
  • homeDirectory:用户的家目录 ;
  • mail :用户的邮箱;
  • mobile:用户的手机号(不能为空值)
  • uidNumber:用户uid(必须唯 一);
  • gidNumber:用户组ID(可以为0,但不能为空);
  • userPassword:用户密码(这里使用MD5进行了加密码,此值 为123456)
代码语言:javascript
复制
ldapadd -x -D "cn=admin,dc=daemon,dc=com" -w 'Admin@123#!' -f user.ldif

d.将用户加入group案例

代码语言:javascript
复制
cat > add-group.ldif << EOF
dn: cn=华南事业部,ou=shangjiankeji,dc=daemon,dc=com
changetype: modify
add: uniqueMember
uniqueMember: uid=zhangsan,ou=People,dc=daemon,dc=com
EOF

将uid为zhangsan的用户加入华南事业部的组中。

ldif文件中的参数详解:

  • cn:为group名称;
  • ou:为该组的上级OU;
  • changetype:指定更改类型 ,这里为modify。
  • add :为添加uniqueMember
  • uniqueMember:指定uniqueMember 中的用户条目,如果有多个用户需要添加到该 group ,可以再增加一行uniqueMember 即可。
代码语言:javascript
复制
ldapadd -x -D "cn=admin,dc=daemon,dc=com" -w 'Admin@123#!' -f add-group.ldif

2.2 ldapsearch命令

ldapsearch 命令可根据用户定义的:查询条件,对OpenLDAP目录树进行查找以及检索目录树相关条目。在维护OpenLDAP服务器,会经常用到此命令。

ldapserach常用参数

  • -b<searchbase>:指定查找点
  • -D<binddn>:指定查找的DN,DN是整个OpenLDAP树的唯一识别名称,类似于系统中根的概念。
  • -v: 详细输出信息。
  • -x:使用简单认证.
  • -W:查询时输入密码,如果不想输入密码,使用-w password 即可。
  • -h:使用指定的ldap host,也可使用FQDN或IP地址。
  • -H:使用LDAP服务器的URI地址操作。(格式为:ldap:// 或加密的 ldaps:// )
  • -p:指定OpenLDAP监听的端口(默认端口为:389,加密端口为636)

a. 查询 People OU下的所有用户信息

代码语言:javascript
复制
ldapsearch -x -D "cn=admin,dc=daemon,dc=com" -H ldap://ldap.ops.prod.daemon.tech -b "ou=People,dc=daemon,dc=com" -w 'Admin@123#!'

b. 些参数以及过滤条件查看用户信息。例如:查看当前openLDAP目录树中uid 为zhangsan的用户信息。

代码语言:javascript
复制
ldapsearch -x -D "cn=admin,dc=daemon,dc=com" -H ldap://ldap.ops.prod.daemon.tech -b "ou=People,dc=daemon,dc=com" -w 'Admin@123#!' uid=zhangsan -LLL

参数详解:

  • uid:为过滤条件uid=zhangsan
  • -LLL :为禁止输出与过滤条件不匹配的信息

2.3 ldapdelete 命令

ldapdelete 命令用于从目录树中删除指定条目,并根据DN条目删除一个或多个条目,但必须提供所要删除指定条目的权限所绑定的DN(整个目录树的唯一标识名称)。

ldapdelete常用参数详解:

  • -c:持续操作模式,例如在操作过程中出现错误,也会进行后续相关操作。
  • -D<binddn>:指定查找的DN,DN是整个OpenLDAP树的唯一识别名称,类似于系统中根的概念。
  • -n: 显示正在进行的相关操作,但不实际修改数据,一般用于测试。
  • -x:使用简单的认证。
  • -f:使用目标文件名作为命令的输入
  • -W:提示输入密码,如果不想输入密码,使用-w password 即可。
  • -y passwdfile:可以通过将密码写在文件里进行简单验证。
  • -r:递归删除,这个操作会从目录树删除指定 的DN的所有子条目 。
  • -h:使用指定的ldap host,也可使用FQDN或IP地址。
  • -H:使用LDAP服务器的URI地址操作。(格式为:ldap:// 或加密的 ldaps:// )
  • -p: 指定OpenLDAP监听的端口(默认端口为:389,加密端口为636)

a.删除 一个uid为zhangyi的用户

代码语言:javascript
复制
ldapdelete -x -w Admin@123#! -D 'cn=admin,dc=daemon,dc=com' 'uid=zhangyi,ou=People,dc=daemon,dc=com'

2.4 重置openldap管理员密码

代码语言:javascript
复制
ldapsearch -H ldapi:// -LLL -Q -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" dn olcRootDN olcRootPW 

#新密码的加密码

代码语言:javascript
复制
slappasswd -s qwe123
#{SSHA}jSFl8Pzu0p/BOzDyx0WPYVlaO18EkI1E

#重置密码为 qwe123

代码语言:javascript
复制
cat << EOF | ldapadd -Y EXTERNAL -H ldapi:///
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}jSFl8Pzu0p/BOzDyx0WPYVlaO18EkI1E
EOF

3.OpenLdap 备份还原

3.1 本地备份方案

方案一、通过 slapcat 进行本地备份

代码语言:javascript
复制
slapcat -n -2 -l /data/backup/openldap-backup.ldif

参数说明:

  • -n 表示配置文件中列出的第 dbnum 个数据库生成输出。第一个数据库,所以使用 -n 0 来选择它。默认Centos 7 安装的ldap为2
  • -l 将 LDIF 写入指定文件。

恢复步骤:

注意:我们恢复的openldap数据,一定是在原来openldap服务所在的服务器上。

代码语言:javascript
复制
systemctl stop slapd
rm -fr /var/lib/ldap/*
slapadd -l /data/backup/openldap-backup.ldif

注:/var/lib/ldap为ldap 数据存储目录

代码语言:javascript
复制
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG chown ldap:ldap -R /var/lib/ldap/
systemctl start slapd
systemctl status slapd

验证:登ldap 管理平台

方案二: 通过 ldapsearch 备份

代码语言:javascript
复制
ldapsearch -x -D cn=admin,dc=daemon,dc=com -w 'Admin@123#!' \ -b dc=daemon,dc=com -LLL -H ldap://127.0.0.1 > ldapbackup_daemon.ldif

恢复openldap

注意:我们恢复的openldap数据,一定是在原来openldap服务所在的服务器上。

操作步骤:

停止服务,删除原来的openldap数据

代码语言:javascript
复制
systemctl stop slapd
 rm -fr /var/lib/ldap/*

需要通过ldapadd 命令进行恢复

代码语言:javascript
复制
systemctl start slapd 
ldapadd -x -D cn=admin,dc=daemon,dc=com -w 'Admin@123#!' -f ldapbackup_daemon.ldif
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG 
chown ldap:ldap -R /var/lib/ldap
systemctl restart slapd

3.2 LDAP 迁移

环境准备:

迁移服务器已经安装ldap软件,实际上迁移服务器已经配置好了服务,缺少的是原ldap的数据。

1.安装 ldap (在迁移服务器上安装)

代码语言:javascript
复制
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools

2.备份源端的LDAP

代码语言:javascript
复制
tar -czf ldap.tar.gz /var/lib/ldap
tar -czf openldap.tar.gz /etc/openldap

3.在迁移服务器执行

还原数据

代码语言:javascript
复制
systemctl stop slapd
rm -rf /var/lib/ldap
rm -rf /etc/openldap
tar -zxf ldap.tar.gz -C /var/lib/ldap
tar -zxf openldap.tar.gz –C /etc/
chown -R ldap.ldap /var/lib/ldap

启动服务

代码语言:javascript
复制
systemctl start slapd

注意:

如果源端开启了openldap TLS加密,需要重新签新的证书至迁移服务器,并开启openldap TLS 加密 。

开启openldap TLS加密

vim /etc/sysconfig/slapd

重启

代码语言:javascript
复制
systemctl restart slapd

登录ldapadmin客户端进行认证。

4.LDAP 监控

主从监控主要是看contextCSN 的值是否对齐。

通过 查看每个节点的contextCSN 的值

代码语言:javascript
复制
ldapsearch -xLLL -H ldap://172.28.1.6 -D cn=admin,dc=daemon,dc=com -b dc=daemon,dc=com -w Admin@123#! -s base contextcsn

生成监控脚本。

代码语言:javascript
复制
at >jiankong.sh EOF <<
basedn='dc=valuesimplex,dc=com'
adminpwd="Sjkj1212#!"
#获取每个节点的contextCSN 值 

masterCSN=$(ldapsearch -xLLL -H ldap://$MasterIP -D $dn -b $basedn -w $adminpwd -s base contextcsn |grep contextCSN |awk '{print $2}')

slaveCSN=$(ldapsearch -xLLL -H ldap://$SlaveIP -D $dn -b $basedn -w $adminpwd -s base contextcsn |grep contextCSN |awk '{print $2}')

#判断LDAP的状态
echo $masterCSN
echo $slaveCSN

if [ "$masterCSN" == "$slaveCSN" ];then

   onlineSyncStat=1
   echo "ldap 服务同步正常"
else
   onlineSyncStat=0
    echo "ldap 服务同步异常"
fi
EOF

执行jiankong脚本。

代码语言:javascript
复制
sh jiankong.sh

5.与OpeLDAP集成

5.1 Confluence接入OpenLdap

1.用管理员登录confluence

右上角选择 “设置 ” --“用户管理” ----“用户目录”

服务器配置

高级设置:

用户模式设置

组模式设置

成员模式设置:

2.使用ldap SSL连接

回到目录服务的服务器设置 ,勾选SSL即可。默认端口为636

点击测试时报如下错误:

此问题是由于自签名证书(CA 未对其进行签名)或 Java 信任库中不存在的证书链引起的。 Java 不信任该证书并且无法连接到应用程序

注:

  • jdk 8 的 java 信息库路径为:$JAVA_HOME/jre/lib/security/cacerts
  • jdk 11 的java 信任库路径为: $JAVA_HOME/lib/security/cacerts

将ca 公钥证书上传至confluence 服务器,执行以下命令即可。

先进行备份

代码语言:javascript
复制
cp $JAVA_HOME/jre/lib/security/cacerts $JAVA_HOME/jre/lib/security/cacerts_bak 

执行导入

代码语言:javascript
复制
keytool -importcert -keystore $JAVA_HOME/jre/lib/security/cacerts -file ca-bundle.crt 

参数说明:

  • -import 将已签名数字证书导入密钥库
  • -keystore keystore的存储路径
  • -file 证书名称

需要输入密码 changeit

如果报以下错误 ,说明已经存在同名的CA ,可以通过keytool -delete 进行删除 。重新导入证书

代码语言:javascript
复制
keytool -delete -alias mykey \
-keystore $JAVA_HOME/jre/lib/security/cacerts 

显示密钥库中的证书详细信息

代码语言:javascript
复制
keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts 

5.2 Jira接入OpenLdap

接入方法与confluene类似。

用jira管理员登录jira,选择右上角的设置---用户管理----用户目录

服务器设置

用户模式设置

组模式设置

成员模式设置:

使用ldap SSL进行连接

将ca 公钥证书上传至confluence 服务器,执行以下命令即可。

先进行备份

代码语言:javascript
复制
cp $JAVA_HOME/jre/lib/security/cacerts $JAVA_HOME/jre/lib/security/cacerts_bak 

执行导入

代码语言:javascript
复制
keytool -importcert -keystore $JAVA_HOME/jre/lib/security/cacerts -file ca-bundle.crt 

修改服务器配置: 将SSL勾选即可,默认端口为636

5.3 Jenkins接入OpenLDAP

前提条件:

请确认ldap 插件和Role-based Authorization Strategy 插件是否安装

选择系统管理---全局安全配置

选择LDAP 进行配置

连接 LDAP TLS 加密端口时,由于是自签名的证书,需要将LDAP自签的CA公钥 添加到JAVA的信任库中。

报错如下图所示:

在jenkins服务器下执行以下操作:

由于这里用的jdk版本为11,因此JAVA的cacerts证书库的路径为:

$JAVA_HOME/lib/security/cacerts

备份cacerts证书库

代码语言:javascript
复制
cp $JAVA_HOME/lib/security/cacerts $JAVA_HOME/lib/security/cacerts_1230bak 

导入cacerts证书库

代码语言:javascript
复制
keytool -importcert -keystore $JAVA_HOME/lib/security/cacerts -file ca-bundle.crt 

注:默认密码为:changeit

jenkins 接入ldap注意事项:

1. jenkins接入ldap后,原有的管理员账号将无法登录,需要使用ldap账号登录。

2. jenkins接入ldap后,ldap中的所有账号默认拥有jenkins所有管理权限。

需要进行授权管理,启用授权

5.4 OpenVPN接入 OpenLdap

1.启用ldap 认证

进入openvpn主配置文件 ,生成如下内容

代码语言:javascript
复制
vim /etc/openvpn/server.conf
……
# ldap认证
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf"
#  
reneg-sec 0

注:/etc/openvpn/auth/ldap.conf 为ldap 认证文件

2.编辑ldap 认证文件

代码语言:javascript
复制
<LDAP>
 # LDAP server URL
    URL     ldaps://ldap.ops.prod.daemon.tech:636
 # Bind DN (If your LDAP server doesn't support anonymous binds)
 # BindDN        uid=Manager,ou=People,dc=example,dc=com
        BindDN      cn=admin,dc=daemon,dc=com
 # Bind Password
    Password    Admin@123#!
 # Network timeout (in seconds)
    Timeout     15
    FollowReferrals yes
</LDAP>
<Authorization>
 # Base DN
    BaseDN      "ou=People,dc=daemon,dc=com"
 # User Search Filter
 #SearchFilter   "(&(uid=%u)(accountStatus=active))"
    SearchFilter    "(uid=%u)"
 # Require Group Membership
    RequireGroup    false
 # Add non-group members to a PF table (disabled)
 #PFTable    ips_vpn_users
    <Group>
        BaseDN      "ou=Groups,dc=example,dc=com"
        SearchFilter    "(|(cn=developers)(cn=artists))"
        MemberAttribute uniqueMember
 # Add group members to a PF table (disabled)
 #PFTable    ips_vpn_eng
    </Group>
</Authorization>

编辑 ldap.conf文件

代码语言:javascript
复制
vim /etc/openldap/ldap.conf
TLS_REQCERT never

重启 openvpn服务

代码语言:javascript
复制
systemctl restart openvpn@server.service

5.5 JumpServer 与OpenLDAP集成

以管理员身份登录JumpServer,进入系统设置---LDAP

LDAP服务器设置如下图:

LDAP 服务器

  • LDAP 地址 :ldaps://ldap.ops.prod.daemon.tech:636
  • 绑定 DN :cn=admin,dc=daemon,dc=com
  • 密码:LDAP管理员密码(Admin@123#!)

LDAP 用户

  • 用户 OU:ou=People,dc=daemon,dc=com
  • 用户过滤器:(uid=%(user)s)
  • 用户属性映射:{"username":"uid","name":"sn","email":"mail"}
  • 其它
  • 连接超时时间:5
  • 搜索分页数量:1000

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.OpenLdap GUI 管理工具
    • 1.1通过phpLDAPadmin 管理OpenLDAP
      • 1.2通过LDAP admin 工具管理OpenLDAP
      • 2.openldap命令管理
        • 2.1 ldapadd命令
          • 2.3 ldapdelete 命令
          • 3.OpenLdap 备份还原
            • 3.1 本地备份方案
            • 4.LDAP 监控
            • 5.与OpeLDAP集成
              • 5.1 Confluence接入OpenLdap
                • 5.2 Jira接入OpenLdap
                  • 5.3 Jenkins接入OpenLDAP
                    • 5.4 OpenVPN接入 OpenLdap
                      • 5.5 JumpServer 与OpenLDAP集成
                      相关产品与服务
                      数据保险箱
                      数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档