最近要搞用户集中管理,服务系统上需要建立一些实名账户,想来想去打算使用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_CONFIG3 复制openldap的配置文件模板到/etc/openldap/目录
cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf4 修改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.d5 使用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.so2 修改/etc/nsswitch.conf文件
passwd: files sss shadow: files sss group: files sss 修改为 passwd: files ldap shadow: files ldap group: files ldap7 重启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 ldap3 修改/etc/sysconfig/authconfig
#以下的no替换为yes USESYSNETAUTH=yes USESHADOW=yes USELOCAUTHORIZE=yes USELDAP=yes USELDAPAUTH=yes USEMKHOMEDIR=yes4 修改/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.so5 修改/etc/openldap/ldap.conf文件,内容如下
URI ldap://192.168.1.203/ BASE dc=example;dc=com6 修改/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
终于大功告成