因为现在公司里的员工帐号分为邮件、上网、Samba、SNS、Desknets等帐号,管理起来非常的麻烦,特别是员工入社和退社时需要在每个服务器上做一次操作,加大了管理成本,主要是把我的复杂化了很多,所以想把帐号统一起来,因为以前也没有接触过Openldap,所以这次是从头学起,包括数据库部分。 特作此笔记方便以后自己记录和查找相关资料
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 -x -D "cn=Manager,dc=yepn,dc=net" -W -f users.ldif 简单解释: -x:使用认证; -D:指定使用哪个 dn 来操作; -W:提示输入密码; -f:指定要添加的 entry 的内容从文件中读入;
slappasswd -h{hash} #现在支持的加密算法 {CRYPT}, {MD5},{SMD5}, {SSHA}, {SHA}.
默认为{SSHA}
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 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安装比较简单
问题:
在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文件格式并有效运文本处理工具可以高效率地解决一些看似棘手的难题。