Apache DS:修改启动端口和使用java方式修改登录密码

Apache DS:修改启动端口和使用java方式修改登录密码,第1张

Apache DS:修改启动端口和使用java方式修改登录密码

当前版本: apacheds-2.0.0.AM26

1. 声明

当前内容主要为学习和使用Apache DS,并完成修改端口和密码的 *** 作,当前内容参考:官方文档

主要为:

    手动修改启动端口 (修改10389为389)使用java方式修改当前的登录密码 (默认密码为secret)
2. 修改端口

找到特定具有10389的文件夹位置:apacheds-2.0.0.AM26/instances/default/conf/ou=config/ads-directoryserviceid=default/ou=servers/ads-serverid=ldapserver/ou=transports,该文件夹下面的两个文件控制端口

其中ads-transportid=ldap.ldif控制端口10389,ads-transportid=ldaps.ldif控制端口10636

关闭apacheds:./bin/apacheds.sh stop

将文件下载到本地并修改属性后上传至服务器即可,这里修改为389端口

再次启动apacheds: ./bin/apacheds.sh start

查看当前端口:

发现端口修改成功

3. 修改密码

查看官方图片

可以发现当前用户admin的密码是存在于:ou=system这个partition中的uid=admin这个实体中的userPassword属性的,可以通过手动切换到实体并修改属性即可完成密码修改

通过查看属性和调试发现密码刚开始是secret,且是byte[],所以修改的时候直接用byte[]替换,但是修改后却变成了{SSHA}XXX

实现如下:

private static Hashtable createEnv() {
	Hashtable env = new Hashtable();
	env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
	env.put(Context.PROVIDER_URL, "ldap://" + HOST + ":389");
	env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
	env.put(Context.SECURITY_CREDENTIALS, "secret");
	return env;
}
private static void changeAdminPassword() {
// 填充必要的配置属性,例如连接用户名和密码以及访问的ldpa的IP和端口
	Hashtable env = createEnv();
	// 创建对Dir访问 *** 作的上下文
	DirContext ctx = null;
	try {
		ctx = new InitialDirContext(env);

		// 查询ou=schema这个文件夹下面的内容
		NamingEnumeration list = ctx.list("ou=system");
		listNamingEnumeration(list);
		DirContext adminContext = (DirContext)ctx.lookup("uid=admin,ou=system");
		Attributes attributes = adminContext.getAttributes("");
		listAttributes(attributes);
		Attribute attribute = attributes.get("userPassword");
		byte[] pwdBytes = (byte[])attribute.get(0);
		System.out.println("当前的密码为:"+new String(pwdBytes, "utf-8"));
		
		//	手动修改这个密码,并设置为123456
		String newPwd="123456";
		BasicAttributes basicAttributes = new BasicAttributes("userPassword", newPwd.getBytes("utf-8"));
		//	如果使用DirContext.ADD_ATTRIBUTE表示可以使用多个密码进行登录 *** 作
		
		adminContext.modifyAttributes("", DirContext.REPLACE_ATTRIBUTE, basicAttributes);
		System.out.println("修改密码成功!");
		
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		close(ctx);
	}
}

执行后的结果:

uid=admin: javax.naming.directory.DirContext
prefNodeName=sysPrefRoot: javax.naming.directory.DirContext
ou=configuration: javax.naming.directory.DirContext
ou=consumers: javax.naming.directory.DirContext
ou=users: javax.naming.directory.DirContext
ou=groups: javax.naming.directory.DirContext
====list attributes =====
id=uid
admin

id=userPassword
[B@17f052a3

id=displayName
Directory Superuser

id=objectClass
top
person
organizationalPerson
inetOrgPerson

id=sn
administrator

id=cn
system administrator

当前的密码为:secre
修改密码成功!

再次执行后(由于没有修改密码):

javax.naming.AuthenticationException: [LDAP: error code 49 - INVALID_CREDENTIALS: Bind failed: ERR_229 Cannot authenticate user uid=admin,ou=system]
这个表示认证失败了,因为密码修改了

当修改了登录密码正确就可以继续访问了:

4. 总结

1. 通过修改配置文件方式修改端口时,必须要经过重启服务才会让配置重新生效

2. 修改密码 *** 作时需要切换到不同的用户下面,且修改其中的密码属性即可,直接替换属性即可,如果使用DirContext.ADD_ATTRIBUTE那么表示该用户可以使用多个密码进行登录

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5719425.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存