写完这个文章有一阵了,合计下个月可以轮到这个文章记录发上来了,后来被群里(56479030)的童鞋们要看,只能提前发了。
系统信息
[root@kinggoo ~]# cat /etc/redhat-release CentOS release 6.4 (Final) [root@kinggoo ~]# uname -a Linux kinggoo.com 2.6.32-358.23.2.el6.i686 #1 SMP Wed Oct 16 17:21:31 UTC 2013 i686 i686 i386 GNU/Linux
安装openldap(2.4.23-32)
yum -y install openldap openldap-*
确认/etc/sysconfig/ldap的内容如下面默认一般不需要修改
[root@kinggoo openldap]# cat /etc/sysconfig/ldap |grep -v -E "^$|^#" SLAPD_LDAP=yes SLAPD_LDAPI=yes #未开启ssl SLAPD_LDAPS=no
配置文件的操作
[root@kinggoo openldap]# cp -rf /etc/openldap/slapd.d /etc/openldap/slapd.d_`date +%Y%m%d`.bak [root@kinggoo openldap]# rm -rf /etc/openldap/slapd.d/* [root@kinggoo openldap]# touch /etc/openldap/slapd.conf [root@kinggoo openldap]# echo -e "pidfile /var/run/openldap/slapd.pid\nargsfile /var/run/openldap/slapd.args" > /etc/openldap/slapd.conf [root@kinggoo openldap]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d 返回信息:config file testing succeeded
修改文件
[root@kinggoo openldap]# cd /etc/openldap/slapd.d/cn=config/ [root@kinggoo cn=config]# vim olcDatabase\=\{0\}config.ldif #注意需要修改第四行内的olcAccess: {0}to * by * none改为如下信息(在星号后面的by前面应该是两个英文半角的空格) olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break
新建一个ldif文件
[root@kinggoo cn=config]# touch /etc/openldap/slapd.d/cn=config/olcDatabase\=\{1\}monitor.ldif #向其内添加如下信息,注意后面和前面不要有空格 [root@kinggoo cn=config]# cat olcDatabase\=\{1\}monitor.ldif dn: olcDatabase={1}monitor objectClass: olcDatabaseConfig olcDatabase: {1}monitor olcAccess: {1}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break olcAddContentAcl: FALSE olcLastMod: TRUE olcMaxDerefDepth: 15 olcReadOnly: FALSE olcMonitoring: FALSE structuralObjectClass: olcDatabaseConfig creatorsName: cn=config modifiersName: cn=config
修改slapd.d目录的属主和权限,并启动ldap:
[root@kinggoo cn=config]# chown -R ldap.ldap /etc/openldap/slapd.d [root@kinggoo cn=config]# chown -R ldap.ldap /var/lib/ldap [root@kinggoo cn=config]# chmod -R 700 /etc/openldap/slapd.d [root@kinggoo cn=config]# chkconfig --add slapd [root@kinggoo cn=config]# chkconfig --level 345 slapd on [root@kinggoo cn=config]# service slapd start 不报错就没什么问题,有问题的话估计就是你哪个地方执行错误了,重头看看
执行如下几条命令
依次会返回
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/core.ldif
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=core,cn=schema,cn=config"
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=cosine,cn=schema,cn=config"
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=nis,cn=schema,cn=config"
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=inetorgperson,cn=schema,cn=config"
创建Openldap的管理员密码,使用slappasswd命令,会提示你输入密码的,记得把密码记住啊!!!!如我加密后的是
{SSHA}zr6Ixzs64yHpz0xHTq4PoSO1Wc6Qy9uA
好现在编辑backend.ldif文件,先是主配置的 就等于slapd.conf文件内容
你需要修改olcSuffix,olcRootDN,olcRootPW,olcAccess几个标签的地方
[root@kinggoo cn=config]# cat backend.ldif # create new # replace the section "dc=***,dc=***" to your own suffix # replace the section "olcRootPW: ***" to your own password generated by slappasswd above dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulepath: /usr/lib64/openldap olcModuleload: back_hdb dn: olcDatabase=hdb,cn=config objectClass: olcDatabaseConfig objectClass: olcHdbConfig olcDatabase: {2}hdb olcSuffix: dc=kinggoo,dc=com olcDbDirectory: /var/lib/ldap olcRootDN: cn=admin,dc=kinggoo,dc=com olcRootPW: {SSHA}zr6Ixzs64yHpz0xHTq4PoSO1Wc6Qy9uA olcDbConfig: set_cachesize 0 2097152 0 olcDbConfig: set_lk_max_objects 1500 olcDbConfig: set_lk_max_locks 1500 olcDbConfig: set_lk_max_lockers 1500 olcDbIndex: objectClass eq olcLastMod: TRUE olcMonitoring: TRUE olcDbCheckpoint: 512 30 olcAccess: to attrs=userPassword by dn="cn=admin,dc=kinggoo,dc=com" write by anonymous auth by self write by * none olcAccess: to attrs=shadowLastChange by self write by * read olcAccess: to dn.base="" by * read olcAccess: to * by dn="cn=admin,dc=kinggoo,dc=com" write by * read
然后执行,并有返回
[root@kinggoo cn=config]# ldapadd -Y EXTERNAL -H ldapi:/// -f ./backend.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=module,cn=config" adding new entry "olcDatabase=hdb,cn=config"
重启服务,然后看有没有警告,如果有那你最好是重新来过
然后在编辑文件
[root@kinggoo cn=config]# cat frontend.ldif # 你需要修改dn:,userPassword几个标签的地方 # create new # replace the section "dc=***,dc=***" to your own suffix # replace the section "userPassword: ***" to your own password generated by slappasswd above dn: dc=kinggoo,dc=com objectClass: top objectClass: dcObject objectclass: organization o: KingGoo com dc: KingGoo dn: cn=admin,dc=kinggoo,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin userPassword: {SSHA}zr6Ixzs64yHpz0xHTq4PoSO1Wc6Qy9uA dn: ou=people,dc=kinggoo,dc=com objectClass: organizationalUnit ou: people dn: ou=groups,dc=kinggoo,dc=com objectClass: organizationalUnit ou: groups
然后执行
[root@kinggoo cn=config]# ldapadd -x -D cn=admin,dc=kinggoo,dc=com -W -f ./frontend.ldif Enter LDAP Password: #这里输入你的明文密码 adding new entry "dc=kinggoo,dc=com" adding new entry "cn=admin,dc=kinggoo,dc=com" adding new entry "ou=people,dc=kinggoo,dc=com" adding new entry "ou=groups,dc=kinggoo,dc=com"
重启服务,然后看有没有警告,如果有那你最好是重新来过。如果没问题,那恭喜你!
[root@kinggoo ~]# service slapd restart Stopping slapd: [ OK ] Starting slapd: [ OK ]
删除用户或组条目
[root@kinggoo ~]# ldapdelete -x -W -D ‘cn=admin,dc=kinggoo,dc=com’ “uid=cent,ou=people,dc=kinggoo,dc=com”
Enter LDAP Password:
[root@kinggoo ~]# ldapdelete -x -W -D ‘cn=admin,dc=kinggoo,dc=com’ “cn=cent,ou=groups,dc=kinggoo,dc=com”
Enter LDAP Password:
如果忘记管理员密码,或者想修改该密码:
ldappasswd -x -v -S -W -D cn=admin,dc=kinggoo,dc=com
大概已经结束了:
如果你继续往下看
偷来两个脚本
添加本地存在用户到目录服务【我可没使用本地账户啊】
[root@kinggoo ~]# vi ldapuser.sh ###### ldapuser script start ###### # extract local users who have 500-999 digit UID # replace "SUFFIX=***" to your own suffix # this is an example #!/bin/bash SUFFIX='dc=kinggoo,dc=com' LDIF='ldapuser.ldif' echo -n > $LDIF for line in `grep "x:[5-9][0-9][0-9]:" /etc/passwd | sed -e "s/ /%/g"` do UID1=`echo $line | cut -d: -f1` NAME=`echo $line | cut -d: -f5 | cut -d, -f1` if [ ! "$NAME" ] then NAME=$UID1 else NAME=`echo $NAME | sed -e "s/%/ /g"` fi SN=`echo $NAME | awk '{print $2}'` if [ ! "$SN" ] then SN=$NAME fi GIVEN=`echo $NAME | awk '{print $1}'` UID2=`echo $line | cut -d: -f3` GID=`echo $line | cut -d: -f4` PASS=`grep $UID1: /etc/shadow | cut -d: -f2` SHELL=`echo $line | cut -d: -f7` HOME=`echo $line | cut -d: -f6` EXPIRE=`passwd -S $UID1 | awk '{print $7}'` FLAG=`grep $UID1: /etc/shadow | cut -d: -f9` if [ ! "$FLAG" ] then FLAG="0" fi WARN=`passwd -S $UID1 | awk '{print $6}'` MIN=`passwd -S $UID1 | awk '{print $4}'` MAX=`passwd -S $UID1 | awk '{print $5}'` LAST=`grep $UID1: /etc/shadow | cut -d: -f3` echo "dn: uid=$UID1,ou=people,$SUFFIX" >> $LDIF echo "objectClass: inetOrgPerson" >> $LDIF echo "objectClass: posixAccount" >> $LDIF echo "objectClass: shadowAccount" >> $LDIF echo "uid: $UID1" >> $LDIF echo "sn: $SN" >> $LDIF echo "givenName: $GIVEN" >> $LDIF echo "cn: $NAME" >> $LDIF echo "displayName: $NAME" >> $LDIF echo "uidNumber: $UID2" >> $LDIF echo "gidNumber: $GID" >> $LDIF echo "userPassword: {crypt}$PASS" >> $LDIF echo "gecos: $NAME" >> $LDIF echo "loginShell: $SHELL" >> $LDIF echo "homeDirectory: $HOME" >> $LDIF echo "shadowExpire: $EXPIRE" >> $LDIF echo "shadowFlag: $FLAG" >> $LDIF echo "shadowWarning: $WARN" >> $LDIF echo "shadowMin: $MIN" >> $LDIF echo "shadowMax: $MAX" >> $LDIF echo "shadowLastChange: $LAST" >> $LDIF echo >> $LDIF done ###### ldapuser script end ######
如何使用该脚本
[root@kinggoo ~]# sh ldapuser.sh
[root@kinggoo ~]# ldapadd -x -D cn=admin,dc=kinggoo,dc=com -W -f ldapuser.ldif Enter LDAP Password:# LDAP admin password adding new entry "uid=cent,ou=people,dc=kinggoo,dc=com" adding new entry "uid=fedora,ou=people,dc=kinggoo,dc=com" adding new entry "uid=ubuntu,ou=people,dc=kinggoo,dc=com" adding new entry "uid=debian,ou=people,dc=kinggoo,dc=com" adding new entry "uid=fermi,ou=people,dc=kinggoo,dc=world"
添加本地存在组到目录服务
[root@kinggoo ~]# vi ldapgroup.sh # extract local groups who have 500-999 digit UID # replace "SUFFIX=***" to your own suffix # this is an example #!/bin/bash SUFFIX='dc=kinggoo,dc=com' LDIF='ldapgroup.ldif' echo -n > $LDIF for line in `grep "x:[5-9][0-9][0-9]:" /etc/group` do CN=`echo $line | cut -d: -f1` GID=`echo $line | cut -d: -f3` echo "dn: cn=$CN,ou=groups,$SUFFIX" >> $LDIF echo "objectClass: posixGroup" >> $LDIF echo "cn: $CN" >> $LDIF echo "gidNumber: $GID" >> $LDIF users=`echo $line | cut -d: -f4 | sed "s/,/ /g"` for user in ${users} ; do echo "memberUid: ${user}" >> $LDIF done echo >> $LDIF done
如何使用该脚本
[root@kinggoo ~]# sh ldapgroup.sh
[root@kinggoo ~]# ldapadd -x -D cn=admin,dc=kinggoo,dc=com -W -f ldapgroup.ldif Enter LDAP Password:# LDAP admin password adding new entry "cn=cent,ou=groups,dc=kinggoo,dc=com" adding new entry "cn=fedora,ou=groups,dc=kinggoo,dc=com" adding new entry "cn=ubuntu,ou=groups,dc=kinggoo,dc=com" adding new entry "cn=debian,ou=groups,dc=kinggoo,dc=com" adding new entry "cn=fermi,ou=groups,dc=kinggoo,dc=com"
提示:如果你的集成方式是“apache+openldap+svn” 可以使用下面的这个配置(httpd配置文件下的subversion.conf文件)
DAV svn SVNListParentPath on SVNParentPath /opt/__svn__/svnroot AuthzSVNAccessFile /opt/__svn__/svnconf/authz.conf # 在ldap找不到账号的情况下可以使用其它的认证方式(如,密码文件) AuthzLDAPAuthoritative off # openLDAP的管理账户 AuthLDAPBindDN "cn=admin,dc=kinggoo,dc=com" # AuthLDAPBindPassword 这里是你ldap的管理员密码,明文非加密 AuthLDAPBindPassword openldapadmin AuthBasicProvider ldap # 认证数据来源:"ou=users,dc=kinggoo,dc=com" 下所有子entity的uid作为认证用户名 AuthLDAPURL "ldap://127.0.0.1:389/ou=users,dc=kinggoo,dc=com?cn?sub?(objectClass=*)" # http 基本认证 AuthType Basic AuthName "KingGoo Ts Subversion repository...Tscccn" Require valid-user # 设置目录权限,实现列表所有工程目录 Options Indexes FollowSymLinks Satisfy any Order allow,deny Allow from all
如何修改olcDbDirectory:/var/lib/ldap路径,直接修改会出错
那就不要修改了
你直接ln 实际这个目录下的so包啊 la 什么的 都做个软连接到/var/lib/ldap
漏写了ldap.conf文件内容
#
# LDAP Defaults
#
# See ldap.conf(5) for details
# This file should be world readable but not world writable.
#BASE dc=example,dc=com
#URI ldap://ldap.example.com ldap://ldap-master.example.com:666
BASE dc=KingGoo,dc=com
URI ldap://127.0.0.1/ ldapi://KingGoo.cn
#SIZELIMIT 12
#TIMELIMIT 15
#DEREF never
TLS_CACERTDIR /etc/openldap/certs
😛 尝试了好几次总算成功了。。。。。。。。。。 😛 😛 😛 😛
虽然一直到最后还没有解开那个警告的原因, 😕 😕
但依旧感谢
你可以尝试一下 slapdtest
请问在做到配置backend.ldif文件后重启服务
总是发生以下情况:
[root@test cn=config]# service slapd restart
停止 slapd: [确定]
正在检查 slapd 的配置文件: [警告]
config error processing cn=module,cn=config,cn=config:
config file testing succeeded
正在启动 slapd: [确定]
请问怎么解决???
配置完全按照您这边提供的配置方法
你仔细检查一下那几个不能有空格的地方 还有就是你看看你是不是dc什么的配置有问题不正确呢
我这边的测试环境应该完全按照您的配置搭建的(主要是按自己的配置搭建失败了)。除了admin的密码直接就是复制进去的,空格比对过了,都没有。另外有一个小bug:backend.ldif文件第9行dn之前必须空一行,不然导入文件会有错误。
还有想问一下:修改两个文件这一段只修改了olcDatabase\=\{0\}config.ldif这一个文件,请问是否笔误?
也就是说你那还是不能正确启动是吗?你看过日志吗,看看有什么错误
我仔细检查我本地的配置文件,的确有这个问题,空一行的是因为 文章内转码的时候 我后来给删除掉了 哎
修改两个文件的地方的确是写错了,我当时思绪是下一个新建的文件也算是编辑了。。。。太大意马虎了。 很感谢你的细心!
messsage里没有任何的相关信息 😥
是openldap的日志呀, 他有日志可以看的 应该是在 /var/log/slapd 下
我未找到该文件,即便是在slapd.conf中添加了相关设定,重启服务后仍没有此文件。另外请教下在centos6.5下未发现有syslog服务和相关配置文件
那你需要安装一下 rsyslog服务 yum安装即可
然后在 vim /etc/rsyslog.conf 最后一行加上
local4.* /var/log/slapd/slapd.log
保存重启服务
你好怎么配置ldaps:// 😛
额,这个一直没做ldaps 还真没办法回答这个问题