新版的openldap弃用了sldap.conf配置文件,引入一种动态配置,所以尽量不要直接修改配文件

如果直接修改了配置文件可以用slaptest -u命令检查

1、安装openldap,可能需要epel源

yum install openldap openldap-clients openldap-servers

2、启动openldap

systemctl start slapd 
systemctl enable slapd

检查一下是否有输出

ldapsearch -x -b '' -s base'(objectclass=*)'

 

3、配置ldap超级管理员

生成密码,等一下作为 olcRootPW 的值

slappasswd -s "pass"

创建admin.ldif 文件

dn: olcDatabase={}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com dn: olcDatabase={}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=example,dc=taovip,dc=com dn: olcDatabase={}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}FqSgnCQY0evw7T3pZRfnKVHByAOhNSFS4 dn: olcDatabase={}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth" read by dn.base="cn=root,dc=example,dc=com" read by * none

导入配置

ldapmodify -Y EXTERNAL -H ldapi:/// -f admin.ldif

4、配置数据库

openldap默认使用的数据库是BerkeleyDB

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/DB_CONFIG

导入schema

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

5、创建默认DN

创建base.ldif 文件

dn: dc=example,dc=com
o: company
objectClass: top
objectclass: dcObject
objectclass: organization dn: cn=root,dc=example,dc=com
cn: root
objectClass: organizationalRole
description: Directory Manage

导入配置

ldapadd -x -W -D "cn=root,dc=example,dc=com" -f base.ldif

修改/etc/openldap/ldap.conf 加入一行默认DN如果不加 ldapsearch 不指定DN是无法搜到数据

BASE    dc=example,dc=com

查一下是否有刚才加的DN

ldapsearch -x -D "cn=root,dc=example,dc=com" -W

6、开启memberOf

默认情况下openldap的用户组属性是Posixgroup,Posixgroup用户组属性和用户没有实际的对应关系。如果要对应起来的话,就需要单独把用户设置到Posixgroup中

开启memberOf之后可以配置groupOfUniqueNames用户组属性,可以根据用户组过滤用户,这个过滤是唯一的

开启memberof,并让新增用户支持memberof

创建 memberof_config.ldif

dn: cn=module{0},cn=config
cn: modulle{0}
objectClass: olcModuleList
objectclass: top
olcModuleload: memberof.la
olcModulePath: /usr/lib64/openldap

dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

创建 refint1.ldif

dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint

创建 refint2.ldif

dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof member manager owner

导入配置

ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif

验证一下配置,这个命令可以列出所有配置

slapcat -b cn=config

7、创建用户和组

创建文件add_user.ldif

dn: cn=user,dc=example,dc=com
cn: user
sn: user
uid: user
objectClass: top
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
userPassword: {MD5}ICy5YqxZB1uWSwcVLDFSDSNLcA==

创建add_group.ldif

dn: cn=users,dc=example,dc=com
objectClass: groupofnames
cn: users
description: default group
member: cn=user,dc=taovip,dc=com

导入配置

ldapadd -x -D cn=root,dc=example,dc=com -W -f add_user.ldif
ldapadd -x -D cn=root,dc=example,dc=com -W -f add_group.ldif

8、打开openldap日志

配置rsyslog

mkdir -p /var/log/slapd
touch /var/log/slapd/slapd.log
chown -R ldap.ldap /var/log/slapd
echo "local4.* /var/log/slapd/slapd.log" >> /etc/rsyslog.conf
systemctl restart rsyslog

注意olcLogLevel这个属性"-1"是指开启debug日志,请参考http://www.openldap.org/doc/admin24/slapdconf2.html

创建log.ldif

dn: cn=config
changetype: modify
add: olcLogLevel
olcLogLevel: -

导入配置

ldapadd -Q -Y EXTERNAL -H ldapi:/// -f log.ldif

9、禁止匿名访问

默认情况下匿名用户可以获取所有用户信息,甚至是密码字段,虽然密码字段是经过加密的那也很危险

