精华内容
下载资源
问答
  • ldap主数据
    2021-04-12 23:09:26

    Spring操作LDAP

    增加依赖

    org.springframework.ldap

    spring-ldap-core

    2.1.0.RELEASE

    Java代码

    import org.springframework.ldap.core.AuthenticationSource;

    import org.springframework.ldap.core.LdapTemplate;

    import org.springframework.ldap.core.support.LdapContextSource;

    import javax.naming.InvalidNameException;

    import javax.naming.Name;

    import javax.naming.directory.Attributes;

    import javax.naming.directory.BasicAttribute;

    import javax.naming.directory.BasicAttributes;

    import javax.naming.ldap.LdapName;

    public class LdapDemoTest {

    public static void main(String[] args) throws InvalidNameException {

    LdapContextSource cs = new LdapContextSource();

    cs.setCacheEnvironmentProperties(false);

    cs.setUrl("ldap://*.*.*.*:389");

    cs.setBase("dc=example,dc=org");

    cs.setAuthenticationSource(new AuthenticationSource() {

    public String getCredentials() {

    return "*****";

    }

    public String getPrincipal() {

    return "cn=admin,dc=example,dc=org";

    }

    });

    LdapTemplate template = new LdapTemplate(cs);

    for(int i=0;i<5;i++) {

    createUserEntry(template, "test-"+i, i);

    }

    }

    /**

    * 构造dn.

    * @param secondName username

    * @return dn

    */

    public static LdapName getDn(String secondName) throws InvalidNameException {

    LdapName dn = new LdapName("cn="+secondName);

    return dn;

    }

    /**

    * bind方法即是创建;BasicAttribute 是基本属性,有了类属性之后,才能添加具体的属性.

    * @param template LdapTemplate

    * @param secondName user name

    */

    public static void createUserEntry(LdapTemplate template, String secondName, int i) throws InvalidNameException {

    Name dn = getDn(secondName);

    BasicAttribute baAttr = new BasicAttribute("objectClass");

    baAttr.add("top");

    baAttr.add("person");

    baAttr.add("posixAccount");

    Attributes attrs = new BasicAttributes();

    attrs.put(baAttr);

    attrs.put("cn", secondName);

    attrs.put("sn", secondName);

    attrs.put("uid", secondName);

    attrs.put("uidNumber", String.valueOf(i));

    attrs.put("gidNumber", String.valueOf(i));

    attrs.put("homeDirectory", String.valueOf(i));

    attrs.put("userPassword",secondName);

    template.bind(dn, null, attrs);

    }

    }

    本文参考其余文章改造,非全部原创

    更多相关内容
  • ldap样例数据文件

    2019-12-02 14:22:17
    ldap样例数据,可用来导入。
  • 简单的LDAP搜索 搜索LDAP。 没有什么花哨。 客户端上的薄薄的,有承诺的包装器。安装$ npm install --save simple-ldap-search用法import SimpleLDAP from 'simple-ldap-search' ;const config = { url : 'ldap://...
  • 数据仓库之LDAP

    2021-03-02 03:48:35
    简单说来,LDAP是一个得到关于人或者资源的集中、静态数据的快速方式。LDAP是一个用来发布目录信息到许多不同资源的协议。通常它都作为一个集中的地址本使用,不过根据组织者的需要,它可以做得更加强大。LDAP其实是...
  • 我将尝试发布一个新版本@ # 0.6.7 中的更改 # 导出到 CSV 一个新的 prefs.xml 文件 changeType 的 LDIF 输出:delete LDIF 中显示的记录总数显示 LDIF 中的每条记录的当前记录号,以及具有命名属性 允许删除/移动...
  • LDAP查询数据(JAVA)

    千次阅读 多人点赞 2020-08-30 10:57:05
    公司让从ldap中查询对应得数据,去验证用户得信息,以前没接触过ldap,找了找网上其他人写得也不太全,经过几天得研究整理最后完成了,特写下这个方便自己以后来看 提示:以下是本篇文章正文内容,下面案例可供参考 ...

     

    文章目录


    前言

    公司让从ldap中查询对应得数据,去验证用户得信息,以前没接触过ldap,找了找网上其他人写得也不太全,经过几天得研究整理最后完成了,特写下这个方便自己以后来看


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、LDAP是什么?

    • 首先要先理解什么是LDAP,当时我看了很多解释,也是云里雾里,弄不清楚。在这里给大家稍微捋一捋。
    • 首先LDAP是一种通讯协议,LDAP支持TCP/IP。协议就是标准,并且是抽象的。在这套标准下,AD(Active Directory)是微软出的一套实现。
      那AD是什么呢?暂且把它理解成是个数据库。也有很多人直接把LDAP说成数据库(可以把LDAP理解成存储数据的数据库)。像是其他数据库一样,LDAP也是有client端和server端。server端是用来存放资源,client端用来操作增删改查等操作。
    • 而我们通常说的LDAP是指运行这个数据库的服务器。
    • 可以简单理解AD =LDAP服务器+LDAP应用。

    那LDAP这种数据库有什么特殊的呢?

    • 我们知道,像MySQL数据库,数据都是按记录一条条记录存在表中。而LDAP数据库,是树结构的,数据存储在叶子节点上。 
    总结一下LDAP树形数据库如下:
    dn :一条记录的详细位置
    dc :一条记录所属区域    (哪一颗树)
    ou :一条记录所属组织    (哪一个分支)
    cn/uid:一条记录的名字/ID   (哪一个苹果名字)
    LDAP目录树的最顶部就是根,也就是所谓的“基准DN"。

    二、使用JAVA连接LDAP

    1.通过自定义工具类连接(已成功连接)

    代码如下(示例):

    
     import lombok.extern.slf4j.Slf4j;
    
    import javax.naming.AuthenticationException;
    import javax.naming.Context;
    import javax.naming.NamingEnumeration;
    import javax.naming.NamingException;
    import javax.naming.directory.Attribute;
    import javax.naming.directory.SearchControls;
    import javax.naming.directory.SearchResult;
    import javax.naming.ldap.Control;
    import javax.naming.ldap.InitialLdapContext;
    import javax.naming.ldap.LdapContext;
    import java.util.Hashtable;
    
    /**
      * @Date 2020/8/28 16:06
     */
    @Slf4j
    public class LdapStore {
    
        private static final String TAG = "----- LdapStore -----";
    
        private static LdapContext ctx = null;
        private static Control[] connCtls = null;
    
     
        /**** 定义LDAP的基本连接信息 ******/
        // LDAP的连接地址(ldap://ip:port/)port默认为389
        private static String URL = "";
        // LDAP的根DN
        private static String BASEDN = "DC=?,DC=?,DC=?";
        // LDAP的连接账号(身份认证管理平台添加的应用账号,应用账号格式:uid=?,ou=?,dc=????)
    //    private static String PRINCIPAL = "uid=?,ou=?,dc=?,dc=?,dc=?";
        private static String PRINCIPAL = "";
        // LDAP的连接账号的密码(身份认证管理平台添加的应用账号的密码)
        private static String PASSWORD = "";
    
        public void getCtx() {
            if(ctx!=null){
                return;
            }
            log.info("InitialLdapContext ");
            Hashtable<String, String> env = new Hashtable<String, String>();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, URL  + BASEDN );
            env.put(Context.SECURITY_AUTHENTICATION, "simple");
            env.put(Context.SECURITY_PRINCIPAL, PRINCIPAL );
            env.put(Context.SECURITY_CREDENTIALS, PASSWORD );
    
            try {
                // 链接ldap
                ctx = new InitialLdapContext(env, connCtls);
            } catch (AuthenticationException e) {
                log.error(TAG + "Authentication faild: " + e.toString());
                e.printStackTrace();
                throw new XxlSsoException("连接ldap异常,请联系管理员");
            } catch (Exception e) {
                log.error(TAG + "Something wrong while authenticating: " + e.toString());
                e.printStackTrace();
                throw new XxlSsoException("连接ldap异常,请联系管理员");
            }
        }
    
        public void closeCtx() {
            try {
                if (ctx != null){
                    //关闭连接
                    ctx.close();
                    ctx = null;
                    //重新获取连接
                    getCtx();
                }
            } catch (NamingException ex) {
                ex.printStackTrace();
            }
        }
    
        public String getUserDN(String uid, UserResponse userResponse) {
            String userDN = "";
            SearchControls constraints = new SearchControls();
            try {
                constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
                String[] attrPersonArray = {"cn", "mail"};
                constraints.setReturningAttributes(attrPersonArray);
                //因为我是通过mailNickname 来查询得,根据自己得需要来更改
                NamingEnumeration<SearchResult> en = ctx.search("", "mailNickname=" + uid, constraints);
                if (en == null) {
                    log.error(TAG + "Have no NamingEnumeration.");
                }
                if (!en.hasMoreElements()) {
                    log.error(TAG + "Have no element.");
                }
                while (en != null && en.hasMoreElements()) {
                    SearchResult result = en.next();
                    userDN += result.getName();
                    userDN += "," + properties.getBASEDN();
                    NamingEnumeration<? extends Attribute> attrs = result.getAttributes().getAll();
                    while (attrs.hasMore()) {
                        Attribute attr = attrs.next();
                        if (attr.getID().equals("cn")) {
                            userResponse.setAccountName((String) attr.get());
                        }
                        if (attr.getID().equals("mail")) {
                            userResponse.setMail((String) attr.get());
                        }
                    }
                }
            } catch (Exception e) {
                log.error(TAG + "Exception in search():" + e);
                e.printStackTrace();
                closeCtx();
                throw new XxlSsoException("连接ldap异常,请联系管理员");
            }
    
            return userDN;
        }
    
    
        // 校验用户名密码的方法
        public UserResponse authenticate(String usr, String pwd) {
            UserResponse userResponse = new UserResponse();
            boolean valide = false;
            getCtx();
            String userDN = getUserDN(usr, userResponse);
            if ("".equals(userDN) || userDN == null) {
                userResponse.setValid(false);
                return userResponse;
            }
            try {
                ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDN);
                ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, pwd);
                ctx.reconnect(connCtls);
                valide = true;
            } catch (AuthenticationException e) {
                log.error(TAG + userDN + " is not authenticated");
                log.error(TAG + e.toString());
                closeCtx();
                valide = false;
            } catch (NamingException e) {
                log.error(TAG + userDN + " is not authenticated");
                closeCtx();
                valide = false;
            }
            userResponse.setValid(valide);
            return userResponse;
        }
    
    无需引入什么包
    • 2.使用官方提供得方式


    通过Spring 提供得包来处理(未成功,待研究)

      需要引入包

    <dependency>
        <groupId>org.springframework.ldap</groupId>
        <artifactId>spring-ldap-core</artifactId>
        <version>2.3.2.RELEASE</version>
    </dependency>
     以下为找得其他人写得连接
     
    /**
      * @Date 2020/8/28 19:50
     */
    
    import lombok.Data;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.ldap.core.DirContextOperations;
    import org.springframework.ldap.core.LdapTemplate;
    import org.springframework.ldap.core.support.LdapContextSource;
    import org.springframework.ldap.filter.AndFilter;
    import org.springframework.ldap.filter.EqualsFilter;
    import org.springframework.ldap.support.LdapUtils;
    
    import javax.naming.directory.DirContext;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * LDAP 的自动配置类
     * <p>
     * 完成连接 及LdapTemplate生成
     */
    @Configuration
    @Data
    public class LdapConfiguration {
    
    
        private LdapTemplate ldapTemplate;
        @Value("${ldap.url}")
        private String URL;
    
        @Value("${ldap.BASEDN}")
        private String BASEDN;
    
        @Value("${ldap.PRINCIPAL}")
        private String PRINCIPAL;
    
        @Value("${ldap.PASSWORD}")
        private String PASSWORD;
    
        @Bean
        public LdapContextSource contextSource() {
            LdapContextSource contextSource = new LdapContextSource();
            Map<String, Object> config = new HashMap();
            System.out.println("init " + URL);
    
            contextSource.setUrl(URL);
            contextSource.setBase(BASEDN);
            contextSource.setUserDn(PRINCIPAL);
            contextSource.setPassword(PASSWORD);
            //  解决 乱码 的关键一句
            config.put("java.naming.ldap.attributes.binary", "objectGUID");
            contextSource.setPooled(true);
            contextSource.setBaseEnvironmentProperties(config);
            return contextSource;
        }
    
        @Bean
        public LdapTemplate ldapTemplate() {
            if (null == ldapTemplate)
                ldapTemplate = new LdapTemplate(contextSource());
            return ldapTemplate;
        }
    
    
    
    }
    查看ldap工具
    官网文档:Spring LDAP Reference墙裂推荐一个好用得连接ldap的ide
    链接:https://pan.baidu.com/s/1_I6ThYLTpSYBx3hbz6iEZg 
    提取码:ade8

    总结

    因为ldap的文章也不是很多,有的例子给的有问题,如果您有幸看到这个篇,请鼓励下作者点个赞在走,有问题咨询直接评论就是

    最新的连接池的版本传送门:LDAP查询数据——LDAP连接池 (JAVA)_起名要有深意的博客-CSDN博客_ldap连接池提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、连接池是什么?二、使用步骤1.引入库2.读入数据总结前言接上一个文章,因为上一个是直接连接的没有使用spring提供的JAR包,导致实际使用中总会有连接超时异常,测试给提了bug,刚开始准备自己写一个连接池,后来尝试了下算了,不重复造轮子了,自己写也不一定写的好,因此不得不去研究下LDAP连接池的一、连接池是什么?连接池是创建和管理一个连接的缓冲池的技术,这...https://blog.csdn.net/qq_34605063/article/details/108979864?spm=1001.2014.3001.5501

    展开全文
  • 基于LDAP的XML数据访问

    2018-08-23 12:20:07
    ldap通讯录和XML通讯录相互查询和同步,支持不同组件协议的查询和认证
  • Ldap数据导出到文件

    2011-06-30 10:58:17
    ldap数据的某个节点下的所有数据进行导出到文件
  • java/springboot读取ldap数据 定义接收数据实体类 package com.demo.entity; import lombok.Data; /** * Created by JiangJunpeng on 2019/10/30.<br> */ @Data public class LdapData { private String...

    java/springboot读取ldap数据

    pom.xml引包

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-ldap</artifactId>
                <version>2.0.4.RELEASE</version>
            </dependency>
    

    定义接收数据实体类

    package com.demo.entity;
    
    import lombok.Data;
    
    /**
     * Created by JiangJunpeng on 2019/10/30.<br>
     */
    @Data
    public class LdapData {
    
        private String realName;
        private String userName;
        private String departmentOu;
        private String email;
        private String telNo;
        private String department;
        private String objectGuid;
        private String dn;
        private String cardId;
    }
    
    

    读取ldap内数据工具类

    package com.demo.util;
    
    import com.lanxum.domas.entity.LdapData;
    import lombok.extern.slf4j.Slf4j;
    
    import javax.naming.Context;
    import javax.naming.NamingEnumeration;
    import javax.naming.directory.Attributes;
    import javax.naming.directory.SearchControls;
    import javax.naming.directory.SearchResult;
    import javax.naming.ldap.*;
    import java.util.ArrayList;
    import java.util.Hashtable;
    import java.util.List;
    
    /**
     * Created by JiangJunpeng on 2020/3/23.<br>
     */
    @Slf4j
    public class SyncLdapData {
    
        public static List<LdapData> ldapData(String syncHost, String userName, String passWord, String ouDc) {
            List<LdapData> ldapDataList = new ArrayList<>();
            LdapContext ctx = null;
            Hashtable<String, String> HashEnv = new Hashtable<>();
    //        HashEnv.put(Context.PROVIDER_URL, "ldap://" + syncHost + ":389");
            HashEnv.put(Context.PROVIDER_URL, syncHost);
            // LDAP访问安全级别(none,simple,strong)
            HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
            //AD的用户名
            HashEnv.put(Context.SECURITY_PRINCIPAL, userName);
            //AD的密码
            HashEnv.put(Context.SECURITY_CREDENTIALS, passWord);
            HashEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            //连接超时设置为3秒
            HashEnv.put("com.sun.jndi.ldap.connect.timeout", "3000");
            int pageSize = 1000;
            try {
                // 初始化连接
                ctx = new InitialLdapContext(HashEnv, null);
                // 设置分页大小
                ctx.setRequestControls(new Control[]{new PagedResultsControl(pageSize, Control.CRITICAL)});
                // 查询过滤器
                String filter = "(&(objectcategory=person)(objectclass=user))";
                SearchControls searchControls = new SearchControls();
                searchControls.setCountLimit(pageSize);
                // 设置查询该树和子树的数据
                searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
                // 设置返回值
                String[] s = {"cn", "ou", "mail", "department", "mobile", "sAMAccountName", "url", "objectGUID"};
                searchControls.setReturningAttributes(s);
                byte[] cookie = null;
                do {
                    // 查询
                    NamingEnumeration<SearchResult> search = ctx.search(ouDc, filter, searchControls);
                    while (search.hasMoreElements()) {
                        LdapData tempData = new LdapData();
                        SearchResult next = search.next();
    //                    log.info(next.toString());
                        Attributes attributes = next.getAttributes();
                        if (attributes.get("cn") != null) {
                            String cn = attributes.get("cn").toString();
                            tempData.setRealName(cn.substring(cn.lastIndexOf(":") + 1).trim());
                        }
                        if (attributes.get("mail") != null) {
                            String mail = attributes.get("mail").toString();
                            tempData.setEmail(mail.substring(mail.lastIndexOf(":") + 1).trim());
                        }
                        if (attributes.get("mobile") != null) {
                            String mobile = attributes.get("mobile").toString();
                            tempData.setTelNo(mobile.substring(mobile.lastIndexOf(":") + 1).trim());
                        }
                        if (attributes.get("url") != null) {
                            String cardId = attributes.get("url").toString();
                            tempData.setCardId(cardId.substring(cardId.lastIndexOf(":") + 1).trim());
                        }
                        if (attributes.get("samaccountName") != null) {
                            String samaccountName = attributes.get("samaccountName").toString();
                            tempData.setUserName(samaccountName.substring(samaccountName.lastIndexOf(":") + 1).trim());
                        }
                        if (attributes.get("department") != null) {
                            String department = attributes.get("department").toString();
                            tempData.setDepartment(department.substring(department.lastIndexOf(":") + 1).trim());
                        }
                        if (attributes.get("objectguid") != null) {
                            String objectguid = attributes.get("objectguid").toString();
                            tempData.setObjectGuid(objectguid.substring(objectguid.lastIndexOf(":") + 1).trim());
                        }
    //                    if (next != null) {
    //                        String data = next.toString();
    //                        String temp = data.substring(0, data.indexOf(":"));
    //                        String dn = temp + "," + ouDc;
    //                        tempData.setDn(dn);
    //                    }
                        String data = next.toString();
                        if (data.contains("OU")) {
                            String ou = data.substring(data.indexOf(",") + 1, data.indexOf(":"));
                            String[] arr = ou.split(",");
                            int length = arr.length;
                            StringBuilder sb = new StringBuilder(ou.length());
                            for (int i = length - 1; i >= 1; i--) {
                                sb.append(arr[i].substring(arr[i].indexOf("=") + 1)).append("-");
                            }
                            sb.append(arr[0].substring(arr[0].indexOf("=") + 1));
                            tempData.setDepartmentOu(sb.toString());
                        } else {
                            tempData.setDepartmentOu(null);
                        }
                        ldapDataList.add(tempData);
                    }
                    Control[] controls = ctx.getResponseControls();
                    if (controls != null) {
                        for (Control control : controls) {
                            if (control instanceof PagedResultsResponseControl) {
                                PagedResultsResponseControl prrc = (PagedResultsResponseControl) control;
                                cookie = prrc.getCookie();
                            }
                        }
                    }
                    // 将cookie信息设置进去,下次查询的时候会在本次查询的基础上向后查询,如果没有cookie了,就说明没有数据了
                    ctx.setRequestControls(new Control[]{new PagedResultsControl(pageSize, cookie, Control.CRITICAL)});
                } while (cookie != null);
    
            } catch (Exception e) {
                log.error("LDAP获取信息失败" + e);
                e.printStackTrace();
            } finally {
                if (null != ctx) {
                    try {
                        ctx.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            return ldapDataList;
        }
    }
    
    

    调用示例

    public static void main(String[] args){
            List<LdapData> ldapData = ldapData("ldap://demo.com", "zhangsan@demo.com", "123456", "OU=test,DC=demo,DC=com");
        }
    
    展开全文
  • ldap主备搭建

    2019-08-06 13:44:42
    172.20.101.110 1234567890 {SSHA}0czCEpE4oFSN5Xunh4nkUOwsNzlmPr0L3 备 172.20.101.111 1234567890 {SSHA}GLwXk3B4ZKD0RzIwrchi119Kv2ZhH9T+1 环境搭建 一、准备环境 1、关闭selinux firefalld ...
    172.20.101.1101234567890{SSHA}0czCEpE4oFSN5Xunh4nkUOwsNzlmPr0L3
    172.20.101.1111234567890{SSHA}GLwXk3B4ZKD0RzIwrchi119Kv2ZhH9T+1

    主环境搭建
    一、准备环境
    1、关闭selinux firefalld
    setenforce 0
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    二、openldap搭建
    1、安装ldap服务器和客户端,migrationtools工具包
    yum install -y openldap-servers openldap-clients migrationtools

    2、设置openldap管理员密码
    slappasswd
    然后根据提示输入密码:
    New password: 1234567890
    Re-enter new password: 1234567890
    会返回加密的密码字符串,保存好这个字符串
    {SSHA}0czCEpE4oFSN5Xunh4nkUOwsNzlmPr0L3

    3、查看安装了哪些文件(如果熟悉目录结构可以忽略)
    rpm -ql openldap
    rpm -ql openldap-servers

    4、修改配置:
    vim /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
    找到olcSuffix,修改为你的dc,如:
    olcSuffix: dc=mypaas,dc=com
    下一行olcRootDN,修改为你的用户名,如:
    olcRootDN: cn=Manager,dc=mypaas,dc=com
    在文件末尾添加一行,设置刚才的密码:
    olcRootPW:{SSHA}0czCEpE4oFSN5Xunh4nkUOwsNzlmPr0L3

    5、更改监控认证配置
    vim /etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif
    olcAccess: {0}to * by dn.base=“gidNumber=0+uidNumber=0,cn=peercred,cn=extern
    al,cn=auth” read by dn.base=“cn=Manager,dc=mypass,dc=com” read by * none

    6、设置DB Cache
    cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
    chown -R ldap:ldap /var/lib/ldap/

    7、测试
    slaptest -u
    末尾出现configfile testing successed 说明成功了

    8、启动openldap和开机启动
    systemctl start slapd.service
    systemctl enable slapd.service

    9、导入模板
    ls /etc/openldap/schema/*.ldif | xargs -I {} sudo ldapadd -Y EXTERNAL -H ldapi:/// -f {}

    10、修改slapd.conf
    11、同步设置:
    systemctl stop slaps

    rm -rf /etc/openldap/slapd/*
    slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ ##出现config file testing syccessded表示成功
    chown -R ldap.ldap /etc/openldap/certs /etc/openldap/ldap.conf /etc/openldap/schema /etc/openldap/slapd.conf /etc/openldap/slapd.d/
    chown -R ldap.ldap /var/lib/ldap
    Systemctl start slapd

    12、一些必须的组设置和调优设置
    我们专门做了一个soft目录,将.ldif放在这里
    [root@ldap-master-101-110 soft]# ll /etc/openldap/soft/
    total 24
    -rw-r–r-- 1 root root 437 Apr 22 10:53 base.ldif
    -rw-r–r-- 1 root root 82 Apr 22 11:18 b.ldif
    -rw-r–r-- 1 root root 240 Apr 22 13:25 disable_anon.ldif
    -rw-r–r-- 1 root root 142 Apr 22 10:47 group.ldif
    -rw-r–r-- 1 root root 409 Apr 22 11:14 pwd.ldif

    压缩文件包含上面ls -l看到的文件

    三、安装web管理服务
    1、安装httpd
    yum install http -y

    2、修改配置文件httpd.conf
    vim /etc/httpd/conf/httpd.conf
    找到AllowOverride一行,修改none为all
    如果想修改端口号,修改Listen 80一行

    3、启动服务,测试页面
    systemctl start httpd.service
    systemctl enable httpd.service
    curl http://127.0.0.1/

    4、安装phpldapadmin
    yum install phpldapadmin

    (如果找不到软件包,重新设置一下yum源)
    yum localinstall http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

    5、修改配置文件
    vim /etc/phpldapadmin/config.php

    找到并取消下面几行的注释:
    $servers->setValue(‘server’,’host’,’127.0.0.1’);
    $servers->setValue(‘server’,’port’,389);
    $servers->setValue(‘server’,’base’,array(‘dc=mypaas,dc=com’));
    (array里加上openldap配置文件中设置的olcSuffix)
    $servers->setValue(‘login’,’auth_type’,’session’);
    KaTeX parse error: Expected 'EOF', got '#' at position 51: …n’); 把它的下一行注释掉 #̲servers->setValue(‘login’,’attr’,’uid’);

    6、修改访问配置文件,允许任意ip访问

    [root@ldap-master-101-110 openldap]# vim /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>

    7、创建基础目录
    在/etc/openldap目录下添加base.ldif文件

    cd /etc/openldap/
    vim base.ldif
    在文件中添加以下内容

    dn: dc=mypaas,dc=com
    o: ldap
    objectclass: dcObject
    objectclass: organization
    dc: mypaas
    (dc 修改为你自己的内容)

    8、重启httpd服务

    systemctl restart httpd.service

    9、访问web管理端
    访问 http://ip/phpldapadmin
    登陆用户名:cn=Manager,dc=mypaas,dc=com

    备环境搭建

    一、准备环境
    1、关闭selinux firefalld
    setenforce 0
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    二、openldap搭建
    1、安装ldap服务器和客户端,migrationtools工具包
    yum install -y openldap-servers openldap-clients migrationtools

    2、设置openldap管理员密码
    slappasswd
    然后根据提示输入密码:
    New password: 1234567890
    Re-enter new password: 1234567890
    会返回加密的密码字符串,保存好这个字符串
    {SSHA}GLwXk3B4ZKD0RzIwrchi119Kv2ZhH9T+1

    3、查看安装了哪些文件(如果熟悉目录结构可以忽略)
    rpm -ql openldap
    rpm -ql openldap-servers

    4、修改配置:
    vim /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
    找到olcSuffix,修改为你的dc,如:
    olcSuffix: dc=mypaas,dc=com
    下一行olcRootDN,修改为你的用户名,如:
    olcRootDN: cn=Manager,dc=mypaas,dc=com
    在文件末尾添加一行,设置刚才的密码:
    olcRootPW:{SSHA}GLwXk3B4ZKD0RzIwrchi119Kv2ZhH9T+1

    5、更改监控认证配置
    vim /etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif
    olcAccess: {0}to * by dn.base=“gidNumber=0+uidNumber=0,cn=peercred,cn=extern
    al,cn=auth” read by dn.base=“cn=Manager,dc=mypass,dc=com” read by * none

    6、设置DB Cache
    cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
    chown -R ldap:ldap /var/lib/ldap/

    7、测试
    slaptest -u
    末尾出现configfile testing successed 说明成功了

    8、启动openldap和开机启动
    systemctl start slapd.service
    systemctl enable slapd.service

    9、导入模板
    ls /etc/openldap/schema/*.ldif | xargs -I {} sudo ldapadd -Y EXTERNAL -H ldapi:/// -f {}

    10、修改slapd.conf
    ldapadd -f base.ldif -x -D cn=Manager,dc=mypaas,dc=com –W
    11、同步设置:
    systemctl stop slaps

    rm -rf /etc/openldap/slapd/*
    slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ ##出现config file testing syccessded表示成功
    chown -R ldap.ldap /etc/openldap/certs /etc/openldap/ldap.conf /etc/openldap/schema /etc/openldap/slapd.conf /etc/openldap/slapd.d/
    chown -R ldap.ldap /var/lib/ldap
    Systemctl start slapd

    12、一些必须的组设置和调优设置
    我们专门做了一个soft目录,将.ldif放在这里
    [root@ldap-master-101-110 soft]# ll /etc/openldap/soft/
    total 24
    -rw-r–r-- 1 root root 437 Apr 22 10:53 base.ldif
    -rw-r–r-- 1 root root 82 Apr 22 11:18 b.ldif
    -rw-r–r-- 1 root root 240 Apr 22 13:25 disable_anon.ldif
    -rw-r–r-- 1 root root 142 Apr 22 10:47 group.ldif
    -rw-r–r-- 1 root root 409 Apr 22 11:14 pwd.ldif

    压缩文件包含上面ls -l看到的文件
    ldapadd -f base.ldif -x -D cn=Manager,dc=mypaas,dc=com –W
    ————————————————————————————————————————————————————

    检查是否同步成功:
    在主ldap上创建一个test.wu的用户,在备上查看是否有此用户的存在
    在主备上使用一下命令查看:
    ldapsearch -x -D “cn=ldap,dc=ptmind,dc=com” -b “dc=ptmind,dc=com” -W | grep dn
    or
    ldapsearch -x -D “cn=ldap,dc=ptmind,dc=com” -b “dc=ptmind,dc=com” -W | grep cn=test.wu

    ————————————————————————————————————————————————————
    ldap迁移
    1、首先根据上面的步骤建立好主备两台ldap服务器
    2、测试同步是否能成功
    3、迁移数据库
    a、备份数据库:
    ldapsearch -x -D “cn=ldap,dc=ptmind,dc=com” -W -b “dc=ptmind,dc=com” -LLL -H ldap:/// >ldapback20190422.ldif
    B、将备份的ldapback20190422.ldif数据库scp到新的主备服务器上
    C、分别在主备服务器上进行如下操作:
    systemctl stop slapd

    清空过往数据

    rm -rf /var/lib/ldap/*

    导入源服务器的数据

    slapadd -l ldapback20190422.ldif

    修改LDAP数据目录权限

    chown -R ldap.ldap /var/lib/ldap

    再次启动ldap服务

    systemctl start slapd

    d、查找导入的数据
    dapsearch -x -D “cn=ldap,dc=ptmind,dc=com” -b “dc=ptmind,dc=com” -W | grep dn


    注意事项:
    1、关于OpenLDAPAdmin管理页面提示“This base cannot be created with PLA“问题
    ldapadd -f base.ldif -x -D cn=Manager,dc=mypaas,dc=com –W
    2、创建base文件的时候后面不能有空格和空行

    ldapadd -Y EXTERNAL -H ldapi:/// -f /root/disable_anon.ldif 导入相关配置

    展开全文
  • Python 读取ldap数据

    2021-10-14 15:02:20
    使用ldap3 读取ldap数据 # coding=utf-8 import json from loguru import logger from ldap3 import Server, Connection, SUBTREE, ALL def ldap_nub(branch): """ 读取ldap数据,将在职(status为1)的数据...
  • LDAP查询数据——LDAP连接池 (JAVA)

    千次阅读 2020-10-09 15:56:46
    读入数据 总结 前言 接上一个文章,因为上一个是直接连接的没有使用spring提供的JAR包,导致实际使用中总会有连接超时异常,测试给提了bug,刚开始准备自己写一个连接池,后来尝试了下算了,不重复造轮子...
  • NULL 博文链接:https://xingba.iteye.com/blog/320031
  • NetAuth LDAP服务器充当桥梁,允许了解LDAP的旧系统获取NetAuth服务器中数据的只读视图。 建议在需要此接口的每个主机上安装NetAuth LDAP服务器,并将其绑定到回送接口。 LDAP桥公开数据的格式与提供给实际NetAuth...
  • 最近花了几天时间研究了下ldap服务器,并且把数据同步到mysql数据库中,下面是写的一个导出工具类package com.util; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming....
  • Spring Data LDAP 项目的主要目标是使使用新数据访问技术(例如非关系数据库,map-reduce框架和基于云的数据服务)的使用Spring支持的应用程序更容易构建。 Spring Data LDAP项目旨在为提供熟悉且一致的存储库抽象。...
  • 特征登录回调以将 ldap 数据存储在您选择的函数中。 功能齐全的登录表单基于 Zend\Ldap 的完全可定制的 ldap 配置基于 Zend\Ldap 服务器阵列的多 LDAP 服务器配置设置要使此模块正常工作,必须执行以下步骤要使此...
  • jxplorer-3.3.1.1 LDAP

    2020-12-18 10:13:03
    jxplorer-3.3.1.1 LDAP数据的连接工具,非常的好用
  • 它通过snmpget来获取数据,...它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善,界面友好。
  • 研究了利用LDAP来表示和访问XML数据的方法,在LDAP上建立一映射层,用来实现LDAP与XML数据之间的转换、查询,提高了对...XML文档可以通过XMLLDAP模型被转换为LDAP数据,能够利用静态的LDAP模式来存储动态的XML文档。
  • E9所有的集成文档,包括CAS、IM、LDAP数据展现集成等
  • NULL 博文链接:https://ssailyang.iteye.com/blog/1248407
  • env.put(Context.PROVIDER_URL,"ldap://localhost:389"); ctx = new InitialDirContext(env); } catch(Exception e){ System.out.println(e.toString()); } } public void reload(){ instance = new test(); } ...
  • ldap组织结构数据同步到mysql

    千次阅读 2020-09-17 15:37:27
    ldap组织结构数据同步到mysql 例子,将以下ldap人员结构图同步到mysql表中 mysql部门表和人员表,建表脚本,以及ldap服务连接信息 DROP TABLE IF EXISTS `sys_department`; CREATE TABLE `sys_department` ( ...
  • #ldap hosts 10.0.13.101 ldap1.conan.com 10.0.13.102 ldap2.conan.com 系统需Java 1.8 及以上版本环境。安装部署opendj3 unzip OpenDJ* sh opendj/setup 拷贝00,99文件 cp 00-core.ldif 99-user.ldif opendj/...
  • 自用LDAP同步

    2017-01-19 23:24:31
    自用LDAP同步
  • 在线QQ客服:1922638专业的SQL Server、MySQL数据库同步软件Oracle向LDAP同步数据,事先要先解决ACL的问题,及LDAP协议中账号密码端口创建,根目录创建,对应导入数组的定义,等工作,才能成功执行以下脚本,不然均...
  • LDAP2V卡 将 LDAP 数据转换为 VCard 文件的 Python 脚本
  • 主从模式 第一种方法,根据低版本...#slapd.conf - Configuration file for LDAP SLAPD ########## # Basics # ########## include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema i.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,135
精华内容 23,654
关键字:

ldap主数据