统计用户和组
user:
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
groups
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获取中文组织结构为加密过的字符串:
[root@localhost ldap]# echo "Y2496ZSA5ZSu566h55CG6YOoLG91PWdyb3VwcyxkYz1yZCxkYz1ob3BlcnVuLGRjPWNvbQ==" | perl -MMIME::Base64 -ne 'print decode_base64($_)'
cn=销售管理部,ou=groups,dc=rd,dc=hoperun,dc=com[root@localhost ldap]#
#!/bin/bash
basePath=$(cd `dirname $0`; pwd)
tmpDir="${basePath}/tmp"
dataFile=${tmpDir}/ldap.out
if [ ! -d "${tmpDir}" ]; then
mkdir ${tmpDir}
fi
ldapsearch -LLL -x -h 172.16.10.1** -b "ou=groups,dc=rd,dc=hoperun,dc=com" "(objectClass=posixAccount)" dn | grep -v "^$"> $dataFile
while read line
do
str=`echo $line | awk -F '::' '{print $1}'`
if [ "$str" == "dn" ]; then
result=`echo $line | awk '{print $2}' | perl -MMIME::Base64 -ne 'print decode_base64($_)'| iconv -f utf8 | sed 's/,/ /g' | awk '{$NF=$(NF-1)="";print}'`
else
result=`echo $line | awk '{print $2}' | sed 's/,/ /g' | awk '{$NF=$(NF-1)="";print}'`
fi
echo $result
done < $dataFile
objectClass: groupOfNames:添加组
[root@localhost group]# cat addgroup_groupOfNames.ldif
dn: cn=jettoapi_group1,ou=groups,dc=rd,dc=hoperun,dc=com
objectClass: groupOfNames
cn: jettomanager_group1
member: cn=root,ou=Users,dc=rd,dc=hoperun,dc=com
member: cn=admin,ou=Users,dc=rd,dc=hoperun,dc=com
member: cn=jettoapi_user2,ou=Users,dc=rd,dc=hoperun,dc=com
objectClass:posixGroup:方式添加组
[root@localhost group]# cat addgroup_posixGroup.ldif
dn: cn=test_group,ou=groups,dc=rd,dc=hoperun,dc=com
objectClass:posixGroup
objectClass:top
gidNumber:1001
cn: test_group
组中添加用户
[root@localhost group]# cat u2g.ldif
dn: cn=test_group,ou=groups,dc=rd,dc=hoperun,dc=com
changetype: modify
add: member
member: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
adduser.ldif addusermodify.ldif readme
[root@localhost ldap]# cat adduser.ldif
dn: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
cn: test
displayName: test
mail: test@hoperun.com
sn: test
uid: test
objectClass: inetOrgPerson
objectClass: top
userPassword: 123456aA
[root@localhost ldap]# cat addusermodify.ldif
dn: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
changetype: add
cn: test
displayName: test
mail: test@hoperun.com
sn: test
uid: test
objectClass: inetOrgPerson
objectClass: top
userPassword: 123456aA
[root@localhost ldap]# cat readme
add:
ldapadd -x -D cn=admin,dc=rd,dc=hoperun,dc=com -w 123456aA -f adduser.ldif
或
ldapmodify -a -x -D "cn=admin,dc=rd,dc=hoperun,dc=com" -w 123456aA -f adduser.ldif
或 注意修改addusermodify文件
ldapmodify -x -D "cn=admin,dc=rd,dc=hoperun,dc=com" -w 123456aA -f addusermodify.ldif
[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
delete:
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信息如下:
cat orgunits.ldif
加入组织People
dn: ou=People,dc=rd,dc=hoperun,dc=com
changetype: add
objectclass: top
objectclass: organizationalUnit
ou: People
加入组织Servers
dn: ou=Servers,dc=rd,dc=hoperun,dc=com
changetype: add
objectclass: top
objectclass: organizationalUnit
ou: Servers
组织Servers内加入人员test1
dn: cn=test1,ou=Servers,dc=rd,dc=hoperun,dc=com
changetype: add
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: test1
sn: test1
ou: Servers
description: beautiful
uid: test1
通过这个例子可以对LDIF进一步理解到可以是多段信息的结合,而在实际的项目中,对LDAP数据在不是很复杂的情况下,使用LIDF进行备份和恢复也是常用的方式。
ldapmodify:
[root@localhost ldap]# cat adduser.ldif
dn: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
cn: test
displayName: test
mail: test@hoperun.com
sn: test
uid: test
title: jettech
objectClass: inetOrgPerson
objectClass: top
userPassword: 123456aA
[root@localhost ldap]# ldapmodify -a -x -D "cn=admin,dc=rd,dc=hoperun,dc=com" -w 123456aA -f adduser.ldif
adding new entry "cn=test,ou=Users,dc=rd,dc=hoperun,dc=com"
[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
# extended LDIF
#
# LDAPv3
# base <ou=Users,dc=rd,dc=hoperun,dc=com> with scope subtree
# filter: cn=test
# requesting: ALL
#
# test, Users, rd.hoperun.com
dn: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
cn: test
displayName: test
mail: test@hoperun.com
sn: test
uid: test
title: jettech
objectClass: inetOrgPerson
objectClass: top
userPassword:: MTIzNDU2YUE=
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
修改title:注意修改说明都可以.我这里只是修改了title
cn: test
displayName: test
mail: test@hoperun.com
uid: test
objectClass: inetOrgPerson
objectClass: top
userPassword:: MTIzNDU2YUE=
title: test
sn: test
[root@localhost ldap]# cat modifyuser.ldif
dn: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
changetype: modify
replace: title
title: wubo
[root@localhost ldap]# ldapmodify -a -x -D "cn=admin,dc=rd,dc=hoperun,dc=com" -w 123456aA -f modifyuser.ldif
modifying entry "cn=test,ou=Users,dc=rd,dc=hoperun,dc=com"
[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
# extended LDIF
#
# LDAPv3
# base <ou=Users,dc=rd,dc=hoperun,dc=com> with scope subtree
# filter: cn=test
# requesting: ALL
#
# test, Users, rd.hoperun.com
dn: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
cn: test
displayName: test
mail: test@hoperun.com
sn: test
uid: test
objectClass: inetOrgPerson
objectClass: top
userPassword:: MTIzNDU2YUE=
title: wubo
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
添加字段:
[root@localhost ldap]# cat addmodifyuser.ldif
dn: cn=test,ou=Users,dc=rd,dc=hoperun,dc=com
changetype: modify
add: description
description: beijing description
[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.导出
一:导出数据
[root@localhost ldap]# slapcat -v -l back.ldif
2. 过滤ldif文件中多余部分
cat >slapcat.regex <<EOF
/^creatorsName: /d
/^createTimestamp: /d
/^modifiersName: /d
/^modifyTimestamp: /d
/^structuralObjectClass: /d
/^entryUUID: /d
/^entryCSN: /d
EOF
[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