创建disable_anon.ldif文件

dn: cn=config
changetype: modify
add: olcDisallows
olcDisallows: bind_anon dn: cn=config
changetype: modify
add: olcRequires
olcRequires: authc dn: olcDatabase={-}frontend,cn=config
changetype: modify
add: olcRequires
olcRequires: authc

导入配置

ldapadd -Q -Y EXTERNAL -H ldapi:/// -f disable_anon.ldif 

10、设置ACL

拒绝所有用户查看用户信息,并且添加有ldap管理账号

创建acl.ldif

dn: olcDatabase={}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: to attrs=userPassword
by anonymous auth
by dn.base="cn=ldapadmin,ou=manage,dc=taovip,dc=com" write
by * none
olcAccess: to *
by anonymous auth
by dn.base="cn=ldapadmin,ou=manage,dc=taovip,dc=com" write
by dn.base="cn=ldapread,ou=manage,dc=taovip,dc=com" read
by * none

导入配置

ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f acl.ldif 

删除ACL

创建文件del_acl.ldif

dn: olcDatabase={}hdb,cn=config
changetype: modify
delete: olcAccess
olcAccess: {}
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f acl.ldif 

创建管理用户

创建add_ou.ldif

dn: ou=manage,dc=example,dc=com
ou: manage
description: Directory Manage
objectClass: top
objectClass: organizationalUnit

创建add_manage_user.ldif

dn: cn=ldapadmin,ou=manage,dc=example,dc=com
cn: ldapadmin
sn: ldapadmin
uid: ldapadmin
objectClass: top
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
userPassword: {SSHA}4eDZHnxvfOOoAgSM6tDLDueCIUB9sRuDHVpVJ dn: cn=ldapread,ou=manage,dc=example,dc=com
cn: ldapread
sn: ldapread
uid: ldapread
objectClass: top
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
userPassword: {SSHA}4eDZHnxvfOOoAgSM6tDLDueCIUB9sRuDHVpVJ

导入配置

ldapadd -x -D cn=root,dc=example,dc=com -W -f add_ou.ldif
ldapadd -x -D cn=root,dc=example,dc=com -W -f add_manage_user.ldif

最新文章

  1. 《JavaScript语言精粹》小记
  2. <转>SQL Server返回最后一个标识值的三个函数:IDENT_CURRENT、@@IDENTITY、SCOPE_IDENTITY
  3. JAVA设计模式 之 观察者模式
  4. Android 下拉刷新
  5. 10SpringMvc_springmvc快速入门小案例(注解版本)
  6. hilbert矩阵
  7. iOS - 文件操作(File Operating)
  8. 多媒体应用-swift
  9. 行业百科知识--Github
  10. Windows Phone开发(26):启动器与选择器之MediaPlayerLauncher和SearchTask
  11. Myeclipse程序调试快捷键及步骤详解
  12. 发现AspNet.Core版本控制库Bug一枚,你还想入坑?
  13. C# 类如何声明索引器以提供对类的类似数组的访问的代码
  14. shell 之扫描ip段
  15. ios真机中Text组件出现多余边框
  16. codeoforces 932A
  17. WEB后台认证机制
  18. 【java】之Method和Field反射获取和设置属性值
  19. C#中public与private与static
  20. C++ 编程错误记录

热门文章

  1. P1020 导弹拦截 /// DP Dilworth定理 LIS、LDS优化
  2. Python数据格式化
  3. YXcms前台注入(有限制但可以绕过)
  4. 【案例】鼠标按下,DIV跟随移动
  5. Intel RealSense Depth Camera D435安装ROS 驱动——Ubuntu16.04
  6. docker 安装 ElasticSearch
  7. 微信公众号 SVG长按互动
  8. 移动端自定义输入框的vue组件 ----input
  9. Java-MyBatis-MyBatis3-XML映射文件:自动映射
  10. selenium简单应用