为什么80%的码农都做不了架构师?>>>
最近要搞用户集中管理,服务系统上需要建立一些实名账户,想来想去打算使用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
终于大功告成