说一说我的openldap配置,由于我的虚拟机操作系统是银河麒麟(内核是ubuntu),因此,无法实现openldap的yum安装,结果导致了不知为何与网上大部分的文章所描述的文件结构不一致(slapd.d这个文件我搜了所有文件都没找见,只能去/usr/local/openldap/etc/openldap/slapd.conf来进行配置),毕竟我是开发人员,最后的目的是写出实现的代码,功力还是有些生疏。下面开始我的配置
首先进入上面的配置文件中,原文件如图
图片描述

将此配置文件下的schema/文件打开,将.schema文件都包含进去,然后再进入配置文件往下看,
图片描述

接下来添加

loglevel 256
logfile  /usr/local/openldap/var/slapd.log

用来生成日志(挺重要的,它可以让你更清晰它的运行流程及原理)。
接下来很重要,就是更改用户名及密码suffix,rootdn
图片描述

这两个相当与你的用户名,它们的重要性不言而喻。
rootpw 相当于你的密码,建议不要用明文,改为密文更安全,这里说一下,更改密码的url是在/usr/local/openldap/sbin中,因为在/usr/local/openldap/bin中也有相似的文件,当时一直在提示报错没找到原因(原谅我的生疏......).这种东西是搜不到的,切记切记。
更改密码命令
在sbin目录下

./slappasswd -h{SSHA}
输入密码(已翻译成中文...)
确认新密码(已翻译成中文...)

将{SSHA}的密文密码复制到配置文件中。
基本上配置就这样了,以后进行同步配置时再单独说。

说一下使用
配置完之后,启动slapd文件

/usr/local/openldap/libexec/slapd -d 256

图片描述

这个图片表示服务端启动成功
为了方便
可以下载一个客户端软件
我下的是ApacheDirectoryStudio 网址:http://directory.apache.org/s...
还挺好用
输入主机地址、用户、密码,检测连接,若没有问题,在服务端创建一个test.ldif文件。(注意网上添加这个文件数据是直接运行,当时想不通到底是在哪个目录下创建,后来敲了下面的ldapadd命令后顿悟应该与命令文件在同一目录下,即 /usr/local/openldap/bin下创建这个文件)

dn: dc=mydomain,dc=com
objectClass: dcObject
objectClass: organization
dc: mydomain
o: mydomain.Inc

dn: cn=Manager,dc=mydomain,dc=com
objectClass: organizationalRole
cn: Manager

dn: ou=itsection,dc=mydomain,dc=com
ou: itsection
objectClass: organizationalUnit

dn: cn=sean,ou=itsection,dc=mydomain,dc=com
ou: itsection
cn: sean
sn: zhouxiao
objectClass: inetOrgPerson
objectClass: organizationalPerson

插入数据

./ldapadd -x -D "cn=Manager,dc=mydomain,dc=com" -W -f test.ldif

服务端要你输入密码
只要不报错,服务端就没有问题。
然后观察客户端是否显示,若没问题,说明你的openldap运行无误。

关于自定义schema文件

这个真是一个坑,我刚开始只是单纯的以为只需要扩展个.schema文件,然后在openldap配置文件中给它include进去就行了,事实上真正定义.schema文件后就不这样想了,我先拿我配置的schema文件说一下:

attributetype ( 2017.1.4.1.0.1.1
    NAME 'servId'
    DESC 'RFC2256: servId'
    EQUALITY caseIgnoreMatch
    SUBSTR caseIgnoreSubstringsMatch
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
    SINGLE-VALUE )

attributetype ( 2017.1.4.1.0.1.2
    NAME 'servName'
    DESC 'RFC2256: servName'
    EQUALITY caseIgnoreMatch
    SUBSTR caseIgnoreSubstringsMatch
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
    SINGLE-VALUE )

attributetype ( 2017.1.4.1.0.1.3
    NAME 'servIp'
    DESC 'RFC2256: servIp'
    EQUALITY caseIgnoreMatch
    SUBSTR caseIgnoreSubstringsMatch
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
    SINGLE-VALUE )

attributetype ( 2017.1.4.1.0.1.4
    NAME 'servPid'
    DESC 'RFC2256: servPid'
    EQUALITY caseIgnoreMatch
    SUBSTR caseIgnoreSubstringsMatch
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
    SINGLE-VALUE )

objectclass ( 2017.1.4.1.0.1
    NAME 'globalserver'
    DESC 'RFC2798: globalserver'
    SUP top STRUCTURAL
    MUST servId
    MAY (
        servName $ servIp $ servPid)
    )

第一个坑:就是你的SYNTAX、EQUALITY、SUBSTR一定要与标准匹配,实在不行网上搜去查找(为了这个匹配不知道我是怎么到网上一个一个的文件试的....说多了都是泪)。网上的很多都是错误的,总之要勤快一点。
第二个坑:就是你自定义的属性一定不能跟内置的属性有重复,切记切记!因为你最后真的有可能因为这个而疯掉,明明什么都是对的......
还有一个不太确定,就是OID号的问题,网上说最好可以去自己申请一个,我这个是在网上抄的,目前没什么影响.....


nemo
3 声望0 粉丝

一个有点无聊的程序员,如果有一天,程序会说谎,我会不会依旧喜欢这个行业......写一点自己的东西,别虚度了时间,希望自己能坚持写下去。