openldap+phpldapadmin

原创
2014/10/29 09:30
阅读数 5.8K

最近要搞用户集中管理,服务系统上需要建立一些实名账户,想来想去打算使用LDAP方案,先把台子搭起来再说

部署环境:redhat6.5

IP:192.168.1.203  openldap-server

      192.168.1.201  openldap-client(采用修改配置文件法配置)

      192.168.1.204  openldap-client(采用图形界面配置)

安装openldap服务端

1    安装相关软件

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

2    创建openldap的数据库配置文件

    openldap默认使用的是伯克利数据库作为后台数据存储介质,在openldap-servers包已经包含了,直接复制到相关目录即可

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/DB_CONFIG
3    复制openldap的配置文件模板到/etc/openldap/目录

cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
4    修改slapd.conf配置文件

#找到下面的内容
suffix          "dc=my-domain,dc=com"
rootdn          "cn=Manager,dc=my-domain,dc=com"
##替换成如下,dc选择你自己的域名
suffix          "dc=example,dc=com"
rootdn          "cn=Manager,dc=example,dc=com"
    设置管理员密码 

#找到下面两行
# rootpw                secret
# rootpw                {crypt}ijFYNcSNctBYg

#选择任意一行,去掉前面的注释,注意还有一个空格,第一行配置的是明文密码,第二行配置的是加密过的密码,我选择的是第一行明文的,实验
rootpw          123456
    给openldap添加日志功能, 添加如下内容
#/etc/openldap/slapd.conf
loglevel 296

#/etc/rsyslog.conf
local4.*   /var/log/ldap.log
    默认情况下,在/etc/openldap/slapd.d/目录下,有一些默认的配置文件,要删掉重新建立,这一步很重要

