centos下yum安装配置openldap 2.4.23-32外送svn的apache下配置

写完这个文章有一阵了,合计下个月可以轮到这个文章记录发上来了,后来被群里(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文件)

<Location /svn/>
        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
</Location>
- THE END -
版权声明:
转载原创文章请注明,文章出处:http://kinggoo.com
原文地址:http://kinggoo.com/openldapinstallconf.htm
发表评论?

15 条评论。

  1. 如何修改olcDbDirectory:/var/lib/ldap路径,直接修改会出错

  2. 漏写了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

  3. 😛 尝试了好几次总算成功了。。。。。。。。。。 😛 😛 😛 😛
    虽然一直到最后还没有解开那个警告的原因, 😕 😕
    但依旧感谢

  4. 请问在做到配置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这一个文件,请问是否笔误?

        • 也就是说你那还是不能正确启动是吗?你看过日志吗,看看有什么错误

          我仔细检查我本地的配置文件,的确有这个问题,空一行的是因为 文章内转码的时候 我后来给删除掉了 哎
          修改两个文件的地方的确是写错了,我当时思绪是下一个新建的文件也算是编辑了。。。。太大意马虎了。 很感谢你的细心!

  5. 你好怎么配置ldaps:// 😛

发表评论