本文旨在介绍如何安装OpenLDAP并且设置一个公司内部的集中化的邮件地址薄服务器供客户端查询。基本上,OpenLDAP还应用在其它许多方面,象集中化的用户帐号验证服务器,但邮件地址薄查询是最常用的。
二. 安装
按照编译和安装的步骤,依次运行:
#tar cvfz openldap-stable-20010524.tgz
#cd openldap-2.0.11
#./configure
#make depend
#make
#make test
#make install
我的 *** 作环境是redhat 6.1,如果没有遇到任何错误,最后默认安装LDAP后台程序slapd到目录/usr/local/libexec配置文件在目录/usr/local/etc/openldap/ 并且放各种OpenLDAP工具
ldapadd,ldapdelete,ldapmodify,ldapmodrdn,ldappasswd,ldapsearch 在目录
/usr/local/bin,运行时数据库在/usr/local/var/openldap-ldbm 。
增加用户public boolean addUserToLdap(String userCn) {
LdapContext ctx = getLdapConnection() //AD认证,获取Ldap连接对象ctx
Attributes attrsbu = new BasicAttributes(true)
BasicAttribute objclassSet = new BasicAttribute("objectclass")
for (String _class : LdapConfig.userObjectClass.split(",")) {
objclassSet.add(_class.trim()) //加入一些基本元素top,person,organizationalPerson,user
}
boolean isExist = this.searchUser(ctx, userCn)//添加用户前先查找AD中是否存在该用户
if (isExist == false){
attrsbu.put(objclassSet)
attrsbu.put(new BasicAttribute("cn", userCn)) //userCn:要添加的用户
attrsbu.put(new BasicAttribute("sAMAccountName", userCn))
attrsbu.put(new BasicAttribute("sn", userCn))
attrsbu.put(new BasicAttribute("displayName", userCn))//AD中显示的名称
attrsbu.put(new BasicAttribute("userPrincipalName", userCn + LdapConfig.domainName))
try {
String userDn = "cn=" +userCn + ","+ LdapConfig.userRootDn
ctx.createSubcontext(userDn, attrsbu) //添加用户到Ldap
System.out.println("[addUserToLdap] Add User:" + userDn)
ModificationItem[] mods = new ModificationItem[2]
//此密码必须注意:得到的字符串是""password""这种格式
String newQuotedPassword = LdapConfig.user_default_password
byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE")
mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
new BasicAttribute(LdapConfig.password_field,newUnicodePassword))
mods[1] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
new BasicAttribute(LdapConfig.userAccountControl,Integer.toString(
UF_NORMAL_ACCOUNT
+ UF_PASSWORD_EXPIRED
+ UF_DONT_EXPIRE_PASSWD)))
ctx.modifyAttributes(userDn, mods) //更改用户密码和权限
} catch (Exception e1){
e1.printStackTrace()
destroyLdapConnection(ctx)
return false
}
}else{
System.out.println("isExist :" + isExist + "用户:" + userCn + "已存在")
}
destroyLdapConnection(ctx)
return true
}
目的:linux系统默认使用自己的Unix用户,我们有时需要多台主机都使用同一个用户,这样的还用户管理就比较麻烦。比较简单的解决方法是配置这些linux主机都使用同一个ldap的用户,这样只需要在ldap中进行用户更改即可,不再需要所有主机都进行更改了。配置客户端:
a、安装ldap客户端:
yum install nss-pam-ldapd pam_ldap -y
b、图形化配置:
LANG=C authconfig-tui
或者用命令修改:
authconfig --enablemkhomedir --disableldaptls --enableldap --enableldapauth --ldapserver=ldap://110.1.236.51 --ldapbasedn='dc=yinkp,dc=com' --update
cat /etc/sysconfig/authconfig |grep yes
1、增加/etc/openldap/ldap.conf
2、修改 /etc/nsswitch.conf中sss为ldap
3、 修改/etc/pam.d/system-auth,/etc/pam.d/password-auth
sed -i 's/pam_sss.so/pam_ldap.so/g' /etc/pam.d/system-auth
sed -i 's/pam_sss.so/pam_ldap.so/g' /etc/pam.d/password-auth
4、修改sssd配置文件:
vi /etc/sssd/sssd.conf
5、修改nslcd配置文件:
vi /etc/nslcd.conf
6、重启nslcd/sssd
service nslcd restart
service sssd restart
验证:
切换为系统中没有,ldap中有的用户。如果OK,则成功。
ldapsearch -x -b 'ou=people,dc=yinkp,dc=com'
批量修改主机使用ldap用户:
分发上面已经配置好的主机上的文件到其它linux主机
注:如果没有分发脚本,也可以一个一个文件scp
deploy.sh /etc/sysconfig/authconfig /etc/sysconfig/ all
deploy.sh /etc/openldap/ldap.conf /etc/openldap/ all
deploy.sh /etc/nsswitch.conf /etc/ all
deploy.sh /etc/pam.d/system-auth /etc/pam.d/ all
deploy.sh /etc/sssd/sssd.conf /etc/sssd/ all
deploy.sh /etc/nslcd.conf /etc/ all
重启nslcd/sssd服务
runRemoteCmd.sh "/bin/systemctl restart nslcd.service &&/bin/systemctl restart sssd.service" ldap_client
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)