精华内容
下载资源
问答
  • 用于由非技术用户管理“ ldap域”的Web应用程序(例如,不了解LDAP的用户帐户管理)。
  • 使用ldap实现domain登陆

    千次阅读 2009-04-25 18:03:00
    看了现有两个LDAP开发的框架,JLDAP是像JDBC一样的用法,一般是这样用:需要下载一个叫做ldap.jar的包,在csdn就有 LDAPConnection conn = new LDAPConnection(); try { conn.connect(paramsBean.getHost

    项目要用到域登陆,还不知道是AD还是domino,逼得我要整个地去研究ldap。

    看了现有两个LDAP开发的框架,JLDAP是像JDBC一样的用法,一般是这样用:

    需要下载一个叫做ldap.jar的包,在csdn就有

     

    LDAPConnection conn = new LDAPConnection();
      try
      {
       conn.connect(paramsBean.getHostname(), (int) new Integer(paramsBean
         .getHostport()));
       String distinguishedName = paramsBean.getRoot() + ","
         + paramsBean.getDomain();
       System.out.println(distinguishedName);
       // conn.bind("version","DN","password");
       conn.bind(LDAPConnection.SCOPE_SUB, "cn=kehaoinfo//dengjianbin", password);
       return conn;
      }
      catch (LDAPException le)
      {
       try
       {
        if (conn != null)
         conn.disconnect();
        System.out.println("conn.disconnect()");
       }
       catch (Exception e)
       {
        e.printStackTrace();
       }
       le.printStackTrace();
      }
      finally
      {
       if (conn != null)
        try
        {
         conn.disconnect();
        }
        catch (LDAPException e)
        {
         e.printStackTrace();
        }
      }

     

    而关于openLDAP,可以去看看这个

    http://www.ringkee.com/note/opensource/openldap.htm

     

    我主要要说的,还是ldap的结构,他和现在的数据库结构很不一样,可以参考这个:

    LDAP管理员指南 仅前七章

    去google一下上面这个内容,可以看到。

     

    目录访问主要是通过DN来访问的,只要知道了DN的构成,差不多就能应用ldap来访问ldap服务器了,下面就说一说DN的构成:

    DN="[root,][domain]"

     

    一般网址都是形如:[www|XX].[orgName].[orgType].[country]  的样式,如www.hzau.edu.cn

    这里,DN值的[domain]部分就可以是

    DC=hzau,DC=edu,DC=cn

    这个DN就指向了这个域,可以直接使用这个DN值来遍历所有能访问的entry记录。

     

    一般在一个机构内,都会有把自己按职能分成很多个部门,如后勤部的网址为www.hzau.edu.cn/hqb

    那么,一般这个部门就会有相应的root,root 值一般可由自定义的schema和约定的字段和值组成,如后勤部的成员users属性attribute的root可能是如下值之一:

    OU=users,CN=hqb

    CN=users,CN=hqb

    如果有一个后勤部成员的schema指定了他的name=member,email=member@XXX.xx....等,

    我们就可以使用一个这样的DN指向他

    name=member,CN=users,CN=hqb,DC=hzau,DC=edu,DC=cn

     

    如果使用JNDI访问这个DN,就可以使用过滤直接访问到这个entry并取出他的参数,只要你知道他的schema

     

    这里把我写的代码放出,需要用到dom4j-1.6.1.jar, jaxen-1.1-beta-9.jar, 或更高版本的包。

    /**

     * 主程序,这个是针对AD的,他的用户名有

     */

    public class LDAPBase
    {

     public void getADInfo()
     {
      Hashtable HashEnv = new Hashtable();

      String LDAP_URL = "ldap://192.168.0.3:389"; // LDAP访问地址
      // String adminName = "CN=OAWebUser,CN=Users,DC=Hebmc,DC=com";//AD的用户名

      String adminName = "administrator@khinfo.com"; // 注意用户名的写法:domain/User 或
      // User@domain.com
      String adminPassword = "abcdef"; // 密码

      HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别
      HashEnv.put(Context.SECURITY_PRINCIPAL, adminName); // AD User
      HashEnv.put(Context.SECURITY_CREDENTIALS, adminPassword); // AD
      // Password
      HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,
         "com.sun.jndi.ldap.LdapCtxFactory"); // LDAP工厂类
      HashEnv.put(Context.PROVIDER_URL, LDAP_URL);

      LdapContext ctx = null;
      try
      {
       ctx = new InitialLdapContext(HashEnv, null);
       SearchControls searchCtls = new SearchControls(); // Create the
       // search
       // controls
       searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); // Specify
       // the
       // search
       // scope

       String searchFilter = "objectClass=*"; // specify the LDAP
       // search filter
       // String searchFilter = "objectClass=organizationalUnit";//specify
       // the LDAP search filter

       String searchBase = "CN=ldap,CN=Users,DC=khinfo,DC=com"; // Specify
                      // the
                      // Base
                      // for
       // the
       // search//搜索域节点
       int totalResults = 0;

       // Specify the attributes to return
       // String returnedAtts[] = {"memberOf"};//定制返回属性,要知道他的schema,或使用*
       String returnedAtts[] = {
         // "url", "employeeID",
         "name" // "telephoneNumber",
         // "mobile"//,
         // ,"department"
         ,"mail"     }; // 定制返回属性

       searchCtls.setReturningAttributes(returnedAtts); // 设置返回属性集

       // Search for objects using the filter
       NamingEnumeration answer = ctx.search(searchBase, searchFilter,
                 searchCtls);
       
       while (answer.hasMoreElements())
       {
        SearchResult sr = (SearchResult) answer.next();
        System.out
          .println("************************************************");
        System.out.println(sr.getName());

        Attributes Attrs = sr.getAttributes();
        if (Attrs != null)
        {
         try
         {
          for (NamingEnumeration ne = Attrs.getAll(); ne
            .hasMore();)
          {
           Attribute Attr = (Attribute) ne.next();

           System.out.println("  AttributeID="
             + Attr.getID().toString());

           // 读取属性值
           for (NamingEnumeration e = Attr.getAll(); e
             .hasMore(); totalResults++)
           {
            System.out.println("    AttributeValues="
              + e.next().toString()+"   ");
           }
           System.out.println("    ---------------");

           // 读取属性值
           Enumeration values = Attr.getAll();
           if (values != null)
           { // 迭代
            while (values.hasMoreElements())
            {
             System.out.println("    AttributeValues="
               + values.nextElement());
            }
           }
           System.out.println("    ---------------");
          }
         }
         catch (NamingException e)
         {
          try
          {
           if (ctx != null)
            ctx.close();
          }
          catch (NamingException e1)
          {
           e1.printStackTrace();
          }
          System.err.println("Throw Exception : " + e);
         }
        }
       }
       System.out.println("Number: " + totalResults);
       ctx.close();
      }

      catch (NamingException e)
      {
       try
       {
        if (ctx != null)
         ctx.close();
       }
       catch (NamingException e1)
       {
        e1.printStackTrace();
       }
       e.printStackTrace();
       System.err.println("Throw Exception :  " + e);
      }
      finally
      {
       try
       {
        if (ctx != null)
         ctx.close();
       }
       catch (NamingException e1)
       {
        e1.printStackTrace();
       }
      }
     }

     public static void main(String args[])
     {
      LDAPBase ad = new LDAPBase();
      ad.getADInfo();
     }

    }

    一个BEAN

     

    package ldapbean;

    public class LdapBean
    {
     private String domain;
     private String dn;
     private String hostname;
     private String hostport;
     public String getDomain()
     {
      return domain;
     }
     public void setDomain(String domain)
     {
      this.domain = domain;
     }
     public String getDn()
     {
      return dn;
     }
     public void setDn(String dn)
     {
      this.dn = dn;
     }
     public String getHostname()
     {
      return hostname;
     }
     public void setHostname(String hostname)
     {
      this.hostname = hostname;
     }
     public String getHostport()
     {
      return hostport;
     }
     public void setHostport(String hostport)
     {
      this.hostport = hostport;
     }
    }

    XML:

     

    <?xml version="1.0" encoding="UTF-8"?>
    <list>
     <domain name="domain" decription="域值">khinfo.com</domain>
     <dn name="dn" decription="根节点">CN=ldap,cn=Users,dc=khinfo,dc=com</dn>
     <hostname name="hostname" decription="AD主机名称">192.168.0.3</hostname>
     <hostport name="hostport" decription="AD主机端口">389</hostport>
    </list>

     

    这里参考了别人的代码,记不得那里copy来的了,这里说声谢谢

     

    展开全文
  • 复制一份keystone.conf到domains下,改名为keystone.Ldap.conf //文件名Ldap要和domain的name对应。 chmod 777 domains/ chmod 777 keystone.Ldap.conf 去掉其他所有的配置,只保留: [identity] driver = ldap ...

    1、安装mysql,并修改密码

    2、登录mysql创建数据库并赋权

    mysql -u root -p
    CREATE DATABASE keystone;
    GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'your-password';
    GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'your-password';

    3、安装keystone,设置主机等
    yum install openstack-keystone httpd mod_wsgi
    vi /etc/hosts
    127.0.0.1 controller
    /etc/selinux/config文件
    SELINUX=enforcing改为disabled
    一次性的执行命令setenforce 0,这样不用重启,也可以生效

    4、修改配置文件
    /etc/keystone/keystone.conf
    connection = mysql+pymysql://keystone:your-password@controller/keystone
    provider = fernet

    5、同步数据库表
    su -s /bin/sh -c "keystone-manage db_sync" keystone
    keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
    keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

    6、Bootstrap the Identity service
    keystone-manage bootstrap --bootstrap-password your-password \ --bootstrap-admin-url http://controller:5000/v3/ \ --bootstrap-internal-url http://controller:5000/v3/ \ --bootstrap-public-url http://controller:5000/v3/ \ --bootstrap-region-id RegionOne

    7、Configure the Apache HTTP server
    /etc/httpd/conf/httpd.conf
    ServerName 127.0.0.1
    ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

    systemctl enable httpd.service
    systemctl start httpd.service

    export OS_USERNAME=admin
    export OS_PASSWORD=your-password
    export OS_PROJECT_NAME=admin
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3

    8、设置keystone.conf
    admin_token
    [identity]
    domain_specific_drivers_enabled = true //允许特殊域驱动
    domain_config_dir = /etc/keystone/domains //特殊域配置文件路径
    driver = sql //默认域驱动为sql

    9、设置Ldap特殊域
    mkdir /etc/keystone/domains
    复制一份keystone.conf到domains下,改名为keystone.Ldap.conf //文件名中的Ldap要和domain的name对应。
    chmod 777 domains/
    chmod 777 keystone.Ldap.conf
    去掉其他所有的配置,只保留:
    [identity]
    driver = ldap
    [ldap]
    url = your url
    user = your username
    password = your password
    suffix = your suffix
    user_tree_dn = your baseDn
    user_id_attribute = //keystone id
    user_name_attribute = //keystone name
    user_description_attribute =
    user_mail_attribute =
    group_tree_dn = your baseDn

    service httpd restart:重启服务

    展开全文
  • 编辑配置文件(将在安装过程自动打开) : # ################################### # Config file for Easy-LDAP # # ################################### # Write your credentials correctly # # All info ...
  • LDAP客户端GitHub-Ldap.zip

    2019-07-16 06:49:27
    GitHub-Ldap 是 GitHub Enterprise 的一部分,是 LDAP 客户端。GitHub-Ldap 封装了 Net::LDAP,方便易用。 标签:GitHub
  • 旨在用作Authelia的forwardAuth代理(可能还进行了其他测试,例如nginx,未经测试),以便使用LDAP / Active Directory在Elasticsearch进行用户访问而无需付费订阅。 请求去特拉菲克 Traefik将其代理给Authelia...
  • LDAP

    千次阅读 2017-07-20 18:08:50
    LDAP fabric-ca

    来源:

    http://jianshi-dlw.iteye.com/blog/1557846

    https://segmentfault.com/a/1190000002607130

    http://blog.csdn.net/qq_27376871/article/details/52037317

    http://www.turbolinux.co.jp/products/server/11s/user_guide/openldapdirtree.html

    docker pull osixia/openldap:1.1.9
    docker tag osixia/openldap:1.1.9 hyperledger/fabric-openldap

    dn是唯一的
    LDAP采用服务器/客户端模式,支持分布式结构

    认证方式:

    根据用户ID进行过滤,找到用户信息entry,同时获得DN。利用DN和用户密码进行最终确认。

    OpenLDAP使用的监听端口是389,通过netstat命令查看该端口是否处于监听状态,可了解slapd进程是否在工作
    ##查看监听端口
    netstat –tnlp | grep 389 
    ##命令进行搜索
    ldapsearch -x -b '' -s base '(objectclass=*)' 

    OpenLDAP的配置文件位于/etc/openldap/slapd.conf
    LDAP目录中保存的信息格式是LDIF
    在LDAP中,schema用来指定一个目录中所包含的对象(objects)的类型(objectClass),
    以及每一个类型(objectClass)中必须提供的属性(Atrribute)和可选的属性。
    可将schema理解为面向对象程序设计中的类,通过类定义一个具体的对象。
    LDIF中的数据条目可理解为是一个具体的对象,是通过schema来规划创建的。
    因此,schema是一个数据模型,用来决定数据按什么方式存储,并定义存储在不同的条目(Entry)下的数据之间的关系。
    schema需要在主配置文件slapd.conf中指定,以用来决定在目录中可以使用哪些objectClass
    在/etc/openldap/schema/目录中提供了许多schema文件,只需要在配置文件slapd.conf中使用include命令将需要使用的schema包含即可

    #把ldif文件添加到ldap数据库
    ldapadd -x -D "cn=root,dc=dlw,dc=com" -w secret -f dlw.com.ldif
    #修改条目(交互式修改)
    ldapmodify -x -D "cn=root,dc=dlw,dc=com" -W secret
    #修改条目(文件修改)
    ldapmodify -x -D "cn=root,dc=dlw,dc=com" -w secret -f modify
    #删除条目(使用ldapdelete命令只能删除树形结构中的叶结点条目)
    ldapdelete -x -D "cn=root,dc=dlw,dc=com" -w secret "cn=test,ou=managers,dc=dlw,dc=com"
    #数据导出
    slapcat -l export.ldif

    ------------------------------------------------------------------------------------------

    使用LDAP做身份验正

    验正主要是用来确定一次会话中客户端用户所具有的权利,
    即用来确立用户能否登录以及登录具有使用哪些资源以及如何使用资源的权限。
    验正过程中的修改、查询等操作由认证级别来控制。
    objectClass中的person可以用来作linux系统中用户登入的身份验正,此时需要指定userPassword属性的值,
    即指定用户登入时使用的密码。密码可以使用的加密方式有MD5、CRYPT、SHA、SSHA等。
    在LDAP V3中,验正客户端时可以使用的验正机制有匿名验正、简单验正、基于SSL/TLS的验正和基于SASL的验正等四种方

    ------------------------------------------------------------------------------------------

    osixia / OpenLDAP

    启动容器
    docker run --name my-openldap-container --detach hyperledger/fabric-openldap

    执行一个简单的检索
    docker exec 423778afec81 ldapsearch -x -H ldap://localhost -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin

    更改默认设置,创建新的ldap服务器
    LDAP_ORGANISATION:公司名字
    LDAP_DOMAIN:公司domain
    LDAP_ADMIN_PASSWORD:管理员密码

    docker run -d --name "ldap01" \
    --env LDAP_ORGANISATION="My Company" \
    --env LDAP_DOMAIN="my-company.com" \
    --env LDAP_ADMIN_PASSWORD="1234" \
    hyperledger/fabric-openldap:latest

    ------------------------------------------------------------------------------------------------

    把alpha的run_ldap_tests复制到/opt/gopath/src/github.com/hyperledger/fabric-ca/scripts

    ./run_ldap_tests的tls设定

    docker run -p 10389:389 -p 10636:636 --name $OLC \
          --volume /home/ubuntu/go/src/github.com/hyperledger/fabric-ca/testdata:/container/service/slapd/assets/certs \
          --env LDAP_TLS_CRT_FILENAME=tls_server-cert.pem \
          --env LDAP_TLS_KEY_FILENAME=tls_server-key.pem \
          --env LDAP_TLS_CA_CRT_FILENAME=root.pem \
          --detach $IMAGE

    执行./run_ldap_tests

    修改fabric-ca/lib/ldap/client_test.go由于版本有问题,按照下面修改很多东西

    /*
    Copyright IBM Corp. 2016 All Rights Reserved.
    
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
    
    		 http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
    */
    
    package ldap
    
    import (
    	"fmt"
    	"testing"
            "github.com/hyperledger/fabric/bccsp"
            "github.com/hyperledger/fabric/bccsp/factory"
    )
    
    func TestLDAP(t *testing.T) {
    	testLDAP("ldap", 10389, t)
    	//testLDAP("ldaps", 10636, t)
    	testLDAPNegative(t)
    }
    
    func testLDAP(proto string, port int, t *testing.T) {
    	//dn := "uid=admin,ou=system"
    	//pwd := "secret"
    	dn := "cn=admin,dc=example,dc=org"
    	pwd := "admin"
    	//host, err := os.Hostname()
    	//if err != nil {
    	//	t.Errorf("testLDAP os.Hostname failed: %s", err)
    	//	return
    	//}
    	host := "localhost"
    	base := "dc=example,dc=org"
    	url := fmt.Sprintf("%s://%s:%s@%s:%d/%s", proto, dn, pwd, host, port, base)
            factory.InitFactories(nil)
            var bcc bccsp.BCCSP
    	c, err := NewClient(&Config{URL: url},bcc)
            fmt.Println("a11111")
    	if err != nil {
    		t.Errorf("ldap.NewClient failure: %s", err)
    		return
    	}
            fmt.Println("a222222")
    	user, err := c.GetUser("jsmith", []string{"mail"})
    fmt.Println("a33333")
    	if err != nil {
    		t.Errorf("ldap.Client.GetUser failure: %s", err)
    		return
    	}
    	err = user.Login("jsmithpw",10)
    	if err != nil {
    		t.Errorf("ldap.User.Login failure: %s", err)
    	}
    	path := user.GetAffiliationPath()
    	if path == nil {
    		t.Error("ldap.User.GetAffiliationPath is nil")
    	}
    	err = user.Login("bogus",10)
    	if err == nil {
    		t.Errorf("ldap.User.Login passed but should have failed")
    	}
    	email := user.GetAttribute("mail")
    	if email == "" {
    		t.Errorf("ldap.User.GetAttribute failed: no mail found")
    	}
    	t.Logf("email for user 'jsmith' is %s", email)
    }
    
    func testLDAPNegative(t *testing.T) {
            var bcc bccsp.BCCSP
    	_, err := NewClient(nil,bcc)
    	if err == nil {
    		t.Errorf("ldap.NewClient(nil) passed but should have failed")
    	}
    	_, err = NewClient(&Config{URL: "bogus"},bcc)
    	if err == nil {
    		t.Errorf("ldap.NewClient(bogus) passed but should have failed")
    	}
    	_, err = NewClient(&Config{URL: "ldaps://localhost"},bcc)
    	if err != nil {
    		t.Errorf("ldap.NewClient(ldaps) failed: %s", err)
    	}
    	_, err = NewClient(&Config{URL: "ldap://localhost:badport"},bcc)
    	if err == nil {
    		t.Errorf("ldap.NewClient(badport) passed but should have failed")
    	}
    }
    
    func TestLDAPTLS(t *testing.T) {
    	proto := "ldaps"
    	dn := "cn=admin,dc=example,dc=org"
    	pwd := "admin"
    	host := "localhost"
    	base := "dc=example,dc=org"
    	port := 10636
    	url := fmt.Sprintf("%s://%s:%s@%s:%d/%s", proto, dn, pwd, host, port, base)
            var bcc bccsp.BCCSP
    	c, err := NewClient(&Config{URL: url},bcc)
    	if err != nil {
    		t.Errorf("ldap.NewClient failure: %s", err)
    		return
    	}
    	c.TLS.CertFiles = []string{"../../testdata/root.pem"}
    	c.TLS.Client.CertFile = "../../testdata/tls_client-cert.pem"
    	c.TLS.Client.KeyFile = "../../testdata/tls_client-key.pem"
    	user, err := c.GetUser("jsmith", []string{"mail"})
    	if err != nil {
    		t.Errorf("ldap.Client.GetUser failure: %s", err)
    		return
    	}
    	err = user.Login("jsmithpw",10)
    	if err != nil {
    		t.Errorf("ldap.User.Login failure: %s", err)
    	}
    	path := user.GetAffiliationPath()
    	if path == nil {
    		t.Error("ldap.User.GetAffiliationPath is nil")
    	}
    	err = user.Login("bogus",10)
    	if err == nil {
    		t.Errorf("ldap.User.Login passed but should have failed")
    	}
    	email := user.GetAttribute("mail")
    	if email == "" {
    		t.Errorf("ldap.User.GetAttribute failed: no mail found")
    	}
    	t.Logf("email for user 'jsmith' is %s", email)
    }
    

    ------------------------------------------------------------------------------------------------------------

    fabric-ca-server-config.yaml把ldap变成可用状态

    ###启动openldap

    docker run -p 10389:389 -p 10636:636 --name fabric-openldap \
    -d hyperledger/fabric-openldap:1.0.0

    ###启动ca

    docker run -d --name fabric-ca -p 7054:7054 \
    -e FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server \
    -v /home/ubuntu/go/src/github.com/hyperledger/fabric-ca/fabric-ca-server-config.yaml:/home/ubuntu/go/src/github.com/hyperledger/fabric-ca/fabric-ca-server-config.yaml \
    hyperledger/fabric-ca:x86_64-1.0.0-rc1 fabric-ca-server start \
    -c /home/ubuntu/go/src/github.com/hyperledger/fabric-ca/fabric-ca-server-config.yaml 

    ###启动ca-cli

    docker run -it --link fabric-ca:fabric-ca --name ca-client \

    -w /etc/hyperledger \

    -e FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-client \
    hyperledger/fabric-ca:x86_64-1.0.0-rc1 bash

    ####openldap默认启动用户是admin,密码也是admin,修改admin的密码

    docker run --env LDAP_ORGANISATION="My Company" --env LDAP_DOMAIN="my-company.com" \
    --env LDAP_ADMIN_PASSWORD="JonSn0w" --detach osixia/openldap:1.1.9

    ##ca和ldap联动的规则

    1。像run_ldap_tests里面adduser那样,把add-user.ldif导入ldap中

    2。从ca-client或者sdk发出用户认证申请

    fabric-ca-client enroll -u http://jsmith:jsmithpw@fabric-ca:7054 -M jsmith/msp

    3。ca在认证申请的时候,先用默认账户admin去绑定ldap,如果绑定成功,再用jsmith用户继续绑定查询

    得到ldap确认以后,ca会生成各种认证key返回给ca-client

    展开全文
  • 1、LDAP的存储规则区分名(DN,Distinguished Name)和自然界的树不同,文件系统/LDAP/电话号码簿目录的每一片枝叶都至少有一个独一无二的属性,这一属性可以帮助我们来区别这些枝叶。在文件系统, 这些独一无二的...

    1、

    LDAP的存储规则

    区分名(DN,Distinguished Name)

    和自然界中的树不同,文件系统/LDAP/电话号码簿目录的每一片枝叶都至少有一个独一无二的属性,这一属性可以帮助我们来区别这些枝叶。

    在文件系统中, 这些独一无二的属性就是带有完整路径的文件名。比如/etc/passwd,该文件名在该路径下是独一无二的。当然我们可以有/usr/passwd, /opt/passwd,但是根据它们的完整路径,它们仍然是唯一的。

    在LDAP中,一个条目的区分名称叫做“dn”或者叫做区分名。在一个目录中这个名称总是唯一的。比如,我的dn是"uid=aghaffar, ou=People, o=developer.ch"。不可能有相同的dn,但是我们可以有诸如"uid=aghaffar, ou=Administrators, o=developer.ch"的dn。这同上面文件系统中/etc/passwd 和 /usr/passwd的例子很类似。

    我们有独一无二的属性,在"ou=Administrators, o=developer.ch" 中uid和在"ou=People, o=developer.ch"中的uid。这并不矛盾。

    CN=Common Name 为用户名或服务器名,最长可以到80个字符,可以为中文;

    OU=Organization Unit为组织单元,最多可以有四级,每级最长32个字符,可以为中文;

    O=Organization 为组织名,可以3—64个字符长

    C=Country为国家名,可选,为2个字符长

    LDAP目录以一系列“属性对”的形式来存储记录项,每一个记录项包括属性类型和属性值(这与关系型数据库用行和列来存取数据有根本的不同)。

    2、

    CN, OU, DC 都是 LDAP 连接服务器的端字符串中的区别名称(DN, distinguished   name)

    LDAP连接服务器的连接字串格式为:ldap://servername/DN

    其中DN有三个属性,分别是CN,OU,DC

    LDAP是一种通讯协议,如同HTTP是一种协议一样的!

    在 LDAP 目录中,

    ·         DC (Domain Component)

    ·         CN (Common Name)

    ·         OU (Organizational Unit)

    LDAP 目录类似于文件系统目录。

    下列目录:

    DC=redmond,DC=wa,DC=microsoft,DC=com

    如果我们类比文件系统的话,可被看作如下文件路径:

    Com\Microsoft\Wa\Redmond

    例如:CN=test,OU=developer,DC=domainname,DC=com

    在上面的代码中 cn=test 可能代表一个用户名,ou=developer 代表一个 active directory 中的组织单位。这句话的含义可能就是说明 test 这个对象处在domainname.com 域的 developer 组织单元中。

    展开全文
  • LDAP基本概念

    2021-01-14 03:47:19
    1、LDAP的存储规则区分名(DN,Distinguished Name)和自然界的树不同,文件系统/LDAP/电话号码簿目录的每一片枝叶都至少有一个独一无二的属性,这一属性可以帮助我们来区别这些枝叶。在文件系统, 这些独一无二的...
  • LDAP(Light Directory Access Portocol)是轻量目录访问协议,基于X.500标准,支持TCP/IP。 LDAP目录以树状的层次结构来存储数据。每个目录记录都有标识名(Distinguished Name,简称DN),用来... dc::Domain Compone
  • LDAP搜索的CN,OU,DC是什么?

    千次阅读 2020-05-09 11:22:36
    I have a search query in LDAP like this. 我在这样的LDAP中有一个搜索查询。 What exactly does this query mean? 这个查询
  • ldapsearch -x -H ldap://192.168.164.174 -D "user1@test.com" -b "OU=Domain Controllers,DC=test,DC=com" -w Uu1234. "(sAMAccountType=805306369)"|grep dNSHostName 查询域管理用户 ldapsearch -x -H ldap://...
  • 尝试通过vbscript读取域管理员组成员,但无法读取。 在用户服务器上引发... 对象不是集合,而是在我的本地测试Windows Server 2012工作:请提出任何建议:使用以下脚本我尝试过的操作:Option Explicit'Get all ...
  • 当我尝试使用此命令将用户导入LDAP时:ldapadd -x -D "cn=Manager,dc=domain,dc=com" -W -f /etc/openldap/root.ldif我有这个错误:ldap_add no such object (32)matched dn dc=domain,dc=com让我告诉你这些文件:/...
  • LDAP一般指轻型目录访问协议,基本概念这里就不介绍了,网上有很多相关的介绍。 公司内部服务很多,如gitlab、wiki、jira等,如果每个服务创建一个账户,维护起来很不方便,一般通过ldap来解决这种场景。 一、安装...
  • python-ldap:适用于Python的LDAP客户端API 什么是python-ldap? python-ldap提供了一... initialize ( "ldap://my_ldap_server.my_domain" ) l . simple_bind_s ( "" , "" ) l . search_s ( "o=My Organisation, c=A
  • 很多时候,我们在构建系统的时候都会自己创建用户管理体系,这对于开发人员来说并不是什么难事,但是当我们...如果此时我们引入LDAP来集中存储用户的基本信息并提供统一的读写接口和校验机制,那么这样的问题就比较容易
  • Windows LDAP加固之LDAP签名

    千次阅读 2019-10-03 15:47:38
    凭据重放和中间人攻击在LDAP的攻击显得极为有效。所以,我们需要尽快启用LDAP签名这个安全特性。值得注意的是微软的目录服务通常在企业内部用作最基本的身份验证,很多其它系统也依赖于Windows提供的LDAP服务,...
  • LDAP 协议

    千次阅读 2019-07-19 17:08:47
    LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol 1. 目录        目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象Linux/Unix...
  • LDAP CN OU DC 的含义

    2019-01-24 17:24:15
    LDAP CN OU DC 的含义
  • lssp LDAP Self Service Password 是一个小型的 nodejs 项目,它允许用户在 ldap 更改密码。 安装依赖 $ npm install . ... 例如复制到your.ldap.your.domain ,运行: $ scp scripts/change-ldap-pass
  • 带有JWT和LDAP帐户源的OAuth2 介绍 学习目标 使用Tribestream API网关对用户进行身份验证 ... docker run --restart=always -p 389:389 --env LDAP_ORGANISATION="superbiz.com" --env LDAP_DOMAIN="superbiz.com" --
  • Ldap笔记

    万次阅读 2020-09-03 10:04:06
    【1】ldap介绍 【2】centos搭建OpenLDAP 【3】LDAP的objectClass及Attribute 【4】Ubuntu下安装OpenLDAP图形管理工具 【5】OPENLDAP 访问控制 【6】LDAP常用命令 【7】自助修改或重置密码服务Self Service Password ...
  • ldap-sync二进制文件将在/etc/ldap-sync/config.json 搜索配置,如果导入失败将​​引发错误。 配置文件由五个部分组成,可以是: { "connection": { "uri": "ldap://localhost" }, "bind": { "binddn": ...
  • NULL 博文链接:https://llz1215.iteye.com/blog/726328
  • ldap学习总结什么是LDAP?一、 LDAP的存储方式?二、 ldap安装(Linux)1,使用如下命令... LDAP以树型结构存储,具体信息存储在条目的数据结构。一个目录信息树由若干条目组成,一个条目一个对象,每个条目具有唯一的标识
  • ldap 安装

    2021-05-07 03:50:50
    2) OpenLDAP服务日志设置 通过修改rsyslog配置文件, 在文件添加:local4* /var/log/slapd.log [root@gitea openldap]# touch /var/log/slapd.log [root@gitea openldap]# chown ldap.ldap /var/log/slapd.log ...
  • Ok, this is driving me ... I'm trying to create an LDAP authentication with Java and everything is fine if I use my First name and Last name in the SECURITY_PRINCIPAL. This is my code:try {Hashtabl...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,874
精华内容 8,349
关键字:

ldap中的domain