• OpenLDAP 2.4.x源码安装配置


    OpenLDAP 2.4.x源码安装配置

    官方文档:

    参考文档:

    环境:
    CentOS 7.1
    openldap-2.4.44
    db-5.3.28(BerkeleyDB)
    Apache Directory Studio-2.0.0.v20151221-M10
    phpldapadmin-1.2.3


    一.安装BerkeleyDB

    注意:openldap-2.4.x支持BerkeleyDB 4.4-4.8,5.x ,暂不支持6.x的版本

    方式一:直接使用CentOS7光盘自带的BerkeleyDB-4.7.25

    yum -y install compat-db

    ln -s /usr/include/db4.7.25/* /usr/include/

    提示:建议采用方式一,系统底层很多依赖预编译的BerkeleyDB, 源码安装bdb, 可能给己使用的bdb验证出现问题(如:vsftpd通过db_load生成的数据库文件在源码安装bdb后验证会失败,目前还没找到原因),而光盘源自带的BerkeleyDB则非常正常


    方式二:源码安装

    yum -y install gcc gcc-c++ 
    wget http://download.oracle.com/otn/berkeley-db/db-5.3.28.tar.gz
    tar -xvf db-5.3.28.tar.gz -C /usr/local/src
    cd /usr/local/src/db-5.3.28/build_unix

    ../dist/configure --prefix=/opt/berkeleydb

    make -j4 && make -j4 install

    ln -s /opt/berkeleydb/include/* /usr/include/

    ln -s /opt/berkeleydb/lib/* /usr/local/lib64/

    echo "/opt/berkeleydb/lib" >>/etc/ld.so.conf

    ldconfig -f /etc/ld.so.conf

    说明:红帽系都有默认安装libdb-utils工具,db_recover等utils直接可用,如果采用方式一光盘源安装则后面的init脚本调用位置需要修改为/usr,对于db5检索rpm数据库不可用时可以rpmdb --rebuilddb修复

    本实验采用源码安装



    二.安装OpenLDAP

    yum -y install gcc gcc-c++ unzip gzip bzip2 openssl-devel cyrus-sasl-devel krb5-devel tcp_wrappers-devel libtool-ltdl-devel openslp-devel unixODBC-devel mysql-devel
    tar -xvf openldap-2.4.44 -C /usr/local/src
    cd /usr/local/src/openldap-2.4.44

    ./configure --prefix=/opt/openldap 

    --enable-slapd

    --enable-dynacl 

    --enable-aci 

    --enable-cleartext

    --enable-crypt  

    --enable-lmpasswd

    --enable-spasswd  

    --enable-modules

    --enable-rewrite

    --enable-rlookups

    --enable-slapi

    --enable-wrappers

    --enable-backends

    --enable-ndb=no

    --enable-perl=no

    --enable-overlays


    make -j4 && make -j4 install

     

    cp -a /opt/openldap/share/man/* /usr/share/man/

    ln -s /opt/openldap/bin/* /usr/local/bin

    ln -s /opt/openldap/sbin/* /usr/local/sbin

    注意:

    http://www.openldap.org/lists/openldap-bugs/201510/msg00045.html

    http://stackoverflow.com/questions/14997018/5125cc8e-register-matching-rule-could-not-locate-associated-matching-rule-gener

    --enable-slp选项(openslp-devel包提供库)加上后,slapd.conf转换新格式时会报错,没有找到可行的解决办法,不加上该选项一切都正常

    [root@ct7 ~]# /opt/openldap/sbin/slaptest -f /opt/openldap/etc/openldap/slapd.conf -F /opt/openldap/etc/openldap/slapd.d/

    5736ee5e register_matching_rule: could not locate associated matching rule generalizedTimeMatch for ( 2.5.13.28 NAME 'generalizedTimeOrderingMatch' SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )

    slap_schema_init: Error registering matching rule ( 2.5.13.28 NAME 'generalizedTimeOrderingMatch' SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )

    5736ee5e slaptest: slap_schema_init failed

    slaptest: slap_init failed!


    提示:mysql cluster支持,按需启用,CentOS7的perl库貌似不兼容,故先不启用.顺利的话,命令行执行/opt/openldap/libexec/slapd就可以正常启动openldap

    [root@ct7 openldap-2.4.44]# netstat -tunlp|grep slapd

    tcp            0 0.0.0.0:389             0.0.0.0:*               LISTEN      19378/slapd         

    tcp6           0 :::389                  :::*                    LISTEN      19378/slapd



    三.配置openldap init脚本
    init脚本使得管控更为方便
    tar -xvf ltb-project-openldap-initscript-2.1.tar.gz
    mv ltb-project-openldap-initscript-2.1/slapd /etc/init.d

    sed -i "/^SLAPD_PATH=/c SLAPD_PATH=/opt/openldap" /etc/init.d/slapd

    sed -i "/^BDB_PATH=/c  BDB_PATH=/opt/berkeleydb" /etc/init.d/slapd

    chmod +x /etc/init.d/slapd
    chkconfig slapd on
    service slapd restart


    四.配置
    1.slapd.conf

    cat >/opt/openldap/etc/openldap/slapd.conf <<HERE

    include /opt/openldap/etc/openldap/schema/core.schema

    include /opt/openldap/etc/openldap/schema/collective.schema

    include /opt/openldap/etc/openldap/schema/corba.schema

    include /opt/openldap/etc/openldap/schema/cosine.schema

    include /opt/openldap/etc/openldap/schema/duaconf.schema

    include /opt/openldap/etc/openldap/schema/dyngroup.schema

    include /opt/openldap/etc/openldap/schema/inetorgperson.schema

    include /opt/openldap/etc/openldap/schema/java.schema

    include /opt/openldap/etc/openldap/schema/misc.schema

    include /opt/openldap/etc/openldap/schema/nis.schema

    include /opt/openldap/etc/openldap/schema/openldap.schema

    include /opt/openldap/etc/openldap/schema/ppolicy.schema

    include /opt/openldap/etc/openldap/schema/pmi.schema


    pidfile /opt/openldap/var/run/slapd.pid

    argsfile /opt/openldap/var/run/slapd.args


    loglevel 256

    logfile  /opt/openldap/var/logs/slapd.log


    database mdb

    maxsize 1073741824

    suffix "dc=example,dc=com"

    rootdn "cn=Manager,dc=example,dc=com"

    rootpw secret

    directory /opt/openldap/var/openldap-data

    index objectClass eq

    HERE

    注意:

    include schema的顺序有依赖,不能随意打乱;

    suffix,rootdn是要定义的域,这里定义了一个example.com的域;

    rootpw是域管理员密码,默认是明文的secret, 可以用slappasswd加密(slappasswd -s secret)

    提示:mdb具有hdb,bdb的所有功能和优势并且无需任何调优就能达到最优的性能,是openldap官方推荐的存储方式,详见

    http://www.openldap.org/doc/admin24/backends.html#LMDB

    The mdb backend to slapd(8) is the recommended primary backend for a normal slapd database. It uses OpenLDAP's own Lightning Memory-Mapped Database (LMDB) library to store data and is intended to replace the Berkeley DB backends.

    It supports indexing like the BDB backends, but it uses no caching and requires no tuning to deliver maximum search performance. Like hdb, it is also fully hierarchical and supports subtree renames in constant time.

    2.启用日志

    mkdir -p /opt/openldap/var/logs

    cat >/etc/rsyslog.d/openldap.conf <<HERE

    local4.* /opt/openldap/var/logs/slapd.log

    HERE

    service rsyslog restart

    3.日志rotate

    cat >/etc/logrotate.d/slapd <<HERE

    /opt/openldap/var/logs/*log {

    missingok

    compress

    notifempty

    daily

    rotate 5

    create 0600 root root

    }

    HERE

    4.转换slapd.conf格式到新语法格式slapd-config
    mkdir -p /opt/openldap/etc/openldap/slapd.d 
    /opt/openldap/sbin/slaptest -f /opt/openldap/etc/openldap/slapd.conf -F /opt/openldap/etc/openldap/slapd.d

    root@jlive:~#/opt/openldap/sbin/slaptest -f /opt/openldap/etc/openldap/slapd.conf -F /opt/openldap/etc/openldap/slapd.d

    57338694 mdb_monitor_db_open: monitoring disabled; configure monitor database to enable

    config file testing succeeded

    5.重启slapd

    service slapd restart

    6.初始化域

    ldapadd -x -D  'cn=Manager,dc=example,dc=com' -w secret  <<HERE

    # Organization for Example Corporation

    dn: dc=example,dc=com

    objectClass: dcObject

    objectClass: organization

    dc: example

    o: Example Corporation

    description: The Example Corporation


    # Organizational Role for Directory Manager

    dn: cn=Manager,dc=example,dc=com

    objectClass: organizationalRole

    cn: Manager

    description: Directory Manager

    HERE

     

    -x  #简单验证

    -D #bind DN

    -W #弹出密码提示

    -w #bind DN密码

    root@jlive:~#ldapsearch -x -LLL -H ldap:/// -b dc=example,dc=com dn

    dn: dc=example,dc=com

    dn: cn=Manager,dc=example,dc=com

    或者将内容保存为ldifhttp://www.openldap.org/doc/admin24/dbtools.html

    cat >Manager.ldif  <<HERE

    # Organization for Example Corporation

    dn: dc=example,dc=com

    objectClass: dcObject

    objectClass: organization

    dc: example

    o: Example Corporation

    description: The Example Corporation


    # Organizational Role for Directory Manager

    dn: cn=Manager,dc=example,dc=com

    objectClass: organizationalRole

    cn: Manager

    description: Directory Manager

    HERE

    ldapadd -x -c -D  'cn=Manager,dc=example,dc=com' -w secret -f Manager.ldif

    注意:两个不同的dn之间要用空行隔开,否则会报语法错误,-c非常有用,有报错继续


    五.常用操作
    1.添加条目--ldapadd

    cat >add_content.ldif <<HERE

    dn: ou=People,dc=example,dc=com

    objectClass: organizationalUnit

    ou: People


    dn: ou=Groups,dc=example,dc=com

    objectClass: organizationalUnit

    ou: Groups


    dn: cn=miners,ou=Groups,dc=example,dc=com

    objectClass: posixGroup

    cn: miners

    gidNumber: 5000


    dn: uid=john,ou=People,dc=example,dc=com

    objectClass: inetOrgPerson

    objectClass: posixAccount

    objectClass: shadowAccount

    uid: john

    sn: Doe

    givenName: John

    cn: John Doe

    displayName: John Doe

    uidNumber: 10000

    gidNumber: 5000

    userPassword: johnldap

    gecos: John Doe

    loginShell: /bin/bash

    homeDirectory: /home/john

    mail: john@example.com

    HERE

    ldapadd -x -D  'cn=Manager,dc=example,dc=com' -w secret -f add_content.ldif 

      

    root@jlive:~#ldapsearch -x -LLL -b dc=example,dc=com 'uid=john' cn gidNumber

    dn: uid=john,ou=People,dc=example,dc=com

    cn: John Doe

    gidNumber: 5000

    看到如上输出,说明OpenLDAP工作正常


    2.查询条目--ldapsearch

    root@jlive:~#ldapsearch -x -D 'cn=Manager,dc=example,dc=com' -w secret -b 'uid=jlive,dc=example,dc=com'

    # extended LDIF

    #

    # LDAPv3

    # base with scope subtree

    # filter: (objectclass=*)

    # requesting: ALL

    #


    # jlive, example.com

    dn: uid=jlive,dc=example,dc=com

    objectClass: person

    objectClass: organizationalPerson

    objectClass: inetOrgPerson

    uid: jlive

    cn: jlive

    sn: jlive

    mail: jlive@example.com

    userPassword:: cGFzc3cwcmQ=

    telephoneNumber: 186xxx3079

    homePhone: 02165566666.


    # search result

    search: 2

    result: 0 Success


    # numResponses: 2

    # numEntries: 1


    3.修改条目密码--ldappasswd

    root@jlive:~#ldappasswd -x -D 'cn=Manager,dc=example,dc=com' -W 'uid=jlive,dc=example,dc=com' -S

    New password: 

    Re-enter new password: 

    Enter LDAP Password: 

    root@jlive:~#ldappasswd -x -D 'cn=Manager,dc=example,dc=com' -w secret 'uid=jlive,dc=example,dc=com' -s 123

    -S #提示输入新密码

    -s #指定新密码


    4.修改条目--ldapmodify

    cat >jlive_modify.ldif <<HERE

    dn: uid=jlive,dc=example,dc=com

    changetype: modify

    replace: sn

    sn: liu

    HERE

    ldapmodify -x -D 'cn=Manager,dc=example,dc=com' -w secret -f jlive_modify.ldif 


    root@jlive:~#ldapsearch -x -D 'cn=Manager,dc=example,dc=com' -w secret -b 'uid=jlive,dc=example,dc=com' -LLL

    dn: uid=jlive,dc=example,dc=com

    objectClass: person

    objectClass: organizationalPerson

    objectClass: inetOrgPerson

    uid: jlive

    cn: jlive

    mail: jlive@example.com

    userPassword:: cGFzc3cwcmQ=

    telephoneNumber: 186xxx3079

    homePhone: 02165566666.

    sn: liu


    5.删除条目--ldapdelete

    root@jlive:~# ldapdelete -x -D 'cn=Manager,dc=example,dc=com' -w secret 'uid=jlive,dc=example,dc=com'

    提示:递归删除可以加上-r参数,如ldapdelete -x -D 'cn=Manager,dc=example,dc=com' -w secret  -r  BaseDN


    6.身份确认--ldapwhoami

    root@jlive:~#ldapwhoami -x -D 'cn=Manager,dc=example,dc=com' -w secret 

     

    dn:cn=Manager,dc=example,dc=com




    六.启用SSL/TLS

    http://www.openldap.org/doc/admin24/tls.html

    1.生成自签名证书(略)
    CA,服务器证书创建步骤请参看MariaDB Security

    2.配置SSL/TLS

    cat >>/opt/openldap/etc/openldap/slapd.conf <<HERE

    TLSCACertificateFile  /opt/openldap/etc/cacerts/ca.perm

    TLSCertificateFile    /opt/openldap/etc/certs/openldap.pem

    TLSCertificateKeyFile /opt/openldap/etc/private/openldap.key

    HERE

    3.重启服务

    service slapd restart

    4.测试ldaps

    cat >~/.ldaprc <<HERE

    BASE   dc=example,dc=com

    BINDDN cn=Manager,dc=example,dc=com

    URI    ldaps://192.168.130.254:636

    TLS_CACERT /opt/openldap/etc/cacerts/ca.perm

    HERE

    root@jlive:~#ldapsearch -x -LLL

    dn: dc=example,dc=com

    objectClass: dcObject

    objectClass: organization

    dc: example

    o: Example Corporation

    description: The Example Corporation


    dn: cn=Manager,dc=example,dc=com

    objectClass: organizationalRole

    cn: Manager

    description: Directory Manager


    May 18 00:39:08 jlive slapd[48704]: conn=1027 fd=16 ACCEPT from IP=192.168.130.1:53523 (IP=0.0.0.0:636)

    May 18 00:39:08 jlive slapd[48704]: conn=1027 fd=16 TLS established tls_ssf=256 ssf=256

    May 18 00:39:08 jlive slapd[48704]: conn=1027 op=0 BIND dn="" method=128

    May 18 00:39:08 jlive slapd[48704]: conn=1027 op=0 RESULT tag=97 err=0 text=

    May 18 00:39:08 jlive slapd[48704]: conn=1027 op=1 SRCH base="dc=example,dc=com" scope=2 deref=0 filter="(objectClass=*)"

    May 18 00:39:08 jlive slapd[48704]: conn=1027 op=1 SEARCH RESULT tag=101 err=0 nentries=2 text=

    May 18 00:39:08 jlive slapd[48704]: conn=1027 op=2 UNBIND

     

    May 18 00:39:08 jlive slapd[48704]: conn=1027 fd=16 closed

    注意:对于ldaps协议,openldap自带的工具要指定ca证书后才能正常查询,或者在~/.ldaprc(或ldap.conf)用户客户端配置文件中加入TLS_REQCERT never来接受所有非权威CA认证的服务器证书





    GUI管理工具

    请参看OpenLDAP GUI管理工具

  • 相关阅读:
    SpringMVC源码阅读-通过画图理解初始化(十一)
    通过Stratus 服务器在Flash Player中使用RTMFP 开发P2P应用
    Lucene 学习资料
    LIRe 源代码分析 3:基本接口(ImageSearcher)
    LIRe 源代码分析 2:基本接口(DocumentBuilder)
    LIRe 源代码分析 1:整体结构
    Media Player Classic
    ffdshow 源代码分析 5: 位图覆盖滤镜(总结)
    ITU-T Technical Paper: 测量QoS的基本网络模型
    ITU-T Technical Paper: QoS 测量 (目标,方法,协议)
  • 原文地址:https://www.cnblogs.com/lixuebin/p/10814089.html
Copyright © 2020-2023  润新知