LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。
在这里我需要在服务器上配置好LDAP,我的环境还是Ubuntu。

安装

直接就能安装

apt-get install slapd ldap-utils migrationtools 然后执行

dpkg-reconfigure slapd

之后按照提示一步一步走,可以按照参考链接的第一条做。

Ldap 认证明文 ldap认证方式_用户认证


Ldap 认证明文 ldap认证方式_Linux认证_02


Ldap 认证明文 ldap认证方式_LDAP_03


Ldap 认证明文 ldap认证方式_LDAP_04


Ldap 认证明文 ldap认证方式_LDAP_05


Ldap 认证明文 ldap认证方式_Linux认证_06


配置好了如下图所示

Ldap 认证明文 ldap认证方式_shell脚本_07


执行查看是否正确输出

ldapsearch -x -b dc=nodomain

Ldap 认证明文 ldap认证方式_用户认证_08


如果没有检查是否没有开始服务

/etc/init.d/slapd start

操作

然后就可以进行相关操作了

添加

编写文件如下

//File:lpad_data.ldif

dn: ou=People,dc=nodomain
objectClass:organizationalUnit
ou: People

dn: ou=Groups,dc=nodomain
objectClass: organizationalUnit
ou: Groups

dn: cn=DEPARTMENT,ou=Groups,dc=nodomain
objectClass: posixGroup
cn: SUBGROUP
gidNumber: 5000

dn: uid=USER,ou=People,dc=nodomain
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: USER
sn: LASTNAME
givenName: FIRSTNAME
cn: FULLNAME
displayName: DISPLAYNAME
uidNumber: 10000
gidNumber: 5000
userPassword: USER
gecos: FULLNAME
loginShell: /bin/bash
homeDirectory: USERDIRECTORY

ldapadd -x -D cn=admin,dc=nodomain -W -f ldap_data.ldif 输入密码之后,就可以看到成功添加了一条数据

Ldap 认证明文 ldap认证方式_Ldap 认证明文_09

查询

执行如下命令可以查询出当前域的所有信息吧好像

ldapsearch -x -b dc=nodomain

Ldap 认证明文 ldap认证方式_shell脚本_10


执行如下命令进行数据的查询

ldapsearch -x -b dc=nodomain ‘uid=USER’

Ldap 认证明文 ldap认证方式_Ldap 认证明文_11


执行如下命令可以获取指定的数据

ldapsearch -x -LLL -b dc=nodomain ‘uid=USER’ cn gidNumber uidNumber

Ldap 认证明文 ldap认证方式_LDAP_12

删除数据

我总算会删除了,删了一下午,里面的参数吧,-w后面接的是之前设好的密码,也可以不写,然后会提示输入密码的,这里’uid=USER,ou=People,dc=nodomain’的内容是上面的.ldif文件的第一行吧,这样的,必须得一样

ldapdelete -x -D “cn=admin,dc=nodomain” -w root ‘uid=USER,ou=People,dc=nodomain’ 如果成功了应该不会有回显的,不成功的话,会提示报错,比如

ldap_bind: Invalid credentials (49)

这个问题有可能是密码错了,检查一下-w后面接的参数对不对。

之后在此查询一下

ldapsearch -x -b “dc=nodomain” -D “cn=admin.dc=nodomain” ‘uid=USER’ -w root

可以看到已经查找不出来数据了,说明删除了

Ldap 认证明文 ldap认证方式_shell脚本_13

修改

在修改前先查看一下信息

ldapsearch -x -b dc=nodomain ‘uid=USER’

Ldap 认证明文 ldap认证方式_Linux认证_14


在此准备将这个人的sn姓修改一下,修改同样需要一个LDIF文件,可以根据需求做修改

//File:ldap_modify.ldif
dn: uid=USER,ou=People,dc=nodomain
changetype: modify
replace: sn
sn: LASTNAME_Modified

执行

ldapmodify -a -D cn=admin,dc=nodomain -w root -f ldap_modify.ldif

