Koa封装的ctx对象具体详解
koa2和promise、async-await密切相关,如果对promise、async-await还不是很清楚的同学可以参考小睿的这篇文章
一、什么是LDAP?
1、在介绍什么是LDAP之前,我们了解一个东西:“什么是目录服务?”
1.1 目录服务是一个特殊的数据库,用来保存描述性的、基于属性的详细信息,支持过滤功能。
1.2是动态的,灵活的,易扩展的。
如:人员组织管理,电话簿,地址簿。
2、了解完目录服务后,我们再来看看LDAP的介绍:
LDAP(Light Directory Access Portocol),它是基于X.500标准的轻量级目录访问协议。
目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。
目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。
LDAP目录服务是由目录数据库和一套访问协议组成的系统。
3、为什么要使用
LDAP是开放的Internet标准,支持跨平台的Internet协议,在业界中得到广泛认可的,并且市场上或者开源社区上的大多产品都加入了对LDAP的支持,因此对于这类系统,不需单独定制,只需要通过LDAP做简单的配置就可以与服务器做认证交互。“简单粗暴”,可以大大降低重复开发和对接的成本。
组织架构图
二、OpenLDAP
上边介绍了LDAP只是一个协议,基于这个协议实现服务器端程序有OpenLDAP、Active Directory(微软的域控制器)等等。
1、部署OpenLDAP
部署环境:云Debian 8.4镜像系统
1.1安装OpenLDAP,OpenLDAP服务端程序叫slapd
# apt-get install -y slapd
1.2安装完成之后,会自动生成一个OpenLDAP的系统账号
# cat /etc/passwd
openldap:x:110:115:OpenLDAP Server Account,,,:/var/lib/ldap:/bin/false
1.3生成OpenLDAP管理员账号的密码(后边修改配置文件需要使用)
# slappasswd
New password:
Re-enter new password:
{SSHA}TpWoSebaT5gKy2Y3EHmZh+Wc0hJaFp7y
1.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:权限配置下边详细说明
1.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/
1.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介绍)。希望能达到的效果是:
管理员能够有全部权限,包含新建用户,修改用户属性,充值用户密码等
普通用户只能修改自己的密码,别的权限都没有
配置如下:
# 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
2、安装
1.1安装ldap-account-management
# apt-get install ldap-account-manager
1.2浏览器访问
http://ip/lam
三、LAM配置
1、下载安装LAM
从官方网站下载文件 http://sourceforge.net/projects/lam/
#tar xvf ldap-account-manager-5.0.tar.bz2 (下载的时候要选择好版本,较高版本的要求php5.4以上,5.0没有要求)
#mv ldap-account-manager-4.8 /data/server/lam (我这里用的是nginx做web服务器,如果用apache就移动到/var/www/html/lam)
#chown www.www -R /data/server/lam (授权用户取决于nginx的配置,apache记得授权给apache用户)
2、修改配置文件
#cd /data/server/lam/config
#mv config.cfg_sample config.cfg
#mv samba3.conf.sample lam.conf
#vim lam.conf
LAM配置
修改没有注释的dc信息
dc=test,dc=com (这个是按照你的ldap来设置的)
3、启动web服务器并访问
http://部署机器的IP/lam
4、设置Manager账户登录
4.1选择右上角LAM配置
浏览器LAM配置1
4.2编辑服务器配置文件
浏览器LAM配置2
浏览器LAM配置3
(如果你没有改config.cfg 和lam.conf中的密码,这个默认是lam;改了就是你改过的密码)
4.3 安全设定 -> 登录方式
修改为固定列表 cn=Manager,dc=test,dc=com
浏览器LAM配置4
返回登录就ok了!