LDAP客户端工具使用方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LDAP客户端工具使用方法相关的知识,希望对你有一定的参考价值。

我有一款ldap客户端工具,它的属性描述是:Active Directory LDAP Browsing Utility;请教各位高手如何使用这款软件,说下基本的用法即可。
非常感谢,最近在搞ldap。。。
哪位高手指点下吧,如果不太清楚这款软件,给我说下把Windows AD当成LDAP配置的大概步骤也行,非常感谢。
就是怎么把Windows AD当成LDAP配置,简单说下即可。

首先,我声明一下,我没用过这款软件,用过LDAP Browser和Apache 的LDAP Studio,既然是管理LDAP的,应该一样。
你安装好后,象建立数据源一样,把你要连接的ldap server的IP、端口、base DN、用户名、密码统统填好,然后就能连上了,一般是能看到整个ldap树的情况,接下去就直接在树的节点上操作就行了。
参考技术A 1、LDAP的专用名词:
DN=Distinguished Name 一个目录条目的唯一标识名
CN=Common Name 为用户名或服务器名,最长可以到80个字符,可以为中文; OU=Organization Unit为组织单元,最多可以有四级,每级最长32个字符,可以为中文;
O=Organization 为组织名,可以3—64个字符长
C=Country为国家名,可选,为2个字符长
L=Location 地名,通常是城市的名称
ST 州或省的名称
STREET 街道地址 UID 用户标识

2、LDAP的基本操作:
1) LDAP的连接
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
public class LDAP
private DirContext ctx;
private Hashtable env;
// 服务器地址
private String LDAP_URL = "ldap://localhost:10389";
// 管理域的dn
private String MANAGER_DN = "uid=admin,ou=system";
// 管理域的密码
private String MANAGER_PASSWORD = "secret";
// 管理域的验证方式
private String AUTH_TYPE = "type";
//
private String CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
public LDAP()
connectLDAP();

public void connectLDAP()
try
env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, CONTEXT_FACTORY);
env.put(Context.PROVIDER_URL, LDAP_URL);
env.put(Context.SECURITY_AUTHENTICATION, AUTH_TYPE);
env.put(Context.SECURITY_PRINCIPAL, MANAGER_DN);
env.put(Context.SECURITY_CREDENTIALS, MANAGER_PASSWORD);
ctx = new InitialDirContext(env);
System.out.println("LDAP建立连接成功!");
catch(NamingException e)
System.out.println(e);




1) LDAP连接的关闭
// 关闭到LDAP服务器的连接
private void closeConnection()
try
ctx.close();
catch (NamingException ne)
System.out.println(ne);



2) 创建一个分组OU
// 创建一个OU(当用户组不存在时创建)
public Boolean createOU(String ouName,String baseDN,ArrayList<String> names) throws NamingException
try
// load the attributes
BasicAttributes attrs = new BasicAttributes();
attrs.put(addObjclassSet(names));
attrs.put("ou", ouName);
ctx.createSubcontext("ou="+ouName+","+baseDN, attrs);
return new Boolean(true);
catch (NamingException ne)
System.out.println(ne);
return new Boolean(false);


//生成Objectclass属性
BasicAttribute addObjectclassSet (ArrayList<String> names)
BasicAttribute objclassSet = new BasicAttribute("objectclass");
objclassSet.add("top");
for(Iterator<String> iterator = names.iterator();iterator.hasNext();)
objclassSet.add(iterator.next());
// load the attributes
return objclassSet;


3) 添加一个UID
//添加一个uid entry
public boolean addUID(String uidName, String baseDN, ArrayList<String> names) throws NamingException
try
BasicAttributes attrs = new BasicAttributes();
attrs.put("uid",uidName);
attrs.put(addObjectclassSet(names));
ctx.createSubcontext("uid=" + uidName + "," + baseDN, attrs);
return true;
catch(NamingException e)
e.printStackTrace();

return false;


4) 删除Entry
//传入entity的DN,删除这个entity
public boolean delEntity(String DN)
try
ctx.destroySubcontext(DN);
System.out.println("del Entity success!");
return true;
catch (NamingException e)
System.out.println("del Entity error!!");
e.printStackTrace();
return false;



5) 修改entity的名字
//修改entity名字,传入entity的DN
public boolean reName(String oldDN,String newDN)
try
ctx.rename(oldDN, newDN);
System.out.println("rename Entity success!");
return true;
catch (NamingException e)
System.out.println("rename Entity error!!");
e.printStackTrace();
return false;



6) 获取UID的DN
// 传入uid的名字,查找目录DN,得到 的这个entity的 DN
public String getUIDDN(String uidName,String baseDN) throws NamingException
String DN = new String();
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String searchFilter = "(&(uid=%1))";
searchFilter = searchFilter.replaceAll("%1", uidName);
// Search for objects that have those matching attributes
NamingEnumeration answer;
try
answer = ctx.search(baseDN, searchFilter, constraints);
while (answer.hasMore())
SearchResult sr = (SearchResult) answer.next();
DN = sr.getNameInNamespace();

catch (NamingException e)
e.printStackTrace();

return DN;


7) 获取OU的DN
// 传入ou的名字,查找目录DN,得到 的这个entity的 DN
public String getOUDN(String ouName,String searchDN) throws NamingException
String DN =new String();
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String searchFilter = "(&(ou=%1))";
searchFilter = searchFilter.replaceAll("%1", ouName);
// Search for objects that have those matching attributes
NamingEnumeration answer;
try
answer = ctx.search(searchDN, searchFilter, constraints);
while (answer.hasMore())
SearchResult sr = (SearchResult) answer.next();
DN = sr.getNameInNamespace();

catch (NamingException e)
e.printStackTrace();

return DN;

LDAP-openldap服务部署和测试(YUM安装)

1. 概述

本篇博客主要记录如何部署一台LDAP服务器,用于在内网集群节点中,进行全局用户认证。

注:有关LDAP的理论部分,参见博客《LDAP协议详解.md》

本篇博客主要的部署环境为:CentOS6.5_x86_64部署openldap,通过YUM安装相关环境。

2. 服务端部署过程

2.1 软件包说明

软件包软件包说明
openldap服务端和客户端必须用的库文件
openldap-clients在LDAP服务端使用,用户增删改查的命令行环境
openldap-servers用于启动服务和配置,包括单独的LDAP后台守护进程
openldap-servers-sql支持SQL模块
compat-openldapopenldap兼容性库环境

2.2 部署过程

虚拟机console,通过执行命令:rpm -qa | grep openldap,查看是否已经安装openldap的软件包:

openldap-clients-2.4.23-32.el6_4.1.x86_64
openldap-2.4.23-32.el6_4.1.x86_64
openldap-servers-2.4.23-32.el6_4.1.x86_64

若没有上述软件包,执行命令:yum -y install openldap openldap-clients openldap-servers
此过程会同时安装依赖软件包:libtool-ltdl,portserver软件包

2.3 配置过程

  1. 复制配置文件模板,到系统配置目录下
    cp -a /usr/share/openldap-servers/sldap.conf.obsolete /etc/openldap/slapd.conf
  2. 删除旧的动态配置文件
    rm -rf /etc/openldap/sladp.d/*
  3. 复制数据库配置文件模板,到系统配置目录下
    cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
  4. 修改数据库配置文件所在目录属主
    chown -R ldap.ldap /var/lib/ldap
  5. 生成加密密钥
    虚拟机console执行命令:slappasswd
    提示New password:输入liwanliang
    提示Re-enter new password,输入liwanliang
    将生成的内容:{SSHA}SdorCU0SF/bBERBdPtkSVdWv94Hc826r,复制保存下来
  6. 修改主配置文件,修改内容如下:
    有关openldap的配置详解,参见博客《LDAP-openldap配置文件详解.md》

    database config
    access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
        by * none
    database monitor
    access to *
    by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=Manager,dc=liwanliang,dc=com" read
        by * none
    database bdb
    suffix "dc=liwanliang,dc=com"
    checkpoint 1024 15
    rootdn "cn=Manager,dc=liwanliang,dc=com"
    rootpw {SSHA}SdorCU0SF/bBERBdPtkSVdWv94Hc826r
  7. 修改相关目录属性
    虚拟机console执行命令:chown -R ldap.ldap /etc/openldapchown -R ldap.ldap /var/lib/ldap

  8. 删除旧的动态配置文件
    虚拟机console执行命令:rm -rf /etc/openldap/slapd.d/*
  9. 启动服务并设置开机启动
    虚拟机console执行命令:service slapd start && chkconfilg slpad on
    查看是否启动服务:service slapd statusnetstat -tupln|grep slapd
  10. 动态配置文件
    openldap的动态配置文件位于/etc/openldap/slapd.d/下,每次修改了主配置文件/etc/openldap/slapd.conf之后,都需要重新生成动态配置文件,即:
    删除动态配置文件:rm -rf /etc/openldap/slapd.d/*
    重新生成动态配置文件:slaptest -f /etc/openldap/slapd.conf -f /etc/openldap/slapd.d
    修改动态配置目录属性:chown -R ldap.ldap /etc/openldap/slapd.d/

3. 测试

上述过程已经部署好了openldap并启动了服务,这仅是第一步,openldap有没有工作,还需要进一步验证和测试。
虚拟机console执行命令:ldapsearch -x -LLL;如果这个命令报错:【No suce object(32)】,则需要修改配置文件/etc/openldap/ldap.conf
修改内容如下:

BASE dc=liwanliang,dc=com
URI ldap://192.168.80.8
TLS_CACERTDIR /etc/openldap/certs

上过过程说明已经基本完成了openldap的部署和测试,可以投入使用

4. 生成LDIF格式文件

往openldap数据库存放数据,有多种方式:1. 手动编辑;2. 用工具生成
手动编辑这里不介绍。工具生成指的是用migrationtools脚本来产生ldif文件

4.1 安装migrationtools工具

虚拟机console执行命令:rpm -qa | grep migrationtools,查看系统是否已经安装migrationtools
若没有安装,执行命令:yum -y installl migrationtools,进行工具安装

4.2 用migrationtools生成ldif文件

这里是希望用openldap来实现用户认证,因此需要把系统中存在的user和group产生ldif,添加到ldap的数据库中。
虚拟机console执行命令:
/usr/share/migrationtools /migrate_base.pl > base.ldif
/usr/share/migrationtools/migrate_passwd.pl /etc/passwd > passwd.ldif
/usr/share/migrationtools/migrate_group.pl /etc/group > group.ldif

4.3 添加ldif到ldap数据库

上面过程,已经将用户认证时需要的文件/etc/passwd和/etc/group生成ldif文件。
改用ldap验证时,就需要将这几个文件添加到ldap数据库中。
虚拟机console执行命令:
ldapadd -x -D "cn=Manager,dc=liwanliang,dc=com‘ -c -W -f base.ldif
ldapadd -x -D "cn=Manager,dc=liwanliang,dc=com" -c -W -f passwd.ldif
ldapadd -x -D "cn=Manager,dc=liwanliang,dc=com" -c -W -f group.ldif
提示输入密码时,输入liwanliang,回车

5. 日志配置

5.1 openldap的日志级别

虚拟机console执行命令:slapd -d ?,能够看到以下内容:
技术分享图片
各参数说明如下:

Any开启所有的函数调用
Trace跟踪Trace函数调用
Rackets与函数包处理相关的信息
Args全面的debug信息
Conns链接数管理的相关信息
BER记录包发送和接收的信息
Filter记录过滤处理的过程
Config记录配置文件的相关信息
ACL记录访问控制列表的相关信息
Stats记录链接,操作系统以及统计信息
Stats2记录向客户端响应的统计信息
Shell记录与shell后端通信信息
Parse记录条目的分析结果信息
Sync记录数据同步资源消耗信息
None不记录信息

5.2 配置日志功能

  1. 修改主配置文件/etc/openldap/slapd.conf,最后一行添加:loglever -1
  2. 虚拟机console执行命令:mkdir -p /var/log/slapd && chown -R ldap.ldap /var/log/sladp
  3. 修改系统日志配置文件,使其重定向日志到ldap日志目录,vim /etc/rsyslog.conf,最后一行添加以下内容:
    local4. * /var/log/slapd/slapd.log
  4. 利用Logrotate自动切割日志
    进入目录/etc/logrotate.d,创建文件ldap,添加以下内容:

    /var/log/slapd/slapd.log {
        prerotate
           /usr/bin/chattr    -a    /var/log/slapd/slapd.log
        endscript
        compress
        delaycompress
        notifempty
        rotate    100
        size    10M
        postroatte
            /usr/bin/chattr    +a    /var/log/slapd/slapd.log
        endsript
    }
  5. 重启日志服务并观察
    虚拟机console执行命令:service rsyslogd restart
    观察日志文件是否更新:tail -f /var/log/slapd/slapd.log

6. 客户端配置

这里的客户端端不是指ldap命令行客户端,而是需要通过LDAP服务器验证的客户端节点。
本篇博客已经部署了KVM虚拟机node11,在node11上配置采用用户采用LDAP验证。

6.1 基础环境准备

关闭sssd进程,并安装nslcd进程

注:有关NSS,NSCD,NSLCD,SSSD服务的区别,参见包括《》

虚拟机console执行命令:rpm -qa | grep nss-pam-ldapd,查看系统是否已经安装客户端
若未安装,执行命令:yum -y install nss-pam-ldapd进行安装

6.2 配置nslcd客户端

  1. 修改nslcd.conf配置文件,vim /etc/nslcd.conf,文末添加内容如下:

    uri ldap://192.168.80.8/
    base dc=liwanliang,dc=com
    ssl no
    tls_cacertdir /etc/openldap/certs
  2. 修改pam_ldap.conf配置文件,vim /etc/pam_ldap.conf,文末添加内容如下:

    uri ldap://192.168.80.8
    ssl no
    tls_cacertdir /etc/openldap/certs
    bind_policy soft
  3. 修改系统认证的PAM配置,vim /etc/pam.d/system-auth,修改内容如下:技术分享图片

  4. 修改名字服务NSS配置文件,vim /etc/nssiwch.conf,修改部分如下:

    passwd:      files     ldap
    shadow:     files     ldap
    group:      files     ldap
  5. 修改系统认证方式配置文件,vim /etc/sysconfig/authconfig,修改部分内容如下:

    USESHADOW=yes    //启用密码验证
    USELDAPAUTH=yes    //启用openldap验证
    USELOCAUTHORIZE=yes    //启用本地验证
    USELDAP=yes        //启用LDAP认证协议
  6. 启动nslcd服务进程
    虚拟机console执行命令:service iptables stop && setenforce 0,即关闭防火墙和selinux
    启动服务,并设置开机启动:service nslcd start && chkconfig nslcd on
  7. 客户端验证
    在虚拟机node11上,执行命令:id liwl01,如果获取到liwl01的用户信息,则说明配置成功

7. 添加系统用户

在今后的实践过程中,会存在添加系统进程用户的需求,比如部署Nagios时,需要添加nagios和nagioscmd用户;
部署slurm任务调度系统时,需要添加munge和slurmadmim用户等。
这里就需要利用migrationtools来实现往LDAP服务器中添加用户,然后实现全局认证即可。具体过程如下:

7.1 添加用户

这里添加用户liwl02
在虚拟机console中执行命令:useradd -u 501 liwl02
给liwl02添加密码:passwd liwl02,输入密码两次完成密码添加

7.2 产生ldif文件

因为已经生成了base.ldif文件,此次添加用户,不再需要生成base.ldif文件
虚拟机console执行命令:
migrate_passwd.pl /etc/passwd > passwd.ldif,该命令创建passwd.ldif
migrate_group.pl /etc/group > group.ldif,该命令创建group.ldif
编辑passwd.ldif,只保留以下部分内容,其余删除:

dn: uid=liwl02,ou=People,dc=liwanliang,dc=com
uid: liwl02
cn: liwl02
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$VKwyR9xY$GmXIUT9zJqE5/foaPKwgoDPfXS8XnkG1WcqjHoNBmLcMUvbyrOV6BVLXEmc6K140BM9r4fHAL33ZxSzWiZ8c//
shadowLastChange: 17699
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 501
gidNumber: 501

编辑group.ldif,只保留以下部分,其余删除:

dn: cn=liwl02,ou=Group,dc=liwanliang,dc=com
objectClass: posixGroup
objectClass: top
cn: liwl02
userPassword: {crypt}x
gidNumber: 501

7.3 添加ldif文件至LDAP数据库中

虚拟机console执行命令, 添加两个文件中新加的内容:
ldapadd -x -D "cn=Manager,dc=liwanliang,dc=com" -c -W -f passwd.ldif
ldapadd -x -D "cn=Manager,dc=liwanliang,dc=com" -c -W -f group.ldif
输入密码liwanliang即可添加进入

7.4 验证

在虚拟机node11上,通过执行命令id liwl02验证是否添加成功


















































以上是关于LDAP客户端工具使用方法的主要内容,如果未能解决你的问题,请参考以下文章

windows下配置openldap,manager的连接:LDAP error:无效的凭据

实施 LDAP 合规性

ldap第二天-yum安装LDAP + phpLDAPadmin

LDAP/SASL/GSSAPI/Kerberos编程API--krb5客户端

LDAP-openldap服务部署和测试(YUM安装)

grafana ldap 权限无法保持