yum 安装:

sudo yum install -y openldap openldap-clients openldap-servers

启动停止:

sudo service slapd start   # 启动
sudo service slapd stop    # 停止
sudo service slapd status  # 查看状态
netstat -ntlp | grep 389   # OpenLDAP use port 389

配置文件地址:

su -
cd /etc/openldap
cd /etc/openldap/slapd.d
cd /etc/openldap/slapd.d/cn\=config

与登录相关的配置文件:

cat /etc/openldap/slapd.d/cn\=config/olcDatabase={2}hdb.ldif

# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 4b58ca71
dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 3f094f68-657a-1039-98c0-a50ff8cb9a09
creatorsName: cn=config
createTimestamp: 20190907051526Z
olcRootDN: cn=root,dc=zhanglin,dc=com
olcSuffix: dc=zhanglin,dc=com
olcRootPW:: e1NTSEF9Q2U3MHVJSXV6bytuRDVjak1ySXkvWWQ1S2JpeEVsM2I=
entryCSN: 20190907075320.357662Z#000000#000#000000
modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20190907075320Z

olcRootDN 是登录用的管理员账户, olcRootPW 是登录用的管理员密码(非明文). 这个文件要求是: AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.. 所以我们需要使用 ldapmodify 命令修改里面的相关内容.

而且到目前为止, 我们并未禁用匿名登录(我不会禁止也不打算禁止), 所以我们使用 LdapAdmin 工具, 使用匿名访问是可以登录的.

修改管理员账户密码:

# create password
slappasswd -s secret
{SSHA}Ce70uIIuzo+nD5cjMrIy/Yd5KbixEl3b  # would use as "olcRootPW"

# create ldif file
vim a.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN:cn=root
-
replace: olcSuffix
olcSuffix:
-
replace: olcRootPW
olcRootPW: {SSHA}Ce70uIIuzo+nD5cjMrIy/Yd5KbixEl3b
-
add: olcAccess
olcAccess: to dn.base="" by * read
-
add: olcAccess
olcAccess: to * by dn="cn=root" write by * read

# update config using "ldapmodify" command
# must do this as "root"
sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f a.ldif

其中 slappasswd -s secret 里的 secret 是明文密码, 生成的结果是密文的密码, 该结果写入到 olcRootPW 栏. dn 栏的 olcDatabase={2}hdb,cn=config 具体可以通过 ll /etc/openldap/slapd.d/cn\=config 的结果微调.

导入基本 Schema:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

删除某些 Schema:

su -
cd /etc/openldap/slapd.d/cn\=config/cn\=schema
rm "cn={4}air.ldif"

添加 Entry:

ldapadd -x -h localhost -p 389 -D cn=root -w secret -f ldap_data.ldif

解决 [LDAP: error code 65 - invalid structural object class chain (domain/organization)]

一般来说, LDAPObjectClass 中只允许存在一个 STRUCTURAL 类型的属性, 同时设置两个的时候会报错:

error code 65 - invalid structural object class chain (domain/organization).

但是我们实际上是可以通过继承的方式来解决的:

# objectClass mailDomain
olcObjectClasses: ( 1.3.6.1.4.1.7914.1.2.1.70
    NAME 'mailDomain'
    SUP ( domain $ organization ) STRUCTURAL
    DESC 'make domain and organization exist at same time'
    MAY ( domainType
    $domainName ) )

这样一来, 设置 mailDomain 的时候, 就可以同时把两个父类记载上: domain, organization, 这样就实现了多个 STRUCTURAL 类型的属性同时存在.

参考: Appendix A - LDAP: ObjectClass Inheritance


相关 LDIF 文件与脚本, 公司以外环境无法访问:

open-ldap-script

Comments
Write a Comment