Ldap 认证明文 ldap认证方式_Ldap 认证明文_15


千万不要这么使用:ldapmodify -a -D “uid=USER,ou=People,dc=nodomain” -w root -f ldap_modify.ldif,否则会一直报错ldap_bind: Invalid credentials (49)

执行ldapsearch -x -b dc=nodomain ‘uid=USER’

再次查看信息,通过对比可以看出sn已经做了修改

Ldap 认证明文 ldap认证方式_LDAP_16


关于修改,可以查看参考链接里面的信息

编写

关于IDLF文件的编写,这是一个树结构,大致如下

Ldap 认证明文 ldap认证方式_用户认证_17


一些关键字如下

Ldap 认证明文 ldap认证方式_Ldap 认证明文_18

Shell

在此可以先了解一下shell脚本,因为ldap的命令又长又难记,写一个脚本会方便很多的。
它是一个脚本,并不能作为正式的编程语言。因为是跑在linux的shell中,所以叫shell脚本。说白了,shell脚本就是一些命令的集合。举个例子,我想实现这样的操作:1)进入到/tmp/目录;2)列出当前目录中所有的文件名;3)把所有当前的文件拷贝到/root/目录下;4)删除当前目录下所有的文件。简单的4步在shell窗口中需要你敲4次命令,按4次回车。这样是不是很麻烦?当然这4步操作非常简单,如果是更加复杂的命令设置需要几十次操作呢?那样的话一次一次敲键盘会很麻烦。所以不妨把所有的操作都记录到一个文档中,然后去调用文档中的命令,这样一步操作就可以完成。其实这个文档呢就是shell脚本了,只是这个shell脚本有它特殊的格式。
Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已。所以,以后你发现了.sh为后缀的文件那么它一定会是一个shell脚本了。test.sh中第一行一定是 “#! /bin/bash” 它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行,’#’表示注释。
运行的话直接sh xx.sh即可,也可以通过./ss.sh运行,但是好像需要什么权限。
下面是我写的一个在这里能用得到的一个脚本,他的功能就是执行这四条语句,删除域中的信息。

#! /bin/bash
date
ldapdelete -x -D "cn=admin,dc=nodomain" -w root 'ou=People,dc=nodomain'
ldapdelete -x -D "cn=admin,dc=nodomain" -w root 'uid=TomBlack,ou=People,dc=nodomain'
ldapdelete -x -D "cn=admin,dc=nodomain" -w root 'cn=DEPARTMENT,ou=GROUPS,dc=nodomain'
ldapdelete -x -D "cn=admin,dc=nodomain" -w root 'ou=GROUPS,dc=nodomain'

IDLF

编写测试ldif文件,具体怎么写可以百度一下或者在参考链接里面找找有没有能用的

//File:ldap_test.ldif
dn: ou=People,dc=nodomain
objectClass: organizationalUnit
ou: People

dn: ou=Groups,dc=nodomain
objectClass: organizationalUnit
ou: Groups

dn: cn=DEPARTMENT,ou=Groups,dc=nodomain
objectClass: posixGroup
gidNumber: 5000

dn: uid=TomBlack,ou=People,dc=nodomain
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: Tom Black
uid: TomBlack
sn: Black
givenName: Tom
uidNumber: 10000
gidNUmber: 5000
mail: TomBlack@126.com
telephoneNumber: 15809281414
UserPassword: TomBlack
displayName: DISPLAYNAME
loginShell: /bin/bash
homeDirectory: USERDIRECTORY

之后执行

ldapadd -x -D cn=admin,dc=nodomain -w root -f ldap_test.ldif 可以看到成功添加新条目

Ldap 认证明文 ldap认证方式_用户认证_19


查看一下

ldapsearch -x -b dc=nodomain ‘uid=TomBlack’

可以看到

Ldap 认证明文 ldap认证方式_Ldap 认证明文_20


也可以通过在后面添加参数,查看具体的数据值。

强烈建议直接复制指令,因为我自己瞎折腾写命令因为记错了,所以错了好久