• LDAP落地实战(一):OpenLDAP部署及管理维护


    公司内部会有许多第三方系统或服务,例如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"来在线编辑配置文件
      image

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


    扫码关注公众号查看更多实用文章

    相关文章推荐阅读:

  • 相关阅读:
    qt串口
    视频笔记
    视频笔记3
    视频笔记2
    视频笔记1
    将VariantMap添加到数据库
    QT5.9笔记
    li里面input框贴顶
    html增加空格
    linux图形化界面管理工具宝塔面板
  • 原文地址:https://www.cnblogs.com/37Y37/p/9315945.html
Copyright © 2020-2023  润新知