写完这个文章有一阵了,合计下个月可以轮到这个文章记录发上来了,后来被群里(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 还真没办法回答这个问题