RHEL6.3之OpenLDAP配置实践

http://blog.sina.com.cn/s/blog_92dc41ea0101fyh9.html

 

OpenLDAP服务器建设比较麻烦,本人经过数十次尝试,总算搭起来了,现分享给大家。

 

一、OpenLDAP的安装与基本配置

1、 Yum安装

yum -y install openldap-servers openldap-clients

2、 vi /etc/sysconfig/ldap,确保SLAPD_LDAPI=yes

3、 创建管理员密码,尽量使用高强度密码:

slappasswd

  • 上述命令会生成一个经过SSHA算法加密的密码,保存该密文,后面要用到。

  •  本例中输入的密码为secret

4、cp /var/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf

 

vi /etc/openldap/slapd.conf,确保有以下行:

 

include /etc/openldap/schema/core.schema

include /etc/openldap/schema/cosine.schema

include /etc/openldap/schema/inetorgperson.schema

include /etc/openldap/schema/nis.schema

allow bind_v2

pidfile /var/run/openldap/slapd.pid

argsfile /var/run/openldap/slapd.args

 

database bdb 

suffix "dc=kingmed,dc=com"

checkpoint 1024 15

rootdn "cn=Manager,dc=kingmed,dc=com"

rootpw {SSHA} jQu2QPBA4BYh9PByb6fIpCi4PRdgCmh3 //上面第3)步产生的密码

directory /var/lib/ldap

index objectClass eq,pres

index ou,cn,mail,surname,givenname eq,pres,sub

index uidNumber,gidNumber,loginShell eq,pres

index uid,memberUid eq,pres,sub

index nisMapName,nisMapEntry eq,pres,sub

 

access to attrs=userPassword

by self write

by anonymous auth

by dn.base="cn=Manager,dc=kingmed,dc=com" write

by * none

 

access to *

by * read

****************************************************************************

上面实测access to在database bdb一行前后作用不一样,故调整到后面来了

****************************************************************************

二、使用migrationtools工具来创建档案

1 、安装及配置迁移工具:

yum install migrationtools –y

cd /usr/share/migrationtools

vi migrate_common.ph

修改如下一些内容:

$DEFAULT_MAIL_DOMAIN = "kingmed.com";

$DEFAULT_BASE ="dc=kingmed,dc=com";

 

2、在该目录下编辑frontend.ldif,创建域结构,并输入以下行:

dn: dc=kingmed,dc=com

objectClass: top

objectClass: dcObject

objectclass: organization

o: kingmed.com

dc: kingmed

 

dn: cn=Manager,dc=kingmed,dc=com

objectClass: simpleSecurityObject

objectClass: organizationalRole

cn: Manager

userPassword: {SSHA} jQu2QPBA4BYh9PByb6fIpCi4PRdgCmh3

 

dn: ou=People,dc=kingmed,dc=com

objectClass: organizationalUnit

ou: People

 

dn: ou=Group,dc=kingmed,dc=com

objectClass: organizationalUnit

ou: Group

 

3 、创建用户资料

1) vi /etc/default/useradd

GROUP=100

HOME=/nfshome //设置新建用户默认目录为/nfshome

INACTIVE=-1

EXPIRE=

SHELL=/bin/bash

SKEL=/etc/skel

CREATE_MAIL_SPOOL=yes

 

2) mkdir /nfshome

 

3) 创建用户帐号

useradd ldapuser1

echo "123456"|passwd --stdin ldapuser1

useradd ldapuser2

echo "123456"|passwd --stdin ldapuser2

useradd ldapuser3

echo "123456"|passwd --stdin ldapuser3

 

4、 创建数据库资料文件:

./migrate_passwd.pl /etc/passwd user.ldif

vi user.ldif,删除不需要的用户帐号;

./migrate_group.pl /etc/group groups.ldif

vi groups.ldif,删除不需要的用户组;

 

5 、依次导入域结构、用户帐号及组帐号:

slapadd -v -l frontend.ldif // slapadd命令会在/var/lib/ldap/目录下产生很多数据库文件

slapadd -v -l user.ldif

slapadd -v -l groups.ldif

 

6 、创建数据库配置文件,从模板产生:

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

 

7 、删除/etc/openldap/slapd.d/目录内容,并重新生成配置文件:

