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)]
一般来说, LDAP 的 ObjectClass 中只允许存在一个 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 文件与脚本, 公司以外环境无法访问: