LDAP

公司内部会有许多第三方系统或服务,例如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"

图形示例

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

[图片上传失败...(image-f69237-1578624340856)]

image.png

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}EcAoXeGab5g8y2Y03EmH3+Zc3hJaHp7F

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}EcAoXeGab5g8y2Y03EmH3+Zc3hJaHp7F:设置这个数据库的超级用户的口令验证方式。也就是上边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 "CzfdX629K7" > 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"来在线编辑配置文件
![image.jpeg](https://upload-images.jianshu.io/upload_images/18861864-7057cf63bf5c20d3.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 
  1. 看到如下页面有两个选项:"Edit general settings"来编辑通用配置,默认密码lam,进入之后能配置密码策略、日志、管理员密码,最重要的是更新掉管理员密码,这个在后边"Manage server profiles"管理的时候需要提供;"Edit server profiles"来编辑服务器配置,我们先来编辑服务器配置
![image.jpeg](https://upload-images.jianshu.io/upload_images/18861864-e8068995d15c687f.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 
  1. 进入如下页面,输入默认密码lam即可编辑配置,这里要说明一下的是红框标注的"Manage server profiles"可以对服务器的配置文件进行配置,例如增加、删除配置文件、配置文件重命名,最重要的是可以设置配置文件密码(也就是我们刚输入的密码lam,但修改密码需要管理员密码,后边配置)
![image.jpeg](https://upload-images.jianshu.io/upload_images/18861864-ccea257f447601ea.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 
  1. 输入密码lam后就正式进入服务器配置页,看到第一个标签"General setting",(可以先改下语言简体中文保存,整站就给汉化啦,英文渣渣看起来就非常方便了),基本配置都看的很清晰了,主要是Tree suffix配置为自己的DC可以了
![image.jpeg](https://upload-images.jianshu.io/upload_images/18861864-575c68859d5b6d7d.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 
  1. 接着来看这个页面,"security settings"非常重要,配置以何种方式登录web控制台,默认为Fixed list模式,就是下边列表里配置的dn可以登录,我们LDAP里还没有任何一个账号(当我们创建了账号之后可以选择"LDAP serch"的模式,让普通账号也能登录以修改自己的密码),这里要选择fixed list模式并配置为我们LDAP的rootdn,设置一个密码登录之后创建账号等操作
![image.jpeg](https://upload-images.jianshu.io/upload_images/18861864-10eada254e2ff07c.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 
  1. 接下来就是"Account types"标签页的配置,这里配置我们登录web控制显示的标签,我这里只需要他显示用户,就把Group之类的都删除了,保留了User
![image.jpeg](https://upload-images.jianshu.io/upload_images/18861864-c797d25680fe20a7.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 
  1. "Modules"页面配置上一个具体每个account type显示的模块

    [图片上传失败...(image-d844e1-1578624340853)]

    image.jpeg
  2. "Models setting"页面配置models具体要显示的内容,不得不说配置非常详细

![image.jpeg](https://upload-images.jianshu.io/upload_images/18861864-b7bf212af9c61ddd.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 
  1. 经过上边的配置就可以进入控制台新建账号了,新建账号之前一个有用的操作是修改用户的默认RDN标致为uid,更高位置在登录web控制台后右上角配置文件编辑器里边
![image.png](https://upload-images.jianshu.io/upload_images/18861864-683e9bea81204cdf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 
  1. 基本配置完成,可以开始使用了,中文界面比较清晰,无需过多解释啦。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容