OpenLDAP配置信息记录
随着各种研发工具使用越来越多,单独为每个工具维护一个账号系统的开销越来越大,而且作为用户多个账号密码使用也越来越不方便。所以需要做一个统一账号登陆。
查询了多个方法,又因为之前用过LDAP,所以选择了OpenLDAP来尝试实现。
OpenLDAP安装系统信息:
Ubuntu 14.04.1 LTS/CentOS release 6.5
openldap-2.4.39
关于如何安装请参考其他资料,这里仅记录一些尝试成功的配置。
ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret -f initial.ldif
ldapdelete -x -D "cn=Manager,dc=example,dc=com" -w secret "uid=liangji.chen,ou=People,dc=example,dc=com"

AuthType Basic
AuthLDAPBindPassword secret
AuthLDAPURL "ldap://10.0.3.140:389/ou=People,dc=example,dc=com?uid"
#!/bin/sh
#首先创建一个linux帐户
if [ -z $1 ]; then echo "Please specify username ..."; exit; fi
useradd $1
passwd $1
export PERL5LIB=./migration/
#转gid到ldap帐户
cat /etc/group | grep $1 >/tmp/group.in
migration/migrate_group.pl /tmp/group.in > /tmp/group.ldif
ldapadd -x -D "cn=root,dc=melot,dc=cn" -w secret -f /tmp/group.ldif
#转uid到ldap帐户
cat /etc/passwd | grep $1 > /tmp/passwd.in
migration/migrate_passwd.pl /tmp/passwd.in > /tmp/passwd.ldif
ldapadd -x -D "cn=root,dc=melot,dc=cn" -w secret -f /tmp/passwd.ldif
#删掉创建的linux帐户, 使帐户成为纯粹的ldap帐户,而不是local帐户
userdel $1
#rm -rf /home/$1
#rm /tmp/group.ldif
#rm /tmp/passwd.ldif
ldapsearch -x "uid=$1" #可用于显示刚刚添加到ldap数据库中的用户信息
if [ -z $1 ]; then echo "Please specify username ..."; exit; fi
ldappasswd -x -S -D "cn=root,dc=melot,dc=cn" -w secret "uid=$1,ou=People,dc=melot,dc=cn"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title> Reset LDAP Password</title>
<style type="text/css">
dt{
font-weight: bold;
}
</style>
</head>
<body>
<?php
$u = !empty($_REQUEST['u']) ? $_REQUEST['u'] : '';
$op = !empty($_REQUEST['op']) ? $_REQUEST['op'] : '';
$np1 = !empty($_REQUEST['np1']) ? $_REQUEST['np1'] : '';
$np2 = !empty($_REQUEST['np2']) ? $_REQUEST['np2'] : '';
$an = !empty($_REQUEST['an']) ? $_REQUEST['an'] : '';
if(!empty($an)){
if( empty($u) or empty($op) or empty($np1) or empty($np2) ){
$msg = "Some filed was empty!";
}else{
if( $np1 != $np2 ){
$msg = "confirm password error!";
}else{
if($op == $np1){
$msg = "new password can not be same as old password!";
}else{
$ldap_host = "ldap://10.0.3.140";
$ldap_port = 389;
$base_dn = "dc=example,dc=com";
$connect = @ldap_connect($ldap_host, $ldap_port);
if(!$connect){
$msg = "Could not connect to LDAP server";
}else{
ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
$user_dn = sprintf("uid=%s,ou=People,dc=example,dc=com",$u);
$user_pass = $op;
$bind = @ldap_bind($connect, $user_dn, $user_pass);
if(!$bind){
$msg = sprintf("account %s old password error!",$u);
}else{
$root_dn = "cn=Manager,dc=example,dc=com";
$root_pass = 'secret';
$bind = @ldap_bind($connect, $root_dn, $root_pass);
if(!$bind){
$msg = "Programe can not bind to LDAP server!";
}else{
$values["userPassword"][0] = "{md5}".base64_encode(pack("H*",md5($np1)));
$rs = @ldap_mod_replace($connect,$user_dn,$values);
if($rs){
$msg = "password modifed success!";
}else{
$msg = "password modifed failed!";
}
}
}
}
@ldap_close($connect);
}
}
}
}
if(!empty($msg)){
print("<h1>$msg</h1>");
}
?>
<form method="post" action="">
<dl>
<dt>添加用户,重置密码等请联系管理员,谢谢!(/root/openldap目录下有脚本)</dt>
<dt>以下是自助修改密码:</dt>
<dt>User Id</dt>
<dd>uid=<input type="text" name="u" size="16" />,ou=People,dc=example,dc=com</dd>
<dt>Old Password</dt>
<dd><input type="text" name="op" /></dd>
<dt>New Password</dt>
<dd><input type="text" name="np1" /></dd>
<dt>Confirm Password</dt>
<dd><input type="text" name="np2" /></dd>
<dd><input type="submit" value="Submit" /></dd>
</dl>
<input type="hidden" name="an" value="submit" />
</form>
</body>
</html>
设置密码后不生效的情况,可以参考这里解决:http://www.linuxfly.org/post/671/
报错是:ldap_bind: Invalid credentials (49)

