OpenLdap Server 搭建

1. LDAP简介

OpenLDAP官网  https://www.openldap.org/

Ldap中文网  http://www.ldap.org.cn/

LDAP的特点

1.LDAP 是一种网络协议而不是数据库,而且LDAP的目录不是关系型的,没有RDBMS那么复杂,
2.LDAP不支持数据库的Transaction机制,纯粹的无状态、请求-响应的工作模式。
3.LDAP不能存储BLOB,LDAP的读写操作是非对称的,读非常方便,写比较麻烦,
4.LDAP支持复杂的查询过滤器(filter),可以完成很多类似数据库的查询功能。
5.LDAP使用树状结构,接近于公司组织结构、文件目录结构、域名结构等我们耳熟能详的东东。 LDAP使用简单、接口标准,并支持SSL访问。

LDAP与NIS相比

1.LDAP是标准的、跨平台的,在Windows下也能支持。
2.LDAP支持非匿名的访问,而且有比较复杂的访问控制机制(如ACL),安全性似乎更好一些。
3.LDAP支持很多复杂的查询方式。
4.LDAP的用途较NIS更为广泛,各种服务都可以和LDAP挂钩。

LDAP的主要应用场景

1.网络服务:DNS服务
2.统一认证服务:
3.Linux PAM (ssh, login, cvs. . . )
4.Apache访问控制
5.各种服务登录(ftpd, php based, perl based, python based. . . )
6.个人信息类,如地址簿
7.服务器信息,如帐号管理、邮件服务等

LDAP的基本模型

LDAP的信息是以树型结构存储的,在树根一般定义国家(c=CN)或域名(dc=com),在其下则往往定义一个或多个组织 (organization)(o=Acme)或组织单元(organizational units) (ou=People)。

LDAP目录中的信息是按照树型结构组织,具体信息存储在条目(Entry)中。DN(Distinguished Name)是用来引用条目的,其相当于关系数据库表中的关键字(Primary Key);条目信息由一组属性名(Attribute)和属性值(Values)组成,一个Attribute可以有多个Value。

 

2. LDAP简称对应

  1. o– organization(组织-公司)
  2. ou – organization unit(组织单元-部门)
  3. c - countryName(国家)
  4. dc - domainComponent(域名)                   -- 类比命名空间
  5. sn – suer name(真实名称)                        -- 用户的真是名称
  6. cn - common name(常用名称)                  -- 类比用户的昵称(全名)

3. 目录设计

https://www.cnblogs.com/obpm/archive/2010/08/28/1811065.html

4. Java API

参考文章:https://docs.spring.io/spring-ldap/docs/current/reference/

package com.boy.ldap.driver;

import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import java.util.Hashtable;

public class OpenLdapTools {

    private static final String LDAP_DRIVER = "com.sun.jndi.ldap.LdapCtxFactory";
    private static final String LDAP_URL_PREFIX = "ldap://127.0.0.1/";
    private static final String LDAP_SECURITY_AUTH_TYPE = "simple";
    private static final String ROOT = "dc=maxcrc,dc=com";
    private static final String LDAP_SECURITY_PRINCIPAL = "cn=manager,dc=maxcrc,dc=com";
    private static final String USERNAME = "manager";
    private static final String PASSWORD = "secret";

    /**
     * create connection
     *
     * @return
     */
    public static DirContext getDirContext() {

        Hashtable<String, String> env = new Hashtable();

        env.put(Context.INITIAL_CONTEXT_FACTORY, LDAP_DRIVER);
        env.put(Context.PROVIDER_URL, LDAP_URL_PREFIX + ROOT);
        env.put(Context.SECURITY_AUTHENTICATION, LDAP_SECURITY_AUTH_TYPE);
        env.put(Context.SECURITY_PRINCIPAL, LDAP_SECURITY_PRINCIPAL);
        env.put(Context.SECURITY_CREDENTIALS, PASSWORD);

        DirContext ctx = null;

        try {
            ctx = new InitialDirContext(env);
            System.out.println("ldap authn success.");
            return ctx;
        } catch (NamingException e) {
            System.out.println("ldap authn fail.");
            e.printStackTrace();
        } catch (Exception ex) {
            System.out.println("ldap authn error.");
            ex.printStackTrace();
        }
        return null;
    }

    /**
     * close connection
     * @param ctx
     */
    private static void close (DirContext ctx) {

        if (null != ctx) {
            try {
                ctx.close();
                System.out.println("ldap server connection close!");
                System.exit(0);
            } catch (NamingException e) {
                System.out.println("ldap connection fail.");
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        DirContext dirContext = getDirContext();
        close(dirContext);
    }
}

 

5. 命令行

5.1 查询

ldapsearch -x -H ldap://localhost -b dc=maxcrc,dc=com -D "cn=manager,dc=maxrcr,dc=com" -w secret

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值