rm -rf /etc/openldap/slapd.d/*
chown ldap:ldap /var/lib/ldap/ 

/etc/init.d/slapd restart
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d
5   使用netstat -tupln查看服务是否正常启动


6   迁移用户数据到openldap数据库,最简单的方法是使用padl提供的迁移工具包,是一系列perl编写的脚本,之前的openldap包中已经包含了这些脚本,但是在redhat6.5中已经没有了,要单独下载 

wget 'http://www.padl.com/download/MigrationTools.tgz'
    修改migrate_common.ph 

tar zxvf MigrationTools.tgz
cd MigrationTools-47/
vim migrate_common.ph
#找到如下内容
$DEFAULT_BASE = "dc=padl,dc=com";
#按照你的域名修改成如下
$DEFAULT_BASE = "dc=example,dc=com";
    在目录MigrationTools-47里面使用migrate_base.pl脚本生成基本的数据结构 

./migrate_base.pl > /tmp/base.ldif
    将base.ldif文件的内容以ldap服务命令行的形式导入数据库,由于没有配置DNS,所以先要修改一下/etc/hosts

127.0.0.1   localhost localhost.example.com
192.168.1.203           Manager.example.com
    开始导入数据 

#-w 指定你在slapd.conf中设置的管理员密码,也可以使用-W,交互式输入密码
#-f 指定数据文件的路径
ldapadd -x -D "cn=Manager,dc=example,dc=com" -w 123456 -f /tmp/base.ldif

    查询已经导入数据库的数据 

ldapsearch -x -H ldap://192.168.1.203 -b "dc=example,dc=com"
 

    在目录下使用migrate_passwd.pl和migrate_group.pl脚本将文件/etc/passwd和/etc/group文件中的用户转化为ldap的数据结构

./migrate_passwd.pl /etc/passwd /tmp/passwd.ldif
./migrate_group.pl /etc/group /tmp/group.ldif
 

    使用ldapadd命令将转化的数据结构导入ladp中

ldapadd -x -D "cn=Manager,dc=example,dc=com" -w 123456 -f /tmp/passwd.ldif
ldapadd -x -D "cn=Manager,dc=example,dc=com" -w 123456 -f /tmp/group.ldif

7  但是我们在实际生产环境中并不会把/etc/passwd和/etc/group中的用户全部用ldap管理起来,我们只需要让实际用户被ldap管理即可,所以生产中按照如下规则操作

    删除ldap数据库中的所有数据

ldapdelete -x -D "cn=Manager,dc=example,dc=com" -w 123456 -r "dc=example,dc=com"
    建立两个测试用户test201和test204,把test201和test204导入ldap的数据库中
cd /opt/MigrationTools-47
grep test* /etc/passwd > /tmp/passwd
grep test* /etc/group > /tmp/group
./migrate_base.pl > /tmp/base.ldif
./migrate_passwd.pl /tmp/passwd > /tmp/passwd.ldif
./migrate_group.pl /tmp/group > /tmp/group.ldif
ldapadd -x -D "cn=Manager,dc=example,dc=com" -w 123456 -f /tmp/base.ldif 
ldapadd -x -D "cn=Manager,dc=example,dc=com" -w 123456 -f /tmp/passwd.ldif
ldapadd -x -D "cn=Manager,dc=example,dc=com" -w 123456 -f /tmp/group.ldif

    查看ldap中的用户数据,因为数据较多,只显示test*账户

ldapsearch -x -b "dc=example,dc=com" -LLL


192.168.1.201 openldap客户端配置(采用图形界面配置)

1   在192.168.1.201上安装openldap-client

yum install openldap-clients nss-pam-ldapd pam_ldap

2   修改/etc/openldap/ldap.conf

BASE dc=example,dc=com
URI ldap://192.168.1.203/

3   运行authconfig-tui命令,弹出图形界面

    1    选择相关认证

    2    输入相关信息

    3    点击ok,会看到重启了三个服务

4   修改/etc/sssd/sssd.conf配置文件,重启sssd服务

## /etc/sssd/sssd.conf [domian/default]
enumerate = True

ldap_id_use_start_tls = False
cache_credentials = True
ldap_search_base = dc=example,dc=com
krb5_realm = EXAMPLE.COM
krb5_server = kerberos.example.com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://192.168.1.203/
ldap_tls_cacertdir = /etc/openldap/cacerts
[sssd]
services = nss, pam
config_file_version = 2

domains = default
[nss]

[pam]

[sudo]

[autofs]

[ssh]

[pac]

5    在客户端上测试,是否能去读到ldap中user的信息

getent passwd|grep test

        可以看到图中除了test201和test204之外,还有其他test*账户,其他test*账户是本机上的

6    编辑系统文件,使使用ldap来认证

     1  /etc/pam.d/system-auth

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    pam_fprintd.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        sufficient    pam_ldap.so 
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     optional      pam_oddjob_mkhomedir.so skel=/etc/skel/ umask=0022
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
    2    修改/etc/nsswitch.conf文件
passwd:     files sss
shadow:     files sss
group:      files sss
修改为
passwd:     files ldap
shadow:     files ldap
group:      files ldap
7    重启nslcd 
service nslcd restart

8    现在可以使用ldap服务了,使用test201登陆192.168.1.201

    可以看到在第一次用ldap用户登陆客户端时会创建用户的家目录,等后面再次登陆时就不用创建家目录了

192.168.1.204 openldap客户端配置(采用修改配置文件法配置)

1    在192.168.1.204上安装openldap-client

yum install nss-pam-ldapd pam_ldap
yum install openldap-clients

2    修改/etc/nsswitch.conf,nsswitch文件用户名称转换服务,默认情况linux的用户认证使用本地文件认证

#找到下面三行
passwd:     files
shadow:     files
group:      files
#修改为
passwd:     files ldap
shadow:     files ldap
group:      files ldap
3    修改/etc/sysconfig/authconfig
#以下的no替换为yes
USESYSNETAUTH=yes
USESHADOW=yes
USELOCAUTHORIZE=yes
USELDAP=yes
USELDAPAUTH=yes
USEMKHOMEDIR=yes
4    修改/etc/pam.d/system-auth,身份验证是由pam模块对本地的/etc/passwd文件经过对比进行验证的,使用的pam_unix.so模块,为了使ldap认证生效,我们需要加入pam_ldap.so,同时为了给用户创建家目录还需要加入pam_mkhomedir.do模块
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    pam_fprintd.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        sufficient    pam_ldap.so 
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     optional      pam_oddjob_mkhomedir.so skel=/etc/skel/ umask=0022
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
5    修改/etc/openldap/ldap.conf文件,内容如下
URI ldap://192.168.1.203/
BASE dc=example;dc=com
6    修改/etc/pam_ldap.conf文件
base dc=example,dc=com

7    启动sssd服务,先修改sssd.conf

[domain/default]
enumerate=true
ldap_id_use_start_tls = False
cache_credentials = True
ldap_search_base = dc=example,dc=com
krb5_realm = EXAMPLE.COM
krb5_server = kerberos.example.com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://192.168.1.203/
ldap_tls_cacertdir = /etc/openldap/cacerts
[sssd]
services = nss, pam
config_file_version = 2

domains = default
[nss]

[pam]

[sudo]

[autofs]

[ssh]

[pac]

8    开启名称缓存服务nscd

/etc/init.d/nscd start

9    使用ldap服务,使用test204账户登陆192.168.1.204

    可以看到第一次登陆也是会自动创建家目录

安装phpldapadmin来管理LDAP

1    下载phpldapadmin

wget http://sourceforge.net/projects/phpldapadmin/files/phpldapadmin-php5/1.2.2/phpldapadmin-1.2.2.tgz/download
        不要用redhat自带的phpldapadmin,有BUG.... 

2    安装httpd+phpldapadmin

tar zxvf phpldapadmin-1.2.2.tgz
cd phpldapadmin-1.2.2/config/
mv config.php.example config.php
cd ../../
mv phpldapadmin-1.2.2 phpldapadmin
yum install httpd
mv phpldapadmin /var/www/html/

3    修改phpldapadmin的配置文件,以可以链接ldap服务器

        /var/www/html/phpldapadmin/config/config.php修改的内容如下:

$servers = new Datastore();
$servers->newServer('ldap_pla');
$servers->setValue('server','name','My LDAP Server');
$servers->setValue('server','host','192.168.1.203');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=example,dc=com'));
$servers->setValue('login','auth_type','session');
$servers->setValue('login','bind_id','cn=Manager,dc=example,dc=com');
$servers->setValue('login','bind_pass','123456');
$servers->setValue('server','tls',false);

4    启动httpd,登陆phpldapadmin

        1    在浏览器输入http://192.168.1.203/phpldapadmin/

        2    点击登陆按钮,输入管理员账号及密码

        3    登陆之后即可看到之前命令行创建的组及用户信息

        4    在新增test809用户之前,我们先新增一个test809用户组

        5    test809用户组创建完毕后,接着创建test809用户

    这里要注意一点,把密码的加密方式修改为crypt方式

        这里要把登陆shell修改为/bin/bash,因为在第一次设置时没有该选项,要手动修改。

        6    下面我们在192.168.1.201\192.168.1.204上看看能不能获取到ldap的用户信息

 

        7    开始使用test809用户登陆192.168.1.201\192.168.1.204

        8    有点杯具了,可以登陆192.168.1.201,但是在登陆192.168.1.204时却提示被拒绝,但是在201和204上都是可以获取到ldap的用户信息的,204应该是在认证方面设置还有点问题。经过重重排查之后,需要启动以下nslcd服务

/etc/init.d/nslcd restart

        终于大功告成



展开阅读全文
打赏
1
3 收藏
分享
加载中
更多评论
打赏
0 评论
3 收藏
1
分享
返回顶部
顶部