• 使用ldapadd,ldapmodify,slapcat 进行数据增加,备份,导入导出数据


    统计用户和组 

    1. user:
    2. ldapsearch -x -D cn=admin,dc=rd,dc=hoperun,dc=com -w 123456aA -b "ou=Users,dc=rd,dc=hoperun,dc=com" cn | grep -v '#' | grep -v '^$' | grep -v dn | grep cn
    3. groups
    4. ldapsearch -x -D cn=admin,dc=rd,dc=hoperun,dc=com -w 123456aA -b "ou=groups,dc=rd,dc=hoperun,dc=com" cn | grep -v '#' | grep -v '^$' | grep -v dn | grep cn

    乱码问题ldapsearch获取中文组织结构为加密过的字符串:

    1. [root@localhost ldap]# echo "Y2496ZSA5ZSu566h55CG6YOoLG91PWdyb3VwcyxkYz1yZCxkYz1ob3BlcnVuLGRjPWNvbQ==" | perl -MMIME::Base64 -ne 'print decode_base64($_)'
    2. cn=销售管理部,ou=groups,dc=rd,dc=hoperun,dc=com[root@localhost ldap]#
    1. #!/bin/bash
    2. basePath=$(cd `dirname $0`; pwd)
    3. tmpDir="${basePath}/tmp"
    4. dataFile=${tmpDir}/ldap.out
    5. if [ ! -d "${tmpDir}" ]; then
    6. mkdir ${tmpDir}
    7. fi
    8. ldapsearch -LLL -x -h 172.16.10.1** -b "ou=groups,dc=rd,dc=hoperun,dc=com" "(objectClass=posixAccount)" dn | grep -v "^$"> $dataFile
    9. while read line
    10. do
    11. str=`echo $line | awk -F '::' '{print $1}'`
    12. if [ "$str" == "dn" ]; then
    13. result=`echo $line | awk '{print $2}' | perl -MMIME::Base64 -ne 'print decode_base64($_)'| iconv -f utf8 | sed 's/,/ /g' | awk '{$NF=$(NF-1)="";print}'`
    14. else
    15. result=`echo $line | awk '{print $2}' | sed 's/,/ /g' | awk '{$NF=$(NF-1)="";print}'`
    16. fi
    17. echo $result
    18. done < $dataFile

    objectClass: groupOfNames:添加组 

    1. [root@localhost group]# cat addgroup_groupOfNames.ldif
    2. dn: cn=jettoapi_group1,ou=groups,dc=rd,dc=hoperun,dc=com
    3. objectClass: groupOfNames
    4. cn: jettomanager_group1
    5. member: cn=root,ou=Users,dc=rd,dc=hoperun,dc=com
    6. member: cn=admin,ou=Users,dc=rd,dc=hoperun,dc=com
    7. member: cn=jettoapi_user2,ou=Users,dc=rd,dc=hoperun,dc=com

    objectClass:posixGroup:方式添加组 

    1. [root@localhost group]# cat addgroup_posixGroup.ldif
    2. dn: cn=test_group,ou=groups,dc=rd,dc=hoperun,dc=com
    3. objectClass:posixGroup
    4. objectClass:top
    5. gidNumber:1001
    6. cn: test_group

    组中添加用户 

    1. [root@localhost group]# cat u2g.ldif
    2. dn: cn=test_group,ou=groups,dc=rd,dc=hoperun,dc=com
    3. changetype: modify
    4. add: member
    5. member: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com

    1. adduser.ldif addusermodify.ldif readme
    2. [root@localhost ldap]# cat adduser.ldif
    3. dn: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
    4. cn: test
    5. displayName: test
    6. mail: test@hoperun.com
    7. sn: test
    8. uid: test
    9. objectClass: inetOrgPerson
    10. objectClass: top
    11. userPassword: 123456aA
    12. [root@localhost ldap]# cat addusermodify.ldif
    13. dn: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
    14. changetype: add
    15. cn: test
    16. displayName: test
    17. mail: test@hoperun.com
    18. sn: test
    19. uid: test
    20. objectClass: inetOrgPerson
    21. objectClass: top
    22. userPassword: 123456aA
    23. [root@localhost ldap]# cat readme
    24. add:
    25. ldapadd -x -D cn=admin,dc=rd,dc=hoperun,dc=com -w 123456aA -f adduser.ldif
    26. ldapmodify -a -x -D "cn=admin,dc=rd,dc=hoperun,dc=com" -w 123456aA -f adduser.ldif
    27. 或 注意修改addusermodify文件
    28. ldapmodify -x -D "cn=admin,dc=rd,dc=hoperun,dc=com" -w 123456aA -f addusermodify.ldif
    29. [root@localhost ldap]# ldapsearch -x -D cn=admin,dc=rd,dc=hoperun,dc=com -w 123456aA -b "ou=Users,dc=rd,dc=hoperun,dc=com" cn=test
    30. delete:
    31. ldapdelete -x -D cn=admin,dc=rd,dc=hoperun,dc=com -w 123456aA cn=test,ou=Users,dc=rd,dc=hoperun,dc=com

    在添加用户的时候关键的objectclass是inetOrgPerson,而对于添加部门,关键信息则为organisationalUnit,添加两个OrganisationUnit的LDIF信息如下:

    1. cat orgunits.ldif
    2. 加入组织People
    3. dn: ou=People,dc=rd,dc=hoperun,dc=com
    4. changetype: add
    5. objectclass: top
    6. objectclass: organizationalUnit
    7. ou: People
    8. 加入组织Servers
    9. dn: ou=Servers,dc=rd,dc=hoperun,dc=com
    10. changetype: add
    11. objectclass: top
    12. objectclass: organizationalUnit
    13. ou: Servers
    14. 组织Servers内加入人员test1
    15. dn: cn=test1,ou=Servers,dc=rd,dc=hoperun,dc=com
    16. changetype: add
    17. objectclass: person
    18. objectclass: organizationalPerson
    19. objectclass: inetOrgPerson
    20. cn: test1
    21. sn: test1
    22. ou: Servers
    23. description: beautiful
    24. uid: test1

    通过这个例子可以对LDIF进一步理解到可以是多段信息的结合,而在实际的项目中,对LDAP数据在不是很复杂的情况下,使用LIDF进行备份和恢复也是常用的方式。

    ldapmodify:

    1. [root@localhost ldap]# cat adduser.ldif
    2. dn: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
    3. cn: test
    4. displayName: test
    5. mail: test@hoperun.com
    6. sn: test
    7. uid: test
    8. title: jettech
    9. objectClass: inetOrgPerson
    10. objectClass: top
    11. userPassword: 123456aA
    12. [root@localhost ldap]# ldapmodify -a -x -D "cn=admin,dc=rd,dc=hoperun,dc=com" -w 123456aA -f adduser.ldif
    13. adding new entry "cn=test,ou=Users,dc=rd,dc=hoperun,dc=com"
    14. [root@localhost ldap]# ldapsearch -x -D cn=admin,dc=rd,dc=hoperun,dc=com -w 123456aA -b "ou=Users,dc=rd,dc=hoperun,dc=com" cn=test
    15. # extended LDIF
    16. #
    17. # LDAPv3
    18. # base <ou=Users,dc=rd,dc=hoperun,dc=com> with scope subtree
    19. # filter: cn=test
    20. # requesting: ALL
    21. #
    22. # test, Users, rd.hoperun.com
    23. dn: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
    24. cn: test
    25. displayName: test
    26. mail: test@hoperun.com
    27. sn: test
    28. uid: test
    29. title: jettech
    30. objectClass: inetOrgPerson
    31. objectClass: top
    32. userPassword:: MTIzNDU2YUE=
    33. # search result
    34. search: 2
    35. result: 0 Success
    36. # numResponses: 2
    37. # numEntries: 1

    修改title:注意修改说明都可以.我这里只是修改了title

    cn: test
    displayName: test
    mail: test@hoperun.com
    uid: test
    objectClass: inetOrgPerson
    objectClass: top
    userPassword:: MTIzNDU2YUE=
    title: test
    sn: test

    1. [root@localhost ldap]# cat modifyuser.ldif
    2. dn: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
    3. changetype: modify
    4. replace: title
    5. title: wubo
    6. [root@localhost ldap]# ldapmodify -a -x -D "cn=admin,dc=rd,dc=hoperun,dc=com" -w 123456aA -f modifyuser.ldif
    7. modifying entry "cn=test,ou=Users,dc=rd,dc=hoperun,dc=com"
    8. [root@localhost ldap]# ldapsearch -x -D cn=admin,dc=rd,dc=hoperun,dc=com -w 123456aA -b "ou=Users,dc=rd,dc=hoperun,dc=com" cn=test
    9. # extended LDIF
    10. #
    11. # LDAPv3
    12. # base <ou=Users,dc=rd,dc=hoperun,dc=com> with scope subtree
    13. # filter: cn=test
    14. # requesting: ALL
    15. #
    16. # test, Users, rd.hoperun.com
    17. dn: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
    18. cn: test
    19. displayName: test
    20. mail: test@hoperun.com
    21. sn: test
    22. uid: test
    23. objectClass: inetOrgPerson
    24. objectClass: top
    25. userPassword:: MTIzNDU2YUE=
    26. title: wubo
    27. # search result
    28. search: 2
    29. result: 0 Success
    30. # numResponses: 2
    31. # numEntries: 1

    添加字段:

    1. [root@localhost ldap]# cat addmodifyuser.ldif
    2. dn: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
    3. changetype: modify
    4. add: description
    5. description: beijing description
    6. [root@localhost ldap]# ldapmodify -a -x -D "cn=admin,dc=rd,dc=hoperun,dc=com" -w 123456aA -f addusermodify.ldif

    将test移动到ou=组中去

    LDAP基础:7:使用ldapmodify和ldapdelete进行修改或删除_淼叔的博客-CSDN博客_ldapmodify

    导入导出

    1.导出

    1. 一:导出数据
    2. [root@localhost ldap]# slapcat -v -l back.ldif

    2. 过滤ldif文件中多余部分

    1. cat >slapcat.regex <<EOF
    2. /^creatorsName: /d
    3. /^createTimestamp: /d
    4. /^modifiersName: /d
    5. /^modifyTimestamp: /d
    6. /^structuralObjectClass: /d
    7. /^entryUUID: /d
    8. /^entryCSN: /d
    9. EOF
    10. [root@localhost ldap]# cat back.ldif | sed -f slapcat.regex > back1.ldif

    3:导入数据

    ldapadd -H ldap://127.0.0.1 -x -D "用户" -f back1.idlf -w 密码

    4:查看结果
    ldapsearch -H ldap://127.0.0.1 -x -b "cn=admin,dc=rd,dc=hoperun,dc=com"

    5:总结
    注意过滤掉的ldif文件当中,可能还存在有多余部分,可能会导致导入失败,如果导入失败,请仔细查看文件中是否有多余部分,另外,导入的ldap数据库所拥有的目录结构必须与文件中的目录结构能够吻合,否则会出现no such object的错误。

    其他方案:

      [方法1]

      关闭:kill -9 `cat /var/run/slapd.pid`
      启动:/usr/sbin/slapd
      备份:/usr/sbin/slapcat>mail_ldap.ldif
      导入:ldapadd -x -D "cn=admin,dc=rd,dc=hoperun,dc=com" -w xxxx -v -f mail_ldap.ldif
      关闭模式导入:
      slapadd -l mail_ldap.ldif -f /etc/openldap/sladp.conf

      [方法2]

      系统突然掉电或重启引起LDAP数据库意外关闭造成的。

      进入ldap数据目录(/openldap/var/openldap-data),执行db_recover,再启动服务.

      /var/lib/ldap slapd db_recover

     [方法3]

          ldapsearch -x -b 'cn=admin,dc=rd,dc=hoperun,dc=com' -w xxxx > ldapbackup.ldif

  • 相关阅读:
    C语言描述数据结构 —— 二叉树(3)普通二叉树
    Android实验:Activity界面基础
    Javascript中扩展运算符的作用及使用场景
    opencv 进入源码的小技巧
    四旋翼无人机学习第7节--Si24R1以及RGBLED电路分析
    Java 日志框架,性能无敌横扫所有对手
    2023年9月国产数据库大事记-墨天轮
    产品经理撰写需求文档
    基于 PyTorch 和神经网络给 GirlFriend 制作漫画风头像
    分布式之日志系统平台ELK
  • 原文地址:https://blog.csdn.net/Michaelwubo/article/details/126746171