ldap服务构建过程+phpldapadmin构建使用



基于centos 6.8系统:

1. 安装openldap

yum install -y openldap openldap-servers openldap-clients openldap-devel compat-openldap

2. 安装Berkeley DB

yum install -y db4 db4-utils

openldap使用Berkeley DB存储数据。

3. 安装nginx, php (php要安装5.4的版本,否则会有不兼容情况)

这里php还需要安装对ldap支持的模块:参考这篇文章:centos安装php-ldap扩展,总结 https://blog.csdn.net/gpxxgpxx/article/details/60135356

这个用ansible自动安装

nginx的配置文件:

    server {
            listen  8099;
            server_name ldap.anmav.cn;

            location / {
                root   /home/data/html/phpldapadmin;
                index  index.php index.html index.htm;
            }

            #error_page   500 502 503 504  /50x.html;
            #location = /50x.html {
            #    root   /home/www//html;
            #}

           # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            location ~ .php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /home/data/html/phpldapadmin/$fastcgi_script_name;
                include        fastcgi_params;
            }

           error_log           logs/phpldapadmin_error.log;
           access_log          logs/phpldapadmin_access.log main;

    }

4. 下载phpldapadmin

cd /home/workspace
wget http://sourceforge.net/projects/phpldapadmin/files/phpldapadmin-php5/1.2.3/phpldapadmin-1.2.3.zip/download
unzip phpldapadmin-1.2.3.zip
cp -R phpldapadmin-1.2.3 /var/www/html/phpldapadmin
cd /home/data/html/phpldapadmin/config
cp config.php.example config.php


5. 配置openldap
安装完openldap后我们看到在/etc/openldap目录下有certs、schema、slapd.d三个目录和ldap.conf一个文件。
1)certs目录用于存放TLS认证的CA证书等。
2)(该目录用于旧的配置方法,已废弃)schema目录下有.schema文件和.ldif文件。
3)slapd.d目录是openldap2.4.x的配置目录。/etc/openldap/slapd.d/cn=config存放数据库的配置文件,/etc/openldap/slapd.d/cn=config/cn=schema存放.ldif文件。 注意: /etc/openldap/slapd.d/cn=config.ldif会被/etc/openldap/slapd.d/cn=config/*里面的配置文件覆盖掉
4)ldap.conf是openldap client的配置文件。

    5.1首先生成管理员密码:

        slappasswd

        输完两遍密码后会生成一个加密散列字符串,保存下来。
        如:
        [root@gitlab openldap]# slappasswd
        New password:
        Re-enter new password:
        {SSHA}kk20rdNChGiPTP+Xoh4bdKZKrS+46sYM


    5.2 编辑数据库配置文件,设置域名:
        vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif

        设置目录树后缀(域名),作用是定义根的名字。
        找到:

        olcSuffix: dc=my-domain,dc=com

        修改dc:
        olcSuffix: dc=ldap,dc=anmav,dc=cn

        设置管理员DN。
        PS:LDAP管理员cn默认为Manager,可以改成自己需要的名字。

        找到:

        olcRootDN: cn=Manager,dc=my-domain,dc=com

        修改dc:

        olcRootDN: cn=anmavadmin,dc=ldap,dc=anmav,dc=cn


        设置管理员密码。在olcDatabase={2}bdb.ldif最后添加:

        olcRootPW: {SSHA}kk20rdNChGiPTP+Xoh4bdKZKrS+46sYM

    5.3 指定监控权限:
        vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif

        找到:

        olcAccess: {0}to *  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=exter
         nal,cn=auth" read  by dn.base="cn=manager,dc=my-domain,dc=com" read  by * n
         one


        修改为:

        olcAccess: {0}to *  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=exter
         nal,cn=auth" read  by dn.base="cn=anmavadmin,dc=ldap,dc=anmav,dc=cn" read  by * n
         one


    5.4 设置Database Cache:

        设置Database Cache:

        cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

        设置权限:

        chown -R ldap:ldap /var/lib/ldap/

        测试配置文件是否有错:

        slaptest -u

        提示:

        config file testing succeeded

        测试通过。

        启动slapd服务:

        service slapd start


#上面的ldif文件是推荐通过ldapmodify的方式修改的
修改方式可以参照这篇文章 https://www.server-world.info/en/note?os=CentOS_7&p=openldap&f=1



6. 配置phpldapadmin

    vim /home/data/html/phpldapadmin/config/config.php

    找到"Define your LDAP servers in this section"区块。

    将:

    $servers->setValue('server','host','127.0.0.1');
    $servers->setValue('server','port',389);

    前的注释去掉。

    将:

    $servers->setValue('server','base',array(''));

    修改为:

    $servers->setValue('server','base',array('dc=ldap,dc=anmav,dc=cn'));

    在array中输入设置的olcSuffix。

    将:

    $servers->setValue('login','auth_type','session');

    前的注释去掉。


    chown www. -R /home/data/html/phpldapadmin

    浏览器访问:http://ldap.anamv.cn:8099/
    使用RootDN和RootPW登陆:
    用户名:cn=anmavadmin,dc=ldap,dc=anmav,dc=cn
    密码: 自己设置的密码

    此时左侧目录树会显示:This base cannot be created with PLA.


    添加根节点:

    vim base.ldif
    dn: dc=ldap,dc=anmav,dc=cn
    o: anmav
    objectclass: dcObject
    objectclass: organization

    添加到ldap数据库:

    ldapadd -f base.ldif -x -D cn=anmavadmin,dc=ldap,dc=anmav,dc=cn -W

    #-f 指定文件,相当于mysql的.sql类文件
    #-x 简单用户认证
    #-D 绑定的dn
    #-W 提示输入绑定dn的密码

    输入密码后会提示:

    adding new entry "dc=ldap,dc=anmav,dc=cn"

    在浏览器里刷新一下条目就会显示出根节点。


7. 剩下来就可以登录phpldapadmin进行条目的添加了

也可以使用openldap的LAM工具进行管理


#注意事项:

#如果ldap里面没有对应的objectClass,可以进行导入,centos 7下yum安装可能需要手动导入,centos6下,在vim /etc/openldap/slapd.d/cn\=config.ldif里面配置了olcConfigFile: /usr/share/openldap-servers/slapd.conf.obsolete, 而slapd.conf.obsolete里面include这些ldif了,那么系统会自动导入进去的

cd /etc/openldap/schema/
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f cosine.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f nis.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f collective.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f corba.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f core.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f duaconf.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f dyngroup.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f inetorgperson.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f java.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f misc.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f openldap.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f pmi.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f ppolicy.ldif


#参考文档:

LDAP服务原理详解(原创)  http://czmmiao.iteye.com/blog/1561597
CentOS Linux安装OpenLDAP服务器    http://www.live-in.org/archives/1731.html  (安装过程也是根据这篇文章做的)
Centos7 Ldap统一认证部署   http://blog.chinaunix.net/uid-21926461-id-5676013.html



概念:

olc : on-line configuration 在线配置
objectClass:表示使用什么对象类,这个对象类可以自定义的,比如说inetOrgPerson,olcDatabaseConfig等
olcAccess: acl访问控制列表


openldap相关缩写:

dn - distinguished name(区别名,主键)
o - organization(组织-公司)
ou - organization unit(组织单元-部门)
c - countryName(国家)
dc - domainComponent(域名)
sn - sure name(真实名称)
cn - common name(常用名称)


openldap组件:

slapd:主LDAP服务器
slurpd:负责与复制LDAP服务器保持同步的服务器
对网络上的目录进行操作的客户机程序。下面这两个程序是一对儿:
ldapadd:打开一个到LDAP服务器的连接,绑定、修改或增加条目
ldapsearch:打开一个到LDAP服务器的连接,绑定并使用指定的参数进行搜索
对本地系统上的数据库进行操作的几个程序:
slapadd:将以LDAP目录交换格式(LDIF)指定的条目添加到LDAP数据库中
slapcat:打开LDAP数据库,并将对应的条目输出为LDIF格式.


相关命令:

slapd -V      查看版本
slappasswd  生产加密密码
slaptest -u   测试ldap配置文件是否有错
ldapadd   man ldapadd 或者ldapadd -h   增加ldap条目
    例子:     ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
            ldapadd -f base.ldif -x -D "cn=anmavadmin,dc=ldap,dc=anmav,dc=cn" -W
ldapmodify  修改ldap条目
    例子:    ldapmodify -Y EXTERNAL -H ldapi:/// -f xxx.ldif
            ldapmodify -f changebase.ldif -D "cn=admin,dc=ldap,dc=myjason,dc=org" -W
ldapdelete  删除ldap条目
    例子:    ldapdelete -x -D "cn=admin,dc=netsafe,dc=qa,dc=net" -W "uid=seabird,ou=People,dc=netsafe,dc=qa,dc=net"
    或者:    vim delete.ldif
            内容为:
            dn: dc=ldap,dc=myjason,dc=org
            changetype: delete
            然后执行:
            ldapmodify -Q -Y EXTERNAL -H ldapi:///  -f delete.ldif
            
ldapsearch  搜索ldap条目
    例子:     ldapsearch -x -b 'dc=ldap,dc=anmav,dc=cn'
            ldapsearch -LLL -W -x -H ldap://192.168.3.21 -D "cn=anmavadmin,dc=ldap,dc=anmav,dc=cn" -b "dc=dev,dc=com" "(uid=*)"
slapcat 查看ldap数据库条目,输出为ldif格式
    例子:    slapcat -b "dc=ldap,dc=anmav,dc=cn"




8、 自定义一个添加一个schema(添加自定义项)

需要给ldap用户添加mobile和sex这个属性,但是发现暂时上面只有mobile,没有sex。所以要么自定义一个schema,然后用继承,要么在现有的里面添加

 1)、新建自定义schema

     cd /etc/openldap/schema
     vi localperson.schema

attributetype ( 2.16.840.1.113730.3.1.930
  NAME 'userType'
  DESC 'normalperson,doctor,citizen'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
  SINGLE-VALUE )
attributetype ( 2.16.840.1.113730.3.1.931
  NAME 'idType'
  DESC 'person id cardtype'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.932
  NAME 'idNumber'
  DESC 'person id cardnumber'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype (2.16.840.1.113730.3.1.933
  NAME 'age'
  DESC 'person age'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.934
  NAME 'sex'
  DESC 'person id cardnumber'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.935
  NAME 'userRole'
  DESC 'user role '
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.936
  NAME 'firstLogin'
  DESC 'whether firstlogin flag '
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.937
  NAME 'securityQuestion'
  DESC 'SecurityQuestion'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
attributetype ( 2.16.840.1.113730.3.1.938
  NAME 'securityAnswer'
  DESC 'SecurityAnswer'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
# inetOrgPerson
# The inetOrgPerson represents people who are associatedwith an
# organization in some way. It is a structural class and is derived
objectclass ( 111111.3.2.8
    NAME 'localPerson'
    DESC 'Local py Person attributes'
    SUP person
    STRUCTURAL
    MAY ( uid $ userType $ idType $ idNumber $ age $ sex $ title $ postalAddress $ postalCode $ displayName $ mail $ mobile $ userRole$firstLogin $ securityQuestion $ securityAnswer ) )


vim /etc/openldap/slapd.conf

加入include                /etc/openldap/schema/localperson.schema
在include         /etc/openldap/schema/inetorgperson.schema前面


还需要修改/etc/openldap/schema/inetorgperson.schema,让其继承localperson的objectclass

vim /etc/openldap/schema/inetorgperson.schema

修改
objectclass     ( 2.16.840.1.113730.3.2.2
    NAME 'inetOrgPerson'
        DESC 'RFC2798: Internet Organizational Person'
    SUP organizationalPerson
    STRUCTURAL
        MAY (
                audio $ businessCategory $ carLicense $ departmentNumber $
                displayName $ employeeNumber $ employeeType $ givenName $
                homePhone $ homePostalAddress $ initials $ jpegPhoto $
                labeledURI $ mail $ manager $ mobile $ o $ pager $
                photo $ roomNumber $ secretary $ uid $ userCertificate $
                x500uniqueIdentifier $ preferredLanguage $
                userSMIMECertificate $ userPKCS12 )
        )

改成

objectclass     ( 2.16.840.1.113730.3.2.2
    NAME 'inetOrgPerson'
        DESC 'RFC2798: Internet Organizational Person'
    SUP ( organizationalPerson $ localPerson )
    STRUCTURAL
        MAY (
                audio $ businessCategory $ carLicense $ departmentNumber $
                displayName $ employeeNumber $ employeeType $ givenName $
                homePhone $ homePostalAddress $ initials $ jpegPhoto $
                labeledURI $ mail $ manager $ mobile $ o $ pager $
                photo $ roomNumber $ secretary $ uid $ userCertificate $
                x500uniqueIdentifier $ preferredLanguage $
                userSMIMECertificate $ userPKCS12 )
        )

然后用slaptest -u,测试是否有问题

如果没有问题再重启service slapd restart

但是这里面发现其实是有问题的,有可能会抱找不到localPerson这个objectClass,这个具体原因有待去查明


所以这里我使用了第二种方法,直接修改inetOrgPerson,这个objecclass,添加一个sex属性

    2)、 添加sex属性

    vim /etc/openldap/schema/inetorgperson.schema

    添加
attributetype ( 2.16.840.1.113730.3.1.934
  NAME 'sex'
  DESC 'person sex'
  EQUALITY caseIgnoreMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

  说明:
  1、 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15  这个数字对应这个Directory String类型,详细可参照http://ldap.anmav.cn:8099/htdocs/cmd.php?cmd=schema&server_id=1&view=objectclasses&viewvalue=inetOrgPerson 选择“语法规则”
  2、 2.16.840.1.113730.3.1.934这个是个OID,是每个属性唯一的id号,不能重复



   再修改
objectclass     ( 2.16.840.1.113730.3.2.2
    NAME 'inetOrgPerson'
        DESC 'RFC2798: Internet Organizational Person'
    SUP organizationalPerson
    STRUCTURAL
        MAY (
                audio $ businessCategory $ carLicense $ departmentNumber $
                displayName $ employeeNumber $ employeeType $ givenName $
                homePhone $ homePostalAddress $ initials $ jpegPhoto $
                labeledURI $ mail $ manager $ mobile $ o $ pager $
                photo $ roomNumber $ secretary $ uid $ userCertificate $
                x500uniqueIdentifier $ preferredLanguage $
                userSMIMECertificate $ userPKCS12 )
        )


    添加个sex
objectclass     ( 2.16.840.1.113730.3.2.2
    NAME 'inetOrgPerson'
        DESC 'RFC2798: Internet Organizational Person'
    SUP organizationalPerson
    STRUCTURAL
        MAY (
                audio $ businessCategory $ carLicense $ departmentNumber $
                displayName $ sex $ employeeNumber $ employeeType $ givenName $
                homePhone $ homePostalAddress $ initials $ jpegPhoto $
                labeledURI $ mail $ manager $ mobile $ o $ pager $
                photo $ roomNumber $ secretary $ uid $ userCertificate $
                x500uniqueIdentifier $ preferredLanguage $
                userSMIMECertificate $ userPKCS12 )
        )


    然后vim /etc/openldap/slapd.conf

    #include                /etc/openldap/schema/localperson.schema

    再用slaptest -u,测试是否有问题, 再重启service slapd restart


    说明:
    1、 SUP是继承的意思,表示inetOrgPerson继承了organizationalPerson的所有属性

猜你喜欢

转载自blog.51cto.com/zhengmingjing/2301384