公司内部会有许多第三方系统或服务,例如Svn,Git,VPN,Jira,Jenkins等等,每个系统都需要维护一份账号密码以支持用户认证,当然公司也会有许多的主机或服务器,需要开放登录权限给用户登录使用,每台主机需要添加登录的账号密码,这些操作不仅繁琐且不方便管理,密码记错或遗忘的情况时有发生。

引入一套支持各系统、服务、主机单点认证的服务就显得尤其迫切和重要。LDAP服务正是为此而生,且经过长时间市场检验,安全稳定,文档也比较丰富,方便上手。

LDAP

可以通过以下三句话快速的认识一下LDAP:

  1. LDAP:Lightweight Directory Access Protocol,轻量目录访问协议。
  2. LDAP服务是一个为只读(查询、浏览、搜索)访问而优化的非关系型数据库,呈树状结构组织数据。
  3. LDAP主要用做用户信息查询(如邮箱、电话等)或对各种服务访问做后台认证以及用户数据权限管控。

名词解释

  • DC:domain component一般为公司名,例如:dc=163,dc=com
  • OU:organization unit为组织单元,最多可以有四级,每级最长32个字符,可以为中文
  • CN:common name为用户名或者服务器名,最长可以到80个字符,可以为中文
  • DN:distinguished name为一条LDAP记录项的名字,有唯一性,例如:dc:"cn=admin,ou=developer,dc=163,dc=com"

图形示例

上边来了一堆的名词解释,看的云里雾里,还不是很明白,怎么跟自己的组织架构对应起来呢?看看下边的图是不是清晰明了

OpenLDAP

上边介绍了LDAP只是一个协议,基于这个协议实现服务器端程序有OpenLDAP、Active Directory(微软的域控制器)等等。

部署OpenLDAP

部署环境:Debian 8.4

1.安装OpenLDAP,OpenLDAP服务端程序叫slapd

# apt-get install -y slapd

2.安装完成之后,会自动生成一个OpenLDAP的系统账号

# cat /etc/passwd
openldap:x:110:115:OpenLDAP Server Account,,,:/var/lib/ldap:/bin/false

3.生成OpenLDAP管理员账号的密码(后边修改配置文件需要使用)

# slappasswd
New password:
Re-enter new password:
{SSHA}TpWoSebaT5gKy2Y3EHmZh+Wc0hJaFp7y

4.新建OpenLDAP配置文件

# cp /usr/share/slapd/slapd.conf /etc/ldap/
# 配置文件中有很多@xxx@的配置替换为真实配置 # slaptest -f /etc/ldap/slapd.conf
5ad9b19d /etc/ldap/slapd.conf: line 105: rootdn is always granted unlimited privileges.
5ad9b19d /etc/ldap/slapd.conf: line 122: rootdn is always granted unlimited privileges.
config file testing succeeded

配置文件重要参数说明(需要自己修改的,其他未提到的可以不修改):

  • database bdb:定义使用的后端数据存储格式,数据库默认采用了berkeley db,其后可以跟的值有bdb、ldbm、passwd、shell。bdb指使用Berkley DB 4数据库
  • suffix "dc=163,dc=com":suffix是"LDAP基准名",它是LDAP名字空间在这里的根。设置想要创建的子树的根DN
  • rootdn "cn=admin,dc=163,dc=com":设置管理LDAP目录的超级用户的DN。这个用户名不要出现在/etc/passwd文件里
  • rootpw {SSHA}TpWoSebaT5gKy2Y3EHmZh+Wc0hJaFp7y:设置这个数据库的超级用户的口令验证方式。也就是上边rootdn设置的用户的密码。一定要用加密的口令存储,可以使用的加密方式有:CRYPT、MD5、SMD5、SHA和SSHA,就是我们第三部生成的密码
  • directory /var/lib/ldap:设置LDAP数据库和索引文件所在的目录
  • access to:权限配置下边详细说明

5.删除原配置,生成新配置

# rm -rf /etc/ldap/slapd.d/*
# slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/ # 给新生成的配置文件赋予openldap的权限
# chown -R openldap.openldap /etc/ldap/slapd.d/

6.重启openldap

# /etc/init.d/slapd restart

ACL权限控制

ACL访问指令的格式:

access to [what]
by [who] [control]

简单解释:通过access to约束我们访问的范围(what),通过by设定哪个用户(who)有什么权限(control)

ACL的详细配置还是比较复杂的,可以看下下边参考文档的第三篇,写的比较详细,这里都不再赘述。

线上ACL控制配置解析

为了用户能够自主修改密码,部署了lam给用户使用(见下文lam介绍)。希望能达到的效果是:

  1. 管理员能够有全部权限,包含新建用户,修改用户属性,充值用户密码等
  2. 普通用户只能修改自己的密码,别的权限都没有

配置如下:

# access to attrs=userPassword通过属性找到访问范围密码,
# 超级管理员也就是我们ldap配置文件里写的rootdn:"cn=admin,dc=163,dc=com"有写(write)权限;
# 由于管理员可能不止一个,我创建了个管理员组"ou=Admin,dc=163,dc=com"把管理员统一都放到这个组下,管理员组下的所有用户(dn.children)有写权限;
# 匿名用户(anonymous)要通过验证(auth);
# 自己(self)有对自己密码的写(write)权限,其他人(*)都没有权限(none).
access to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=163,dc=com" write
by dn.children="ou=Admin,dc=163,dc=com" write
by anonymous auth
by self write
by * none # access to * 所有其他属性,
# 超级管理员rootdn:"cn=admin,dc=163,dc=com"有写(write)权限;
# 管理员"ou=Admin,dc=163,dc=com"成员有写(write)权限;
# 其他人(*)只有读(read)权限
access to *
by dn="cn=admin,dc=163,dc=com" write
by dn.children="ou=Admin,dc=163,dc=com" write
by * read

备份和还原

备份

# ldapsearch -x -b "dc=163,dc=com" -D "uid=authz,ou=Public,dc=163,dc=com" -w "AzdfD863M4" > ldap.20180626.ldif

参数说明:

  • -x:进行简单的验证
  • -D:用来绑定服务器的DN
  • -w:绑定DN的密码
  • -b:要查询的根节点

    authz账号要有"dc=163,dc=com"的查询权限

还原

# ldapadd -x -c -D "cn=admin,dc=163,dc=com" -w "smile" -f ldap.20180626.ldif

参数说明:

  • -c:出错后继续执行程序不终止,默认出错即停止
  • -f:从文件内读取信息还原,而不是标准输入

    还原的DN最好为管理员账号,至少也要有要LDAP的写入权限

web管理工具

用了phpldapadmin和ldap-account-management(简称lam)两款web管理工具,强烈推荐lam,所以这里就不介绍其他的了

ldap-account-manager

安装

1.安装ldap-account-management

# apt-get install ldap-account-manager

2.浏览器访问

http://ip/lam

配置

lam的所有配置都可以在web端配置,不需要去服务器上修改一行代码,这个太好用了。

  1. 浏览器访问后进入登录页面,我们点击右上角"LAM configuratrion"来在线编辑配置文件


文章未完,全部内容请关注公众号【运维咖啡吧】或个人网站https://ops-coffee.cn查看,运维咖啡吧专注于原创精品内容分享,感谢您的支持


相关文章推荐阅读:

LDAP落地实战(一):OpenLDAP部署及管理维护的更多相关文章

  1. LDAP落地实战(四):Jenkins集成OpenLDAP认证

    前几篇分文章分别介绍了OpenLDAP的部署管理和维护以及svn.git的接入,今天我们再下一城接入jenkins. 前情提要:LDAP系列文章 LDAP落地实战(一):OpenLDAP部署及管理维护 ...

  2. LDAP落地实战(三):GitLab集成OpenLDAP认证

    上一篇文章介绍了svn集成OpenLDAP认证,版本控制除了svn外,git目前也被越来越多的开发者所喜爱,本文将介绍GitLab如何集成openldap实现账号认证 GitLab集成OpenLDAP ...

  3. LDAP落地实战(二):SVN集成OpenLDAP认证

    上一篇文章我们介绍了LDAP的部署以及管理维护,那么如何接入LDAP实现账号统一认证呢?这篇文章将带你完成svn的接入验证 subversion集成OpenLDAP认证 系统环境:debian8.4 ...

  4. LDAP+Gitea统一认证Git服务器账户管理openLdap和微软的ad

    很多时候我们需要管理多个内容管理系统,比如Jira.Jenkins.GitEA/Gitlab等等各种管理系统,我们需要每一套管理系统每个人都管理一套密码,每套系统每套密码简直是一种灾难,于是LDAP可 ...

  5. 《Linux就该这么学》培训笔记_ch23_使用OpenLDAP部署目录服务

    <Linux就该这么学>培训笔记_ch23_使用OpenLDAP部署目录服务 文章主要内容: 了解目录服务 目录服务实验 配置LDAP服务端 配置LDAP客户端 了解目录服务 其实目录可以 ...

  6. Alibaba高并发业务秒杀系统落地实战文档,已实践某大型秒杀场景

    前言: 高并发,几乎是每个程序员都想拥有的经验.原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时.CPU load升高.GC频繁.死锁.大数据量存储等等,这些问题能推动我们在技术深 ...

  7. OpenLDAP部署目录服务

        文档信息 目        的:搭建一套完整的OpenLDAP系统,实现账号的统一管理.                     1:OpenLDAP服务端的搭建               ...

  8. ldap和phpldapadmin的安装部署

    LDAP 安装 一.安装LDAP 1. 安装包 yum install openssl-devel gcc libtool-ltdl-devel -y yum install openldap-ser ...

  9. Docker--harbor私有仓库部署与管理

    目录 一.Harbor简介 二.Harbor 部署 三.维护管理Harbor  一.Harbor简介 1.什么是Harbor  ? Harbor 是 VMware 公司开源的企业级 Docker Re ...

随机推荐

  1. 绩效沟通的best原则

    绩效沟通-BEST原则 BEST原则指在进行绩效/IDP面谈的时候按照以下步骤进行: 案例:小赵经常在制作标书时候犯错误 Behavior description 描述行为 小赵,8月6日,你制作的标 ...

  2. handsontable 问题

    碰到问题了,去官网上找community:http://docs.handsontable.com/0.16.1/tutorial-quick-start.html 1. 描述:把handson ta ...

  3. Java位操作全面总结[ZZ]

    Java位操作全面总结 在计算机中所有数据都是以二进制的形式储存的.位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快.在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千 ...

  4. 阉割版BBBlack安装Debian

    开门见山,直入主题 咸鱼入手3块阉割ARM板,经过快递近6天运输到手,不过价格便宜 东西下面这样的(借了咸鱼的图): 发现这块板是阉割版的国外beagleboard.org型号为BeagleBone ...

  5. c# AOP编程:Context与方法拦截

    之前做AgentBooking时候,遇到两个问题比较棘手,一个是异常的传递与捕获:如何可以合理地在层层代码调用中统一传递并统一捕获异常.因为如果有一个做法,可以地方统一处理异常,可以使代码减少很多tr ...

  6. 唯品会osp简介(转)

    转自 https://blog.csdn.net/panyongcsd/article/details/58617810 公司(VIP)从2015年开始在内部推动Venus框架的使用,这是一款基于Ap ...

  7. signalR常见问题

    一.安装signalR会对应安装自己的NewJson包,如果引用了含有不同NewJson包的dll组件,会造成版本不一致.必须在运行环境中指出使用目标版本. 问题截图: 解决方式: <runti ...

  8. c# 锁 Interlocked 操作

    //定义原子变量 ; //原子级别+1值,如果>=0,说明当前锁为空,可以执行,避免重复执行 ) { if (_serverThread == null || (_serverThread.Is ...

  9. onsrcoll和scrollTop兼容与实现

    对于onscroll事件的支持 各浏览器 document.document.body.document.documentElement 对象的 onscroll 事件的支持存在差异. 所谓的支持性存 ...

  10. C++的访问关系

    1.C++的访问关系