zoukankan      html  css  js  c++  java
  • ldap认证服务的搭建

    1. Ldap服务介绍

    LDAP 全称轻量级目录访问协议(英文:Lightweight Directory Access Protocol),是一个运行在 TCP/IP 上的目录访问协议。目录是一个特殊的数据库,它的数据经常被查询,但是不经常更新。其专门针对读取、浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力。比如 DNS 协议便是一种最被广泛使用的目录服务。

    LDAP 中的信息按照目录信息树结构组织,树中的一个节点称之为条目(Entry),条目包含了该节点的属性及属性值。条目都可以通过识别名 dn 来全局的唯一确定1,可以类比于关系型数据库中的主键。比如 dn 为 uid=ada,ou=People,dc=xinhua,dc=org 的条目表示在组织中一个名字叫做 Ada Catherine 的员工,其中 uid=ada 也被称作相对区别名 rdn。

    一个条目的属性通过 LDAP 元数据模型(Scheme)中的对象类(objectClass)所定义,下面的表格列举了对象类 inetOrgPerson(Internet Organizational Person)中的一些必填属性和可选属性。

     

    下面是一个典型的 LDAP 目录树结构,其中每个节点表示一个条目。在下一节中,我们将按照这个结构来配置一个简单的 LDAP 服务。

    1.1 OpenLDAP 的安装和配置

    #第一步:需要切换到 root 账号来安装 OpenLDAP 相关程序包,并启动服务
    [root@ldap ~]# yum install -y openldap-servers openldap-clients
    [root@ldap ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
    [root@ldap ~]# chown ldap. /var/lib/ldap/DB_CONFIG
    [root@ldap ~]# systemctl enable slapd
    Created symlink from /etc/systemd/system/multi-user.target.wants/slapd.service to /usr/lib/systemd/system/slapd.service.
    [root@ldap ~]# systemctl start slapd
    #第二步:我们使用 slappasswd 命令来生成一个密码,并使用 LDIF(LDAP 数据交换格式)文件将其导入到 LDAP 中来配置管理员密码:
    [root@ldap ~]# slappasswd
    New password: 
    Re-enter new password: 
    {SSHA}E2L9nvHzas+TYf3PW4KQmn7VyveLehqP
    [root@ldap ~]# cat chrootpw.ldif 
    # specify the password generated above for "olcRootPW" section
    dn: olcDatabase={0}config,cn=config
    changetype: modify
    add: olcRootPW
    olcRootPW: {SSHA}E2L9nvHzas+TYf3PW4KQmn7VyveLehqP
    [root@ldap ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.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"
    

    1.2  导入一些基本的 Schema

    #第三步骤:我们需要向 LDAP 中导入一些基本的 Schema。这些 Schema 文件位于 /etc/openldap/schema/ 目录中,定义了我们以后创建的条目可以使用哪些属性
    [root@ldap ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif 
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    adding new entry "cn=cosine,cn=schema,cn=config"
    
    [root@ldap ~]#  ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif 
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    adding new entry "cn=nis,cn=schema,cn=config"
    
    [root@ldap ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif 
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    adding new entry "cn=inetorgperson,cn=schema,cn=config"
    

    1.3 配置 LDAP 的顶级域

    #第四步,我们需要配置 LDAP 的顶级域(以 dc=zhizhangyi,dc=com 为例)及其管理域:
    [root@ldap ~]# slappasswd
    New password: 
    Re-enter new password: 
    {SSHA}gzeqpWcDsQqCQNxx2V3oZDrq7XrXEGqe
    [root@ldap ~]# cat  chdomain.ldif
    # replace to your own domain name for "dc=***,dc=***" section
    # specify the password generated above for "olcRootPW" section
    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=Manager,dc=zhizhangyi,dc=com" read by * none
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcSuffix
    olcSuffix: dc=zhizhangyi,dc=com
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcRootDN
    olcRootDN: cn=Manager,dc=zhizhangyi,dc=com
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    add: olcRootPW
    olcRootPW: {SSHA}gzeqpWcDsQqCQNxx2V3oZDrq7XrXEGqe
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    add: olcAccess
    olcAccess: {0}to attrs=userPassword,shadowLastChange by 
      dn="cn=Manager,dc=zhizhangyi,dc=com" write by anonymous auth by self write by * none
    olcAccess: {1}to dn.base="" by * read
    olcAccess: {2}to * by dn="cn=Manager,dc=zhizhangyi,dc=com" write by * read

    #导入

    [root@ldap ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.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"
    

    1.4 创建组织和角色

    #第五步,在上述基础上,我们来创建一个叫做 zhizhangyi News Agency 的组织,并在其下创建一个 Manager 的组织角色(该角色内的用户具有管理整个 LDAP 的权限)和 People 和 Group 两个组织单元:
    [root@ldap ~]# vim basedomain.ldif
    # replace to your own domain name for "dc=***,dc=***" section
    dn: dc=zhizhangyi,dc=com
    objectClass: top
    objectClass: dcObject
    objectclass: organization
    o: zhizhangyi News Agency
    dc: zhizhangyi
    
    dn: cn=Manager,dc=zhizhangyi,dc=com
    objectClass: organizationalRole
    cn: Manager
    
    dn: ou=People,dc=zhizhangyi,dc=com
    objectClass: organizationalUnit
    ou: People
    
    dn: ou=Group,dc=zhizhangyi,dc=com
    objectClass: organizationalUnit
    ou: Group
    [root@ldap ~]# ldapadd -x -D cn=Manager,dc=zhizhangyi,dc=com -W -f basedomain.ldif 
    Enter LDAP Password: 
    adding new entry "dc=zhizhangyi,dc=com"
    
    adding new entry "cn=Manager,dc=zhizhangyi,dc=com"
    
    adding new entry "ou=People,dc=zhizhangyi,dc=com"
    
    adding new entry "ou=Group,dc=zhizhangyi,dc=com"
    

    通过以上的所有步骤,我们就设置好了一个 LDAP 目录树:其中基准 dn dc=zhizhangyi,dc=com 是该树的根节点

    其下有一个管理域 cn=Manager,dc=zhizhangyi,dc=com 和两个组织单元 ou=People,dc=zhizhangyi,dc=com 及 ou=Group,dc=zhizhangyi,dc=com

    接下来,我们来创建一个叫作 Ada Catherine 的员工并将其分配到 Secretary 组来验证上述配置是否生效。

    [root@ldap ~]# slappasswd
    New password: 
    Re-enter new password: 
    {SSHA}0ViaPfcyL9LkfV3xcSaXl/GuSrNcfViy
    [root@ldap ~]# cat ldapuser.ldif 
    # create new
    # replace to your own domain name for "dc=***,dc=***" section
    dn: uid=ada,ou=People,dc=zhizhangyi,dc=com
    objectClass: inetOrgPerson
    objectClass: posixAccount
    objectClass: shadowAccount
    uid: ada
    cn: Ada Catherine
    sn: Catherine
    userPassword: {SSHA}0ViaPfcyL9LkfV3xcSaXl/GuSrNcfViy
    loginShell: /bin/bash
    uidNumber: 1000
    gidNumber: 1000
    homeDirectory: /home/users/ada
    
    dn: cn=Secretary,ou=Group,dc=zhizhangyi,dc=com
    objectClass: posixGroup
    cn: Secretary
    gidNumber: 1000
    memberUid: secretary
    [root@ldap ~]# ldapadd -x -D cn=Manager,dc=zhizhangyi,dc=com -W -f ldapuser.ldif
    Enter LDAP Password: 
    adding new entry "uid=ada,ou=People,dc=zhizhangyi,dc=com"
    
    adding new entry "cn=Secretary,ou=Group,dc=zhizhangyi,dc=com"
    #我们也可以使用 ldapsearch 命令来查看 LDAP 目录服务中的所有条目信息:
    [root@ldap ~]# ldapsearch -x -b "dc=zhizhangyi,dc=com" -H ldap://127.0.0.1
    #如果要删除一个条目,可以按下面的命令操作:
    [root@ldap ~]# ldapdelete -x -W -D 'cn=Manager,dc=zhizhangyi,dc=com' "uid=ada,ou=People,dc=zhizhangyi,dc=com"
    

    1.5  使用 phpLDAPadmin 来管理 LDAP 服务

    通过 LDIF 文件可以在终端上管理起整个 LDAP,但是我们都喜欢图形化界面。phpLDAPadmin 正是一个可以通过浏览器来管理 LDAP 服务的 Web 工具。

    在安装 phpLDAPadmin 之前,要确保服务器上已经启动了 Apache httpd 服务及 PHP 2。准备就绪后,我们按下面的操作来安装和配置 phpLDAPadmin:

    [root@ldap ~]# yum -y install epel-release
    [root@ldap ~]# yum --enablerepo=epel -y install phpldapadmin
    [root@ldap ~]# vim /etc/phpldapadmin/config.php
    # line 397: uncomment, line 398: comment out
    $servers->setValue('login','attr','dn');
    // $servers->setValue('login','attr','uid');
    [root@ldap ~]# cat /etc/httpd/conf.d/phpldapadmin.conf
    #
    #  Web-based tool for managing LDAP servers
    #
    
    Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
    Alias /ldapadmin /usr/share/phpldapadmin/htdocs
    
    <Directory /usr/share/phpldapadmin/htdocs>
      <IfModule mod_authz_core.c>
        # Apache 2.4
        Require local
        Require all granted
      </IfModule>
      <IfModule !mod_authz_core.c>
        # Apache 2.2
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from ::1
      </IfModule>
    </Directory>
    [root@ldap ~]# systemctl restart httpd
    

    安装成功的话,在浏览器中访问 http://localhost:8000/phpldapadmin/ 便会进入 phpLDAPadmin 管理页面: 

     

  • 相关阅读:
    Linux下docker安装教程
    基于spark邮件自动分类
    多项式相关算法集成
    基于Bert的文本情感分类
    基于sklearn的分类器实战
    LDA && NCA: 降维与度量学习
    DataStream API介绍和示例
    Apache Flink 简单介绍和入门
    Hbase 表设计和高级属性
    hbase基础shell操作
  • 原文地址:https://www.cnblogs.com/so-cool/p/8509941.html
Copyright © 2011-2022 走看看