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,效果如下图:
================== 前面五行都是相同的 =====================
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命令,选中如下图所示的选项:
右侧选择:use MD5 …;use shadow…;use LDAP …和 Local auth…四项。
然后,点击Next:
本实例没有配置证书,因此不选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服务器了,如下图所示:
显示如上信息,说明账户可以登录,但没找到用户主目录。这需要在本地配置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、 客户端测试登录
对/etc/auto.nfs文件使用*及&通配符时,则/etc/auto.master里的挂载点必须与服务器的挂载点同名同目录/nfshome,否则客户端su - 切换时会提示找不到目录。
不建议把ldap用户直接创建在/home文件夹里。否则由于/etc/auto.nfs文件里的*及&符号的自动匹配的作用,客户autofs会自动在内存中创建/home目录,会隐藏掉实际的/home目录。