LDAP客户端工具使用方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LDAP客户端工具使用方法相关的知识,希望对你有一定的参考价值。
我有一款ldap客户端工具,它的属性描述是:Active Directory LDAP Browsing Utility;请教各位高手如何使用这款软件,说下基本的用法即可。
非常感谢,最近在搞ldap。。。
哪位高手指点下吧,如果不太清楚这款软件,给我说下把Windows AD当成LDAP配置的大概步骤也行,非常感谢。
就是怎么把Windows AD当成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安装)
2. 服务端部署过程
2.1 软件包说明
2.2 部署过程
2.3 配置过程
3. 测试
4. 生成LDIF格式文件
4.1 安装migrationtools工具
4.2 用migrationtools生成ldif文件
4.3 添加ldif到ldap数据库
5. 日志配置
5.1 openldap的日志级别
5.2 配置日志功能
6. 客户端配置
6.1 基础环境准备
6.2 配置nslcd客户端
7. 添加系统用户
7.1 添加用户
7.2 产生ldif文件
7.3 添加ldif文件至LDAP数据库中
7.4 验证
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-openldap | openldap兼容性库环境 |
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 配置过程
- 复制配置文件模板,到系统配置目录下
cp -a /usr/share/openldap-servers/sldap.conf.obsolete /etc/openldap/slapd.conf
- 删除旧的动态配置文件
rm -rf /etc/openldap/sladp.d/*
- 复制数据库配置文件模板,到系统配置目录下
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
- 修改数据库配置文件所在目录属主
chown -R ldap.ldap /var/lib/ldap
- 生成加密密钥
虚拟机console执行命令:slappasswd
提示New password:输入liwanliang
提示Re-enter new password,输入liwanliang
将生成的内容:{SSHA}SdorCU0SF/bBERBdPtkSVdWv94Hc826r,复制保存下来 修改主配置文件,修改内容如下:
有关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
修改相关目录属性
虚拟机console执行命令:chown -R ldap.ldap /etc/openldap
;chown -R ldap.ldap /var/lib/ldap
- 删除旧的动态配置文件
虚拟机console执行命令:rm -rf /etc/openldap/slapd.d/*
- 启动服务并设置开机启动
虚拟机console执行命令:service slapd start && chkconfilg slpad on
查看是否启动服务:service slapd status
;netstat -tupln|grep slapd
- 动态配置文件
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 配置日志功能
- 修改主配置文件/etc/openldap/slapd.conf,最后一行添加:loglever -1
- 虚拟机console执行命令:
mkdir -p /var/log/slapd && chown -R ldap.ldap /var/log/sladp
- 修改系统日志配置文件,使其重定向日志到ldap日志目录,
vim /etc/rsyslog.conf
,最后一行添加以下内容:
local4. * /var/log/slapd/slapd.log 利用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 }
重启日志服务并观察
虚拟机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客户端
修改nslcd.conf配置文件,vim /etc/nslcd.conf,文末添加内容如下:
uri ldap://192.168.80.8/ base dc=liwanliang,dc=com ssl no tls_cacertdir /etc/openldap/certs
修改pam_ldap.conf配置文件,vim /etc/pam_ldap.conf,文末添加内容如下:
uri ldap://192.168.80.8 ssl no tls_cacertdir /etc/openldap/certs bind_policy soft
修改系统认证的PAM配置,vim /etc/pam.d/system-auth,修改内容如下:
修改名字服务NSS配置文件,vim /etc/nssiwch.conf,修改部分如下:
passwd: files ldap shadow: files ldap group: files ldap
修改系统认证方式配置文件,vim /etc/sysconfig/authconfig,修改部分内容如下:
USESHADOW=yes //启用密码验证 USELDAPAUTH=yes //启用openldap验证 USELOCAUTHORIZE=yes //启用本地验证 USELDAP=yes //启用LDAP认证协议
- 启动nslcd服务进程
虚拟机console执行命令:service iptables stop && setenforce 0
,即关闭防火墙和selinux
启动服务,并设置开机启动:service nslcd start && chkconfig nslcd on
- 客户端验证
在虚拟机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第二天-yum安装LDAP + phpLDAPadmin