OpenLDAP

因为现在公司里的员工帐号分为邮件、上网、Samba、SNS、Desknets等帐号,管理起来非常的麻烦,特别是员工入社和退社时需要在每个服务器上做一次操作,加大了管理成本,主要是把我的复杂化了很多,所以想把帐号统一起来,因为以前也没有接触过Openldap,所以这次是从头学起,包括数据库部分。
特作此笔记方便以后自己记录和查找相关资料

base.ldif

 
# more base.ldif  
dn: dc=atlantiss,dc=jp 
objectclass: dcObject 
objectclass: organization 
o: Company 
dc: atlantiss 

dn: cn=root,dc=atlantiss,dc=jp 
objectclass: organizationalRole 
cn: root 

ldap基本命令

DB_CONFIG配置

 
set_cachesize 0 268435456 1   #缓存大小 

# Data Directory 
#set_data_dir db 

# Transaction Log settings 
set_lg_regionmax 262144        
set_lg_bsize 2097152 
#set_lg_dir logs 
set_flags DB_LOG_AUTOREMOVE    #自动清除DB生成的LOG文件 

清空数据库

 
ldapdelete -x -w 'isns' -D'rn=isns,dc=ntt,dc=co.jp' -r 'rn=isns,dc=ntt,dc=co.jp' 

ldapadd

 
# ldapadd -x -D "cn=Manager,dc=yepn,dc=net" -W -f users.ldif 

简单解释:  
-x:使用认证;  
-D:指定使用哪个 dn 来操作;  
-W:提示输入密码;  
-f:指定要添加的 entry 的内容从文件中读入; 
-c: 忽略错误继续执行 

slappasswd

 
slappasswd -h{hash} #现在支持的加密算法 {CRYPT}, {MD5},{SMD5}, {SSHA}, {SHA}. 
                     默认为{SSHA} 

Berkeley DB 安装

OpenLDAP需要DB数据库支持,所以先安装DB数据库。
下载Berkeley DB 4.6.21.tar.gz

#wget Berkeley DB-URL 
#tar -zxvf Berkeley DB 4.6.21.tar.gz 
#cd db-4.6.21 
# ../dist/configure 
# make 
# make install

DB的安装过程很简单,如果缺少相关依赖库请用yum查找

OpenLDAP 安装

下载最新版的OpenLDAP 2.4.6,虽然很多前辈说过新的未必好,但是因为不知道那个好,所以先下来用用再说。

以下为简单安装过程,参照OpenLDAP主页安装

#wget OpenLDAP-URL 
#tar -zxvf openldap-2.4.7.tgz 
#cd openldap-2.4.7 
#./configure           #此处也可参照Postfix主页上的参数进行安装 
#make depend && make 
#make test            #第一次安装一定要执行此步,避免以后安装出错 
#make install
运行CentOS系统用yum安装比较简单

使用ldapmodify批量添加属性值

 
问题: 
在ou=People,o=abc,dc=super, dc=com树下放了10000个用户节点(objectClass=inetOrgPerson, objectClass=inetuser)。 
其中有超过9000个用户的属性inetuserstatus的值为不正确的"true",需要更正为 "Active"。 

解决方法: 
由 于需要修改的目录节点数目十分庞大,手工书写修改命令不太可行。所以,需要考虑用工具生成。考虑到ldapsearch的输出可以指定属性, 
可以在 ldapsearch输出的基础上加以修改得到最终的LDIF文件。首先,利用ldapsearch得到所有需要修改的目录节点的dn,并保存到文件 need_chg.dn: 

ldapsearch -D "cn=Directory Manager" -w password -b "ou=People,o=abc,dc=super,dc=com" "(inetuserstatus=true)" dn > need_chg.dn 
得到的need_chg.dn文件示例如下: 
uid=xulingyan,ou=people,o=abc,dc=super,dc=com 

uid=tn0001,ou=people,o=abc,dc=super,dc=com 

uid=tn0002,ou=people,o=abc,dc=super,dc=com 

uid=tn0003,ou=people,o=abc,dc=super,dc=com 

uid=tn0004,ou=people,o=abc,dc=super,dc=com 


然后编写sed脚本在每个dn前面加上"dn: ",并加上以下行: 
changetype: modify 
replace: inetuserstatus 
inetuserstatus: Active 

修改后的need_chg.dn文件示例如下: 
dn: uid=xulingyan,ou=people,o=abc,dc=super,dc=com 
changetype: modify 
replace: inetuserstatus 
inetuserstatus: Active 

dn: uid=tn0001,ou=people,o=abc,dc=super,dc=com 
changetype: modify 
replace: inetuserstatus 
inetuserstatus: Active 

dn: uid=tn0002,ou=people,o=abc,dc=super,dc=com 
changetype: modify 
replace: inetuserstatus 
inetuserstatus: Active 

dn: uid=tn0003,ou=people,o=abc,dc=super,dc=com 
changetype: modify 
replace: inetuserstatus 
inetuserstatus: Active 

dn: uid=tn0004,ou=people,o=abc,dc=super,dc=com 
changetype: modify 
replace: inetuserstatus 
inetuserstatus: Active 

该sed脚本应该如下: 

/^uid=/ { 
a\ 
changetype: modify\ 
replace: inetuserstatus\ 
inetuserstatus: Active 
s/uid/dn: uid/ 
} 

最后,运行ldapmodify -h host -p port -D -w -f 即可。 
添加多个属性时需要用 - 隔开 
例: 
dn: uid=arima,ou=Users,dc=yepn,dc=net 
add: radiusSessionTimeout 
radiusSessionTimeout: 43200 
- 
add: radiusTunnelType 
radiusTunnelType: VLAN 
- 
add: radiusTunnelMediumType 
radiusTunnelMediumType: IEEE-802 
- 
add: radiusTunnelPrivateGroupId 
radiusTunnelPrivateGroupId: 160 
- 
add: radiusTerminationAction 
radiusTerminationAction: RADIUS-Request 
- 

总结: 
熟悉LDIF文件格式并有效运文本处理工具可以高效率地解决一些看似棘手的难题。 
/home1/yepnnet/public_html/wiki/data/pages/openldap.txt · 最后更改: 2009/11/26 22:48 由 admin
到顶部
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0