zoukankan      html  css  js  c++  java
  • open-ldap服务安装(1)

    LDAP简介

      LDAP 代表 轻量级目录访问协议。在我的理解中ldap就是一个数据库。

      在LDAP中,目录条目以分层树状结构排序。

      传统上,这种结构反映了地理和组织边界,表示国家/地区的条目显示在树的顶部。下面是代表各州和国家组织的条目。它们下面可能是表示组织单位,人员,打印机,文档或您可以想到的任何其他内容的条目。图1.1显示了使用传统命令的实例LDAP目录树。

      

      而现在一般使用基于域名来显示,因为它允许使用DNS定位目录服务图1.2显示了使用基于域的命名的LDAP目录树示例。

    LDAP使用场景

      我暂时只用到了统一身份验证。

    安装OPEN-LDAP

    yum安装(首先需要epel源)

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

     目录结构

    [root@zabbix1 openldap]# pwd
    /etc/openldap
    [root@zabbix1 openldap]# tree
    .
    ├── certs
    │   ├── cert8.db
    │   ├── key3.db
    │   ├── password
    │   └── secmod.db
    ├── check_password.conf
    ├── ldap.conf
    ├── schema
    │   ├── collective.ldif
    │   ├── collective.schema
    │   ├── corba.ldif
    │   ├── corba.schema
    │   ├── core.ldif
    │   ├── core.schema
    │   ├── cosine.ldif
    │   ├── cosine.schema
    │   ├── duaconf.ldif
    │   ├── duaconf.schema
    │   ├── dyngroup.ldif
    │   ├── dyngroup.schema
    │   ├── inetorgperson.ldif
    │   ├── inetorgperson.schema
    │   ├── java.ldif
    │   ├── java.schema
    │   ├── misc.ldif
    │   ├── misc.schema
    │   ├── nis.ldif
    │   ├── nis.schema
    │   ├── openldap.ldif
    │   ├── openldap.schema
    │   ├── pmi.ldif
    │   ├── pmi.schema
    │   ├── ppolicy.ldif
    │   └── ppolicy.schema
    └── slapd.d
        ├── cn=config
        │   ├── cn=schema
        │   │   ├── cn={0}core.ldif
        │   │   ├── cn={1}cosine.ldif
        │   │   ├── cn={2}nis.ldif
        │   │   └── cn={3}inetorgperson.ldif
        │   ├── cn=schema.ldif
        │   ├── olcDatabase={0}config.ldif
        │   ├── olcDatabase={-1}frontend.ldif
        │   ├── olcDatabase={1}monitor.ldif
        │   └── olcDatabase={2}hdb.ldif
        └── cn=config.ldif
    
    5 directories, 42 files
      /etc/openldap/slapd.conf:OpenLDAP的主配置文件,记录根域信息,管理员名称,密码,日志,权限等
      /etc/openldap/slapd.d/*:这下面是/etc/openldap/slapd.conf配置信息生成的文件,每修改一次配置信息,这里的东西就要重新生成
      /etc/openldap/schema/*:OpenLDAP的schema存放的地方
      /var/lib/ldap/*:OpenLDAP的数据文件
      /usr/share/openldap-servers/DB_CONFIG.example 模板数据库配置文件
      /usr/share/openldap-servers/slapd.ldif 模板配置文件
      OpenLDAP监听的端口:
      默认监听端口:389(明文数据传输)
      加密监听端口:636(密文数据传输)

    初始化OpenLDAP的配置

    修改CN,DC,DC,添加

    olcRootPW 管理员密码 可以明文 可以密文  slappasswd生成密文密码
    [root@zabbix1 openldap-servers]# cd /usr/share/openldap-servers

     [root@zabbix1 lib]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

    [root@zabbix1 openldap-servers]# cat slapd.ldif 
    #
    # See slapd-config(5) for details on configuration options.
    # This file should NOT be world readable.
    #
    
    dn: cn=config
    objectClass: olcGlobal
    cn: config
    olcArgsFile: /var/run/openldap/slapd.args
    olcPidFile: /var/run/openldap/slapd.pid
    #
    # TLS settings
    #
    olcTLSCACertificatePath: /etc/openldap/certs
    olcTLSCertificateFile: "OpenLDAP Server"
    olcTLSCertificateKeyFile: /etc/openldap/certs/password
    #
    # Do not enable referrals until AFTER you have a working directory
    # service AND an understanding of referrals.
    #
    #olcReferral: ldap://root.openldap.org
    #
    # Sample security restrictions
    #    Require integrity protection (prevent hijacking)
    #    Require 112-bit (3DES or better) encryption for updates
    #    Require 64-bit encryption for simple bind
    #
    #olcSecurity: ssf=1 update_ssf=112 simple_bind=64
    
    
    #
    # Load dynamic backend modules:
    # - modulepath is architecture dependent value (32/64-bit system)
    # - back_sql.la backend requires openldap-servers-sql package
    # - dyngroup.la and dynlist.la cannot be used at the same time
    #
    
    #dn: cn=module,cn=config
    #objectClass: olcModuleList
    #cn: module
    #olcModulepath:    /usr/lib/openldap
    #olcModulepath:    /usr/lib64/openldap
    #olcModuleload: accesslog.la
    #olcModuleload: auditlog.la
    #olcModuleload: back_dnssrv.la
    #olcModuleload: back_ldap.la
    #olcModuleload: back_mdb.la
    #olcModuleload: back_meta.la
    #olcModuleload: back_null.la
    #olcModuleload: back_passwd.la
    #olcModuleload: back_relay.la
    #olcModuleload: back_shell.la
    #olcModuleload: back_sock.la
    #olcModuleload: collect.la
    #olcModuleload: constraint.la
    #olcModuleload: dds.la
    #olcModuleload: deref.la
    #olcModuleload: dyngroup.la
    #olcModuleload: dynlist.la
    #olcModuleload: memberof.la
    #olcModuleload: pcache.la
    #olcModuleload: ppolicy.la
    #olcModuleload: refint.la
    #olcModuleload: retcode.la
    #olcModuleload: rwm.la
    #olcModuleload: seqmod.la
    #olcModuleload: smbk5pwd.la
    #olcModuleload: sssvlv.la
    #olcModuleload: syncprov.la
    #olcModuleload: translucent.la
    #olcModuleload: unique.la
    #olcModuleload: valsort.la
    
    
    #
    # Schema settings
    #
    
    dn: cn=schema,cn=config
    objectClass: olcSchemaConfig
    cn: schema
    
    include: file:///etc/openldap/schema/core.ldif
    
    #
    # Frontend settings
    #
    
    dn: olcDatabase=frontend,cn=config
    objectClass: olcDatabaseConfig
    objectClass: olcFrontendConfig
    olcDatabase: frontend
    #
    # Sample global access control policy:
    #    Root DSE: allow anyone to read it
    #    Subschema (sub)entry DSE: allow anyone to read it
    #    Other DSEs:
    #        Allow self write access
    #        Allow authenticated users read access
    #        Allow anonymous users to authenticate
    #
    #olcAccess: to dn.base="" by * read
    #olcAccess: to dn.base="cn=Subschema" by * read
    #olcAccess: to *
    #    by self write
    #    by users read
    #    by anonymous auth
    #
    # if no access controls are present, the default policy
    # allows anyone and everyone to read anything but restricts
    # updates to rootdn.  (e.g., "access to * by * read")
    #
    # rootdn can always read and write EVERYTHING!
    #
    
    #
    # Configuration database
    #
    
    dn: olcDatabase=config,cn=config
    objectClass: olcDatabaseConfig
    olcDatabase: config
    olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,c
     n=auth" manage by * none
    
    #
    # Server status monitoring
    #
    
    dn: olcDatabase=monitor,cn=config
    objectClass: olcDatabaseConfig
    olcDatabase: monitor
    olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,c
     n=auth" read by dn.base="cn=root,dc=test,dc=com" read by * none
    
    #
    # Backend database definitions
    #
    
    dn: olcDatabase=hdb,cn=config
    objectClass: olcDatabaseConfig
    objectClass: olcHdbConfig
    olcDatabase: hdb
    olcSuffix: dc=test,dc=com
    olcRootDN: cn=root,dc=test,dc=com
    olcRootPW: 1234qwer
    olcDbDirectory:    /var/lib/ldap
    olcDbIndex: objectClass eq,pres
    olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub

    导入配置数据库

    [root@zabbix1 openldap-servers]# slapadd  -n 0 -F /etc/openldap/slapd.d -l /usr/share/openldap-servers/slapd.ldif 
    _#################### 100.00% eta   none elapsed            none fast!         
    Closing DB...

    启动slapd

    1.第一种(因为上面我们使用了明文,所以这里有个警告)

    [root@zabbix1 cn=config]# slapd -F /etc/openldap/slapd.d
    tlsmc_get_pin: INFO: Please note the extracted key file will not be protected with a PIN any more, however it will be still protected at least by file permissions.

    2.第二种

    [root@zabbix1 system]# systemctl  status slapd
    ● slapd.service - OpenLDAP Server Daemon
       Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
       Active: failed (Result: exit-code) since Tue 2018-10-16 16:16:36 CST; 4min 43s ago
         Docs: man:slapd
               man:slapd-config
               man:slapd-hdb
               man:slapd-mdb
               file:///usr/share/doc/openldap-servers/guide.html
      Process: 16640 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=1/FAILURE)
     Main PID: 15521 (code=exited, status=0/SUCCESS)
    
    Oct 16 16:16:36 zabbix1 check-config.sh[16640]: Read/write permissions for DB file '/var/lib/ldap/log.0000000001' are required.
    Oct 16 16:16:36 zabbix1 runuser[16665]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
    Oct 16 16:16:36 zabbix1 runuser[16665]: pam_unix(runuser:session): session closed for user ldap
    Oct 16 16:16:36 zabbix1 check-config.sh[16640]: Read/write permissions for DB file '/var/lib/ldap/id2entry.bdb' are required.
    Oct 16 16:16:36 zabbix1 runuser[16667]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
    Oct 16 16:16:36 zabbix1 check-config.sh[16640]: Read/write permissions for DB file '/var/lib/ldap/dn2id.bdb' are required.
    Oct 16 16:16:36 zabbix1 systemd[1]: slapd.service: control process exited, code=exited status=1
    Oct 16 16:16:36 zabbix1 systemd[1]: Failed to start OpenLDAP Server Daemon.
    Oct 16 16:16:36 zabbix1 systemd[1]: Unit slapd.service entered failed state.
    Oct 16 16:16:36 zabbix1 systemd[1]: slapd.service failed.

    权限问题

    [root@zabbix1 lib]# chown  -R ldap.ldap /etc/openldap/
    [root@zabbix1 lib]# chown  -R ldap.ldap /var/lib/ldap/
    [root@zabbix1 lib]# systemctl   start   slapd
    [root@zabbix1 lib]# systemctl   status    slapd
    ● slapd.service - OpenLDAP Server Daemon
       Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
       Active: active (running) since Tue 2018-10-16 16:24:19 CST; 2s ago
         Docs: man:slapd
               man:slapd-config
               man:slapd-hdb
               man:slapd-mdb
               file:///usr/share/doc/openldap-servers/guide.html
      Process: 16846 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS)
      Process: 16817 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)
     Main PID: 16849 (slapd)
       CGroup: /system.slice/slapd.service
               └─16849 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///
    
    Oct 16 16:24:19 zabbix1 runuser[16835]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
    Oct 16 16:24:19 zabbix1 runuser[16837]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
    Oct 16 16:24:19 zabbix1 runuser[16839]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
    Oct 16 16:24:19 zabbix1 runuser[16839]: pam_unix(runuser:session): session closed for user ldap
    Oct 16 16:24:19 zabbix1 runuser[16841]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
    Oct 16 16:24:19 zabbix1 runuser[16843]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
    Oct 16 16:24:19 zabbix1 slapd[16846]: @(#) $OpenLDAP: slapd 2.4.44 (May 16 2018 09:55:53) $
                                                  mockbuild@c1bm.rdu2.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd
    Oct 16 16:24:19 zabbix1 slapd[16849]: slapd starting
    Oct 16 16:24:19 zabbix1 systemd[1]: Started OpenLDAP Server Daemon.

    测试

    [root@zabbix1 lib]# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
    # extended LDIF
    #
    # LDAPv3
    # base <> with scope baseObject
    # filter: (objectclass=*)
    # requesting: namingContexts 
    #
    
    #
    dn:
    namingContexts: dc=test,dc=com
    
    # search result
    search: 2
    result: 0 Success
    
    # numResponses: 2
    # numEntries: 1

     导入一些基本schema

      默认已经导入了core.schema

    [root@zabbix1 schema]# 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@zabbix1 schema]# 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@zabbix1 schema]# 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"

    创建用户

     

    [root@zabbix1 ~]# cat base.ldif 
    dn: dc=test,dc=com
    o: ilan com
    dc: test
    objectClass: top
    objectClass: dcObject
    objectclass: organization
    
    dn: cn=root,dc=test,dc=com
    cn: root
    objectClass: organizationalRole
    description: Directory Manager
    
    dn: ou=People,dc=test,dc=com
    ou: People
    objectClass: top
    objectClass: organizationalUnit
    
    dn: ou=Group,dc=test,dc=com
    ou: Group
    objectClass: top
    objectClass: organizationalUnit
    
    
    [root@zabbix1 ~]# ldapadd -x -w "1234qwer" -D "cn=root,dc=test,dc=com" -f /root/base.ldif
    adding new entry "dc=test,dc=com"
    
    adding new entry "cn=root,dc=test,dc=com"
    
    adding new entry "ou=People,dc=test,dc=com"
    
    adding new entry "ou=Group,dc=test,dc=com"
    
    
    [root@zabbix1 ~]# ldapadd -x -w "1234qwer" -D "cn=root,dc=test,dc=com" -f /root/user.ldif 
    adding new entry "uid=test,ou=People,dc=test,dc=com"
    
    [root@zabbix1 ~]# cat user.ldif 
    dn: uid=test,ou=People,dc=test,dc=com
    objectClass: inetOrgPerson
    objectClass: posixAccount
    objectClass: shadowAccount
    cn: test
    sn: test
    userPassword: 1234qwer
    loginShell: /bin/bash
    uidNumber: 10007
    gidNumber: 10002
    homeDirectory: /home/test
    mail: test@test.com

    查看结果

    客户端工具为LDAP Admin

  • 相关阅读:
    坐火车/长途汽车去
    图书管理系统设计
    电梯演说模板练习
    敏捷开发
    团队形式
    android app demo
    classic code review
    code review
    阅读思考
    单元测试
  • 原文地址:https://www.cnblogs.com/lfdblog/p/9798004.html
Copyright © 2011-2022 走看看