环境

系统版本:centos7.4

openldap版本2.4

安装和配置

安装并启动服务

安装:

yum install openldap openldap-servers openldap-clients

拷贝数据库配置文件

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

DB_CONIFG中主要是关于Berkeley DB的相关的一些配置

启动OpenLDAP Server:

systemctl start slapd
systemctl enable slapd
systemctl status slapd

slapd即standard alone ldap daemon,该进程默认监听389端口

设置root用户密码

先用一个命令生成一个LDAP管理用户root密码:

slappasswd -s 123456
New password:
Re-enter new password:
{SSHA}eNZrBtwRRsUg03i5cmGATh3ZnDNfm3Od #记住这个,下面会用到

新建一个rootpwd.ldif(名称是自定义的)的文件:/opt/ldif

vi rootpwd.ldif

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}eNZrBtwRRsUg03i5cmGATh3ZnDNfm3Od
  • ldif即LDAP Data Interchange Format,是LDAP中数据交换的一种文件格式。文件内容采用的是key-value形式,注意value后面不能有空格。
  • 上面内容中dn即distingush name
  • olc即Online Configuration,表示写入LDAP后不需要重启即可生效
  • changetype: modify表示修改一个entry,changetype的值可以是add,delete, modify等。
  • add: olcRootPW表示对这个entry新增了一个olcRootPW的属性
  • olcRootPW: {SSHA}eNZrBtwRRsUg03i5cmGATh3ZnDNfm3Od指定了属性值

下面使用ldapadd命令将上面的rootpwd.ldif文件写入LDAP:

ldapadd -Y EXTERNAL -H ldapi:/// -f rootpwd.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

导入schema

导入schema,schema包含为了支持特殊场景相关的属性,可根据选择导入,这里先全部导入:

ls /etc/openldap/schema/*.ldif | while read f; do ldapadd -Y EXTERNAL -H ldapi:/// -f $f; done

设定默认域

先使用slappasswd生成一个密码:

slappasswd -s 123456
New password:
Re-enter new password:
{SSHA}eNZrBtwRRsUg03i5cmGATh3ZnDNfm3Od

新建一个domain.ldif的文件:

vi domain.ldif

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
read by dn.base="cn=admin,dc=ceshi,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=ceshi,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=ceshi,dc=com

#这个是admin的密码设置/如果要修改密码把这段拿出来 add改成replace,然后执行 ldapadd -Y EXTERNAL -H ldapi:/// -f rootpwd.ldif

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}AtEg7bsctKkWCpeeSdazKcrFCASuU8fP

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=admin,dc=ceshi,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=ceshi,dc=com" write by * read

  • olcAccess即access,该key用于指定目录的ACL即谁有什么权限可以存取什么
  • olcRootDN设定管理员root用户的distingush name
  • 注意替换上面文件内容中cn为具体的域信息
  • olcRootPW用上面新生成的密码替换

写入:

ldapmodify -Y EXTERNAL -H ldapi:/// -f domain.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config" modifying entry "olcDatabase={2}hdb,cn=config" modifying entry "olcDatabase={2}hdb,cn=config" modifying entry "olcDatabase={2}hdb,cn=config" modifying entry "olcDatabase={2}hdb,cn=config"

添加基本目录

新建一个basedomain.ldif的文件:

 
------原

dn: dc=ceshi,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: ceshi com
dc: ceshi

dn: cn=admin,dc=ceshi,dc=com
objectClass: organizationalRole
cn: admin
description: Directory admin

dn: ou=People,dc=ceshi,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=ceshi,dc=com
objectClass: organizationalUnit
ou: Group

------

dn: dc=ceshi,dc=com
objectclass: dcObject
objectclass: organization
o: Ceshi.Inc
dc: ceshi

dn: cn=admin,dc=ceshi,dc=com
objectClass: organizationalRole
cn: admin
description: Directory admin

dn: ou=it,dc=ceshi,dc=com
ou: it
objectClass: organizationalUnit

dn: cn=hanxiaohui,ou=it,dc=ceshi,dc=com
ou: it
cn: hanxiaohui
sn: hui
userPassword: 123456
objectClass: inetOrgPerson
objectClass: organizationalPerson

  • 注意替换上面文件内容中dn为具体的域信息
  • 理解dn,cn,dc
    • DC即Domain Component,LDAP目录类似文件系统目录dc=zhidaoauto,dc=com相当于/com/zhidaoauto
    • CN即Common Name,CN有可能代表一个用户名,例如cn=Manager,dc=zhidaoauto,dc=com表示在/com/zhidaoauto域下的管理员用户Manager
    • OU即Organizational Unit,例如ou=People,dc=zhidaoauto,dc=com表示在/com/zhidaoauto域下的一个组织单元People

写入:

ldapadd -x -D cn=admin,dc=ceshi,dc=com -W -f basedomain.ldif
Enter LDAP Password:
adding new entry "dc=zhidaoauto,dc=com" adding new entry "cn=Manager,dc=zhidaoauto,dc=com" adding new entry "ou=People,dc=zhidaoauto,dc=com" adding new entry "ou=Group,dc=zhidaoauto,dc=com"

测试:

ldapsearch -LLL -W -x -D "cn=admin,dc=ceshi,dc=com" -H ldap:/// -b "dc=admin,dc=com"
Enter LDAP Password:
dn: dc=zhidaoauto,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: zhidaoauto com
dc: zhidaoauto dn: cn=Manager,dc=zhidaoauto,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager dn: ou=People,dc=zhidaoauto,dc=com
objectClass: organizationalUnit
ou: People dn: ou=Group,dc=zhidaoauto,dc=com
objectClass: organizationalUnit
ou: Group

管理工具

可以在局域网内的windows电脑上下载ldapadmin作为管理工具 下载地址: http://www.ldapadmin.org/download/ldapadmin.html

知识点:

登录账号为:

登录ldap的用户dn为:cn=Manager,dc=zhidaoauto,dc=com

ou=Group和ou=People的区别:

从ou=Group里创建的是组,从ou=People创建的是用户

ou=People里的用户怎么加入到ou=Group下边的组呢:

右键"yunwei"组-->properties

这样就把ou=People里"zhaijunming"用户添加到ou=Group里的"yunwei"组了

添加用户:

修改admin密码

1)
[root@localhost /opt/ldif 17:55:41&&31]#slappasswd -s 1q2w3e4r
{SSHA}dYGee/j6y0qOeHqCTgp3vkIGETMOZYkQ 2)
vim changeAdminPwd.ldif (用上面的密码)
-------------------------------------------------------------
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}AtEg7bsctKkWCpeeSdazKcrFCASuU8fP
-------------------------------------------------------------- 3)
ldapadd -Y EXTERNAL -H ldapi:/// -f changeAdminPwd.ldif

  

参考文章

https://blog.frognew.com/2017/05/openldap-install-notes.html#ldapadmin

https://www.cnblogs.com/zhaijunming5/p/9522756.html

Centos7 yum安装OpenLDAP(普通用户可以更改密码)的更多相关文章

  1. centos7 yum安装mysql5.7并在root密码忘记的情况下重设密码

    CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql的repo源. 1. 下载mysql的repo源   1 $ wget http://repo.mysql ...

  2. Centos7 下Yum安装OpenLdap

    网上的教程一大堆,也没用具体说明版本,所以很多操作方法都不一样,把我踩过的坑记录下来 环境: Centos7 OpenLdap 2.4.44 openldap新版本和老版本的配置方法差别特别大 安装步 ...

  3. Centos6 yum安装openldap+phpldapadmin+TLS+双主配置

    原文地址:http://54im.com/openldap/centos-6-yum-install-openldap-phpldapadmin-tls-%E5%8F%8C%E4%B8%BB%E9%8 ...

  4. [转帖]Centos7 yum安装Chrome浏览器

    Centos7 yum安装Chrome浏览器 https://www.cnblogs.com/ianduin/p/8727333.html以及https://blog.csdn.net/libaine ...

  5. CentOS7 yum 安装git

    1.查看系统是否已经安装git git --version 2.CentOS7 yum 安装git yum install -y git 3.安装成功 4.卸载git yum remove git

  6. centos7 yum安装配置redis 并设置密码

    原文:https://www.cnblogs.com/fanlinglong/p/6635828.html centos7 yum安装配置redis 并设置密码 1.设置Redis的仓库地址 yum ...

  7. centos7 yum安装遇到报错:Head V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEYer

    centos7 yum安装时遇到错误:Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY 无法安装时,可按如下方法解决: This mini ...

  8. centos7 yum安装MongoDB

    centos7 yum安装MongoDB   原文博客地址http://xgs888.top/post/view?id=64 centos7 yum安装mongodb: 1:创建仓库 vi /etc/ ...

  9. CentOS7 yum 安装 Nginx最新版本

    CentOS7 yum 安装 Nginx最新版本 下载对应当前系统版本的nginx包(package) # wget  http://nginx.org/packages/centos/7/noarc ...

随机推荐

  1. 【Linux-设备树】编译器DTC

    DTC编译器:设备树源码DTS文件编译为二进制文件DTB. DTC编译器的作用:就是对设备树的源码的文件进行语法检查,根据linux的内核要求检查各个节点以及属性,将设备树源码编译生成二进制文件,以保 ...

  2. 数据库 三范式 BCFN

    # 三范式 范式  设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小.  目前关系数据库有六种范式:第一 ...

  3. GUI程序原理分析

    1,Qt 是一套跨平台的程序设计库,这套程序设计库主要用于 GUI 方面的程序设计开发,所以本系列博文主要是利用C++介绍 GUI 程序设计技术: 2,命令行应用程序: 1,命令行应用程序的特点(Co ...

  4. MyBatis插入并返回id技巧

    1, 使用返回插入id的值,这个值即是当前插入的id

  5. Javascript高级面试

    原型 异步 一.什么是单线程,和异步有什么关系 单线程:只有一个线程,同一时间只能做一件事原因:避免DOM渲染的冲突解决方案:异步 为什么js只有一个线程:避免DOM渲染冲突 浏览器需要渲染DOM J ...

  6. jupyter与requests的初步使用

    upyter 是一个简易的,方便的写Python代码的工具包,requests是Python里非常好用的用来发送 http 请求的包. 开始学习本教程之前,请确保你已经安装了Python,并且安装了P ...

  7. jsonp跨域请求的方式

    1.jsonp一种请求方式.用于解决一个棘手的问题: 由于浏览器具有同源策略:即可以通过后台去访问其他网站,而不能通过浏览器(ajax请求)访问其他网页或域(阻止ajax请求,但是无法阻止<sc ...

  8. jmeter性能测试抛除工具用命令测试的方法

    1.我们有时会遇到那种图片或文件大的传输数据,容易将jmeter测试工具卡死,这个时候就需要抛除测试工具,直接用命令进行测试(window和linux都适用) 2.首先在jmeter工具上把性能测试脚 ...

  9. reactV16理解

    在 V16 版本中引入了 Fiber 机制.这个机制一定程度上的影响了部分生命周期的调用,并且也引入了新的 2 个 API 来解决问题. 在之前的版本中,如果你拥有一个很复杂的复合组件,然后改动了最上 ...

  10. 值不能为null.参数名: viewInfo,如何解决

    有蓝队网络服务器租用客户反映在一台服务器上使用数据库管理工具时弹出了如下错误 :值不能为null.参数名: viewInfo (Microsoft.SqlServer.Management.SqlSt ...