OpenLDAP配置信息记录的更多相关文章
- hadoop 配置信息记录
ssh-keygen -t rsa -P '' 192.168.157.148 hadoop01192.168.157.149 hadoop02 mkdir /root/hadoopmk ...
- 记录一次nginx的upstream的配置信息
nginx的upstream的配置信息 upstream qq.xiaoyu.cn { server 192.168.1.139:80 max_fails=3 fail_timeout=30s; se ...
- outlook配置其他邮箱登录如qq邮箱或登录无邮件信息记录
今天加班想想自己outlook还没登登录过,于是想着登录一下outlook方便管理邮箱信息,才发现原来登录邮箱都要配置,感觉真是醉了.下面开始正式的配置流程. 选择添加账户 首先,点击文件选择账户设置 ...
- Tomcat下conf下server.xml的文件配置信息
Tomcat下conf下server.xml的文件配置信息,基本上不用做任何修改就可以使用,修改的地方就是host区域的一些配置,此文件设置端口为80. 注意:Tomcat配置文件中(即server. ...
- IIS/IIS Express/Asp.net配置片段记录
事情的起因是,我们在项目中使用了URLRewriter.dll作为实现伪静态的工具,在VS2010及之前的开发环境中,该功能运行正常,但在VS Express 2012 for Web中就不起作用了, ...
- SQL2005SP4补丁安装时错误: -2146233087 MSDTC 无法读取配置信息。。。错误代码1603的解决办法
是在安装slq2005sp3和sp4补丁的时候碰到的问题. 起先是碰到的错误1603的问题,但网上搜索的1603的解决办法都试过了,google也用了,外文论坛也读了,依然没有能解决这个问题. 其实一 ...
- 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)
原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...
- C#程序中获取电脑硬件配置信息的一种方法
本文介绍获取cpu信息和内存信息的方法,根据本文所举例的代码可以举一反三获取更多信息. 获取cpu名称的方法: public string GetCpuInfo() { ManagementObjec ...
- Jenkins: 配置信息变更历史
像 Jenkins 这样的系统,使用的过程就是配置文件变更的过程.如果能够对配置文件的变更进行跟踪管理,将极大的提高系统的可用性.Job Configuration History 插件就是这么一款实 ...
随机推荐
- Codevs 1097 校门外的树
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米 ...
- 自动化测试平台CATP
CATP:报文类工具,可以测试功能
- Android String format 通过value 下的string.xml 文件
<string name="format_coordinate" formatted="false">%s %d° %d\' %d\" % ...
- Placeholdem文本域占位符符号标识JavaScript插件
Placeholdem是文本域占位符符号标识的一个JavaScript插件.占位符的值将逐步删除焦点文字,并在焦点离开逐步恢复. 在线demo:http://placeholdem.jackrugil ...
- Freezable 对象(WPF)
# Freezable 对象(WPF) # > Freezable 继承自 DependencyObject,同时添加了 Freezable 方法,用于冻结对象. --- ## 冻结对象 ## ...
- JavaScript 中的 replace 方法
定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. stringObject.replace(regexp/substr,replaceme ...
- [大牛翻译系列]Hadoop(2)MapReduce 连接:复制连接(Replication join)
4.1.2 复制连接(Replication join) 复制连接是map端的连接.复制连接得名于它的具体实现:连接中最小的数据集将会被复制到所有的map主机节点.复制连接有一个假设前提:在被连接的数 ...
- 一道关于比赛胜负的Sql查询题目
以前做过一道题目,一直没有来得及总结下来.贴图: 记得以前曾经找到了两种方法,今天试了一下,还是可以的,贴出过程: 下面是具体的查询方法: 原来放的是图片,今天又练习了一下,附代码: create T ...
- python 安装 setuptools Compression requires the (missing) zlib module 的解决方案
背景: 虚拟机centos下安装python辅助工具 setuptools报错,错误信息大概如下: Traceback (most recent call last): File "setu ...
- swap分区添加
首先你需要使用命令:dd 来创建一个swapfile,然后你需要使用mkswap命令在设备或者文件中创建一个Linux swap分区a) 使用root用户登陆b) 使用下面的命令创建一个2G的 Swa ...