rm -rf /etc/openldap/slapd.d/*

slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

 

另外需要注意的是:若日后变更了slapd.conf文件的内容,则处理方式如下:

#rm -rf /etc/openldap/slapd.d/*

#slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

#chown -R ldap:ldap /etc/openldap/slapd.d

#service slapd restart

第7步也可直接删除/etc/openldap/slapd.d文件夹,让程序直接从slapd.conf配置启动。

 

8、 修改两个目录的属主和权限,并启动ldap:

chown -R ldap. /etc/openldap/slapd.d 

chown -R ldap. /var/lib/ldap 

/etc/rc.d/init.d/slapd start 

#chkconfig slapd on 

 

由于命令行操作不直观,所我们一般使用一些第三方工具来管理认证,如phpldapadmin。

 

三 、Phpldapadmin安装与使用

 

1 、安装与配置httpd和php:

yum –y install httpd php-ldap php

 

2、 下载phpldapadmin

1)cd /var/www/html/

2)wget

http://nchc.dl.sourceforge.net/project/phpldapadmin/phpldapadmin-php5/1.2.3/phpldapadmin-1.2.3.zip

3) unzip phpldapadmin-1.2.3.zip

4) mv phpldapadmin-1.2.3 myldap

注意:如果phpldapadmin是从别的目录复制过来的并且开启了Selinux,就要先用restorecon –R /var/www/html恢复该目录下所有文件的安全上下文

 

3、 配置phpldapadmin:

cd /var/www/html/myldap/config

cp config.php.example config.php


4、 开启防火墙:

#iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT

#iptables -I INPUT -p tcp -m tcp --dport 389 -j ACCEPT //LDAP 端口

#iptables -I INPUT -p udp -m udp --dport 389 -j ACCEPT //LDAP 端口

#service iptables save

#service iptables restart

 

然后在浏览器中输入:http://127.0.0.1/myldap,用户名:cn=Manager,dc=kingmed,dc=com,密码为secret,效果如下图:

RHEL6.3之OpenLDAP配置实践_第1张图片

附:两种快速清除配置、重新导入数据的配置命令

================== 前面五行都是相同的 =====================

service slapd stop

rm -rf /etc/openldap/slapd.d/*

rm -rf /var/lib/ldap/*

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

cd /usr/share/migrationtools

 

================== 以下为第一种方法 =====================

slapadd -v -l frontend.ldif

slapadd -v -l user.ldif

slapadd -v -l groups.ldif

slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

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

chown -R ldap:ldap /etc/openldap/slapd.d

service slapd start //使用slapadd添加完档案后才启动数据库

 

================== 以下为第二种方法 =====================

slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

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

chown -R ldap:ldap /etc/openldap/slapd.d

service slapd start //lapdadd命令必须先启动数据库

ldapadd -x -D cn=Manager,dc=kingmed,dc=com -W -f frontend.ldif

ldapadd -x -D cn=Manager,dc=kingmed,dc=com -W -f user.ldif

ldapadd -x -D cn=Manager,dc=kingmed,dc=com -W -f groups.ldif

 

第二章 OpenLDAP客户端安装与配置

1、 yum –y install openldap-clients nss-pam-ldapd

2、 执行authconfig-tui命令,选中如下图所示的选项:

RHEL6.3之OpenLDAP配置实践_第2张图片

左侧选择:useLDAP

右侧选择:use MD5 …;use shadow…;use LDAP …和 Local auth…四项。

然后,点击Next:

RHEL6.3之OpenLDAP配置实践_第3张图片

本实例没有配置证书,因此不选Use TLS,在Server一栏填写ldap://服务器IP,Base DN一栏填写自己配置的域:dc=kingmed,dc=com,完成后保存退出。

3、 authconfig-tui会修改很多配置文件,先来检查下(红色表示修改过的地方):

1)grep -v "#" /etc/openldap/ldap.conf

URI ldap://192.168.10.23/

BASE dc=kingmed,dc=com

TLS_CACERTDIR /etc/openldap/cacerts

 

2)grep -v "#" /etc/nslcd.conf

uid nslcd

gid ldap

uri ldap://192.168.10.23/

base dc=kingmed,dc=com

ssl no

tls_cacertdir /etc/openldap/cacerts

 

3)grep -v "#" /etc/pam_ldap.conf //此文件要将里面的 host 127.0.0.1加#注释掉

base dc=kingmed,dc=com

URI ldap://192.168.10.23/

ssl no

tls_cacertdir /etc/openldap/cacerts

pam_password md5

 

4)grep -v "#" /etc/nsswitch.conf

passwd: files ldap

shadow: files ldap

group: files ldap

hosts: files dns

bootparams: nisplus [NOTFOUND=return] files

ethers: files

netmasks: files

networks: files

protocols: files

rpc: files

services: files sss

netgroup: ldap

publickey: nisplus

automount: files ldap

aliases: files ldap

 

5)grep -v "#" /etc/pam.d/system-auth

auth required pam_env.so

auth sufficient pam_unix.so nullok try_first_pass

auth requisite pam_succeed_if.so uid >= 500 quiet

auth sufficient pam_ldap.so use_first_pass

auth required pam_deny.so

 

account required pam_unix.so broken_shadow

account sufficient pam_localuser.so

account sufficient pam_succeed_if.so uid < 500 quiet

account [default=bad success=ok user_unknown=ignore] pam_ldap.so

account required pam_permit.so

 

password requisite pam_cracklib.so try_first_pass retry=3 type=

password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok

password sufficient pam_ldap.so use_authtok

password required pam_deny.so

 

session optional pam_keyinit.so revoke

session required pam_limits.so

session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

session required pam_unix.so

 

session optional pam_ldap.so

session optional pam__mkhomedir.so skel=/etc/skel umask=077

 

6)grep "USELDAP" /etc/sysconfig/authconfig

USELDAPAUTH=yes

USELDAP=yes

 

4、 启动nslcd服务,并将其设为开机自启动:

service nslcd start

chkconfig nslcd on

 

5、 验证:

id ldapuser1 或者 getent passwd ldapuser1,如果能显示帐号信息,此时可以通过su – ldapuser1来登录LADP服务器了,如下图所示:

RHEL6.3之OpenLDAP配置实践_第4张图片
显示如上信息,说明账户可以登录,但没找到用户主目录。这需要在本地配置nfs并通过autofs自动挂载服务器家目录到本地客户端。

第三章 配置autofs自动挂载

一 服务器端配置

1、RHEL默认已安装nfs,如果没有,则先使用yum –y install nfs来安装并启动如下服务:

1) service rpcbind start,chkconfig rpcbind on

2) service nfslock start,chkconfig nfslock on

3) service nfs start,chkconfig nfs on

 

2、 vi /etc/exports,输入如下内容:

/nfshome *(rw,sync)//可根据需要修改*,限制访问的网络

 

3 、查找SELinux中关于nfs的配置项目,找到关于nfs主目录的项目:

#getsebool -a | grep nfs

 

allow_ftpd_use_nfs --> off

cobbler_use_nfs --> off

git_system_use_nfs --> off

httpd_use_nfs --> off

qemu_use_nfs --> on

rsync_use_nfs --> off

samba_share_nfs --> off

sanlock_use_nfs --> off

sge_use_nfs --> off

use_nfs_home_dirs --> on//设为on,否则远程用户无权限进入自己的目录

virt_use_nfs --> off

xen_use_nfs --> off

 

如果use_nfs_home_dirs的值为off,则如下修改:

#setsebool -P use_nfs_home_dirs on

设置完后,重启nfs服务器:

#service nfs restart

 

4 、【可选】vi /etc/sysconfig/nfs,去掉一些端口的注释符,如下:

LOCKD_TCPPORT=32803

LOCKD_UDPPORT=32769

MOUNTD_PORT=892

STATD_PORT=662

如果不取消这些端口的注释,那么在客户端showmount –e IP 时会显示如下错误信息:

rpc mount export: RPC: Unable to receive; errno = No route to host

这一步不是必要的,虽然客户端showmount –e 查看不到共享,但不影响nfs输出及挂载

 

5 、配置防火墙,允许远程挂载:

vi /etc/sysconfig/iptables

-A INPUT –p tcp –m state --state NEW –m tcp --dport 111 –j ACCEPT

-A INPUT –p udp –m state --state NEW –m udp --dport 111 –j ACCEPT

-A INPUT –p tcp –m state --state NEW –m tcp --dport 662 –j ACCEPT

-A INPUT –p udp –m state --state NEW –m udp --dport 662 –j ACCEPT

-A INPUT –p tcp –m state --state NEW –m tcp --dport 892 –j ACCEPT

-A INPUT –p udp –m state --state NEW –m udp --dport 892 –j ACCEPT

-A INPUT –p tcp –m state --state NEW –m tcp --dport 2049 –j ACCEPT

-A INPUT –p udp –m state --state NEW –m udp --dport 2049 –j ACCEPT

-A INPUT –p tcp –m state --state NEW –m tcp --dport 32803 –j ACCEPT

-A INPUT –p udp –m state --state NEW –m udp --dport 32769 –j ACCEPT

#service iptables restart //重新启动防火墙

 

6、 在客户端检查nfs输出,应该有如下结果:

#showmount -e 192.168.10.23

Export list for 192.168.10.23:

/nfshome *

 

二 客户端配置

1 、默认情况下,RHEL已经安装了nfs及autofs,如果没有,则使用yum –y install nfs-utils autofs来安装,并启动如下服务:

(1)service rpcbind start ,chkconfig rpcbind on

(2)service rpcidmapd start ,chkconfig rpcidmapd on

(3)service nfslock start ,chkconfig nfslock on

(4)service netfs start ,chkconfig netfs on

(5)service autofs start ,chkconfig autofs on

2 、配置autofs服务

vi /etc/auto.master ,在最后一行后面加入:

/nfshome /etc/auto.nfs

vi /etc/auto.nfs,输入如下内容并保存:

* -rw,soft,intr 192.168.10.23:/nfshome/&

重启下autofs服务:service autofs stop; service autofs start

3、 客户端测试登录

RHEL6.3之OpenLDAP配置实践_第5张图片
4 、注意事项:

        对/etc/auto.nfs文件使用*及&通配符时,则/etc/auto.master里的挂载点必须与服务器的挂载点同名同目录/nfshome,否则客户端su - 切换时会提示找不到目录。

不建议把ldap用户直接创建在/home文件夹里。否则由于/etc/auto.nfs文件里的*及&符号的自动匹配的作用,客户autofs会自动在内存中创建/home目录,会隐藏掉实际的/home目录。