CentOS Linux安装OpenLDAP服务器

LDAP服务器用于统一认证账户信息,有点类似通讯录,实现集中管理用户账户的功能。系统为CentOS6.3。

一、安装openldap

yum install openldap openldap-servers openldap-clients openldap-devel compat-openldap

二、安装Berkeley DB

yum install db4 db4-utils

openldap使用Berkeley DB存储数据。

三、安装web server
由于目录服务是一套复杂的概念,所以这里安装phpLDAPadmin方便于管理。

yum install httpd php php-bcmath php-gd php-mbstring php-xml php-ldap

配置apache、php过程略过。

四、安装phpldapadmin

cd /tmp
wget http://sourceforge.net/projects/phpldapadmin/files/phpldapadmin-php5/1.2.3/phpldapadmin-1.2.3.zip/download
unzip phpldapadmin-1.2.3.zip
cp -R phpldapadmin-1.2.3 /var/www/html/phpldapadmin
cd /var/www/html/phpldapadmin/config
cp config.php.example config.php

五、配置openldap
安装完openldap后我们看到在/etc/openldap目录下有certs、schema、slapd.d三个目录和ldap.conf一个文件。
1)certs目录用于存放TLS认证的CA证书等。
2)(该目录用于旧的配置方法,已废弃)schema目录下有.schema文件和.ldif文件。
3)slapd.d目录是openldap2.4.x的配置目录。/etc/openldap/slapd.d/cn=config存放数据库的配置文件,/etc/openldap/slapd.d/cn=config/cn=schema存放.ldif文件。
4)ldap.conf是openldap client的配置文件。

1、
首先生成管理员密码:

slappasswd

输完两遍密码后会生成一个加密散列字符串,保存下来。
如:

{SSHA}JiW3WU7jREOTOMZKT6CklgJZriLIj738

2、
编辑数据库配置文件,设置域名:

vim /etc/openldap/slapd.d/cn=config/olcDatabase={2}bdb.ldif

找到:

olcSuffix: dc=my-domain,dc=com

修改dc:

olcSuffix: dc=ldap,dc=live-in,dc=org

设置目录树后缀(域名),作用是定义根的名字。

找到:

olcRootDN: cn=Manager,dc=my-domain,dc=com

修改dc:

olcRootDN: cn=admin,dc=ldap,dc=live-in,dc=org

设置管理员DN。
PS:LDAP管理员cn默认为Manager,可以改成自己需要的名字。

在olcDatabase={2}bdb.ldif最后添加:

olcRootPW: {SSHA}JiW3WU7jREOTOMZKT6CklgJZriLIj738

设置管理员密码。

3、
指定监控权限:

vim /etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif

找到:

dn.base="cn=manager,dc=my-domain,dc=com"

修改为:

dn.base="cn=admin,dc=ldap,dc=live-in,dc=org"

修改默认域名。

4、
设置Database Cache:

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

设置权限:

chown -R ldap:ldap /var/lib/ldap/

测试配置文件是否有错:

slaptest -u

提示:

config file testing succeeded

测试通过。

启动slapd服务:

service slapd start

六、配置phpldapadmin
1、编辑phpldapadmin配置文件

vim /var/www/html/phpldapadmin/config/config.php

找到”Define your LDAP servers in this section”区块。

将:

$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port',389);

前的注释去掉。

将:

$servers->setValue('server','base',array(''));

修改为:

$servers->setValue('server','base',array('dc=ldap,dc=live-in,dc=org'));

在array中输入设置的olcSuffix。

将:

$servers->setValue('login','auth_type','session');

前的注释去掉。

2、
设置用户和组:

chown -R apache:apache /var/www/html/phpldapadmin

3、
浏览器访问:http://IP/phpldapadmin/index.php
使用RootDN和RootPW登陆:
cn=admin,dc=ldap,dc=live-in,dc=org
123456

此时左侧目录树会显示:This base cannot be created with PLA.

3、添加根节点

cd /etc/openldap
vim base.ldif

输入:

dn: dc=ldap,dc=live-in,dc=org
o: ldap
objectclass: dcObject
objectclass: organization

添加数据库:

ldapadd -f base.ldif -x -D cn=admin,dc=ldap,dc=live-in,dc=org -W

输入密码后会提示:

adding new entry “dc=ldap,dc=live-in,dc=org”

在浏览器里刷新一下条目就会显示出根节点。

————————-我是分割线————————-

七、接下来做一个实验
A机器为上面安装的LDAP服务器,用户从LDAP服务器上获取账户密码登录另一台B机器。B机器上先搜索本地账户,如果没有就从A机器获得账户。A机器IP为192.168.1.100,B机器IP为192.168.1.200。

phpldapadmin设置
1、浏览器登陆phpldapamdin,点击根节点,点击创建一个子条目,选择Posix Group。创建一个名为ldaptest的组。
2、点击cn=ldaptest,点击创建一个子条目,选择User Account。
3、设定用户名,密码,GID,家目录,登陆的shell。其中的User ID就是登陆的用户名。

客户端(B机器)设置
安装所需的软件包:

yum install openldap-clients pam_ldap nss-pam-ldapd

1、编辑openldap客户端配置文件

vim /etc/openldap/ldap.conf

输入:

URI ldap://192.168.1.100
BASE dc=ldap,dc=live-in,dc=org

在客户端测试下搜索数据库:

ldapsearch -x -b "dc=ldap,dc=live-in,dc=org"


2、

vim /etc/pam_ldap.conf

修改:

host 192.168.1.100
base dc=ldap,dc=live-in,dc=org

3、
使用图形交互界面设置pam和ldap其余内容

authconfig-tui

User Information选择:
Use LDAP
Authentication选择:
Use Shadow Passwords
Use LDAP Authentication
Local authorization is sufficient

PS:交互界面修改了/etc/pam_ldap.conf、/etc/pam.d/system-auth、/etc/nsswitch.conf这三个文件。

4、设置第一次登陆时建立家目录

vim /etc/pam.d/system-auth

在最后添加:

session required pam_mkhomedir.so skel=/etc/skel umask=0022

重启B机器使设置生效。随后使用test1用户名及密码登陆。
显示:

Creating directory ‘/home/users/test1’.
Last login: Fri Feb 8 14:00:54 2013 from 192.168.1.200
-sh-4.1$

登陆成功!

PS1:这里还未设置LDAP服务器的TLS加密。
PS2:debug模式命令slapd -d 1,可以查看交互详细情况。

参考资料:
openldap基础及安装
http://www.overclockers.com/forums/showthread.php?t=707070
http://www.cnblogs.com/obpm/archive/2010/08/28/1811065.html
http://blog.csdn.net/destina/article/details/6188993
http://www.cnblogs.com/adforce/archive/2011/09/15/2177061.html

ldap整合ssh
http://blog.csdn.net/flyoxs/article/details/6007643

《CentOS Linux安装OpenLDAP服务器》上的29个想法

  1. 兄弟,我按照你的方法来安装啦,在客户端也可以用ldapsearch -x -D “cn=Manager,dc=test,dc=com” -W -b “dc=test,dc=com”查到我新建立的用户ladmin,但是用id ladmin来登陆是出现su: user admin does not exist,请大师帮下忙看是哪里的问题谢谢

  2. 你好 请教个问题哈
    按照你的步骤到
    phpldapadmin设置
    1、浏览器登陆phpldapamdin,点击根节点,点击创建一个子条目,选择Posix Group。创建一个名为ldaptest的组。
    //页面提示
    Automatically removed objectClass from template
    Samba: Group Mapping: posixGroup removed from template as it is not defined in the schema
    warn Automatically removed objectClass from template

    选择不了Posix Group?是不是缺少了什么配置

    1. 你好,参考:http://phpldapadmin.sourceforge.net/wiki/index.php/FAQ#Why_do_i_get_Automatically_removed_objectClass_from_template_when_creating_or_editing.3F

      1. 谢谢回答哈,昨天调查的时候也看到了这个
        您知道Define the missing objectClass to your LDAP server’s schema (you’ll need to follow your LDAP server’s instructions for this)怎么配置?

        其它三种方法只是屏蔽了这种错误,尝试了是可以

      2. 现在做的时候直接通过ldif文件创建,创建用户的时候总是提示
        ldap_add: Invalid syntax (21)
        additional info: objectClass: value #0 invalid per syntax
        好像就是缺少了objectClass

  3. 2、

    vim /etc/pam_ldap.conf

    修改:

    host 192.168.1.100
    base dc=ldap,dc=live-in,dc=org
    //还有可以问下这步的作用是什么?

  4. LZ,
    可以再帮忙看下这个问题?
    Automatically removed objectClass from template
    Samba: Group Mapping: posixGroup removed from template as it is not defined in the

    官网上面说的不知如何配置

      1. 我看了下 /etc/openldap/schema/nis.schema文件里面已经定义了 貌似没加载
        shema在最新版本中这个不是动态加载的?

评论已关闭。