|
RHEL6 下配置LDAP认证服务
(1) 安装LDAP相关软件
你现在准备安装软件; 这通常需要超级用户权限:
#yum list openldap*
#yum install -y openldap openldap-clients openldap-servers
(2) 配置LDAP的域信息
#cd /etc/openldap
#ls
你会看到以下几个文件。:
cacerts ldap.conf schema slapd.conf.bak slapd.d
编辑配置文件。首先你改名或移动openldap的配置文件目录lapd.d,不然它不会读/etc/openldap/slapd.conf
#mv slapd.d ~/slapd.d-bak //移动到/root下
#mv slapd.conf.bak slapd.conf
然后,修改配置文件slapd.conf
#vi slapd.conf
找到并修改如下内容:
suffix "dc=syd168.com" //设置主机名前缀
rootdn "cn=Manager,dc=syd168.com" //设置域
rootpw syd168
#slaptest -f slapd.conf //测试配置文件是否正确
config file testing succeeded
需要特别注意的是rootpw和syd168之间必须是2个tab健,否则在后面测试的时候会报错。
(3) 创建数据库文件(从模板复制产生)
#cd /var/lib/ldap
复制模板文件,不然重启的时候会报错valid(49)说是不合法的密码的错误。
#cp /usr/share/doc/openldap-servers-2.4.19/DB_CONFIG.example ./
#mv DB_CONFIG.example DB_CONFIG
#chown ldap.ldap DB_CONFIG
(4) 启动LDAP服务
#/etc/init.d/slapd start
或用如下命令:
#service slapd start
此时你在/var/lib/ldap执行ll命令会看到一些db文件。
#ll /var/lib/ldap
-rw-r--r--. 1 ldap ldap 2048 Feb 26 15:53 alock
-rw-------. 1 ldap ldap 24576 Feb 26 15:53 __db.001
-rw-------. 1 ldap ldap 17637376 Feb 26 15:53 __db.002
-rw-------. 1 ldap ldap 335552512 Feb 26 15:53 __db.003
-rw-------. 1 ldap ldap 2359296 Feb 26 15:53 __db.004
-rw-------. 1 ldap ldap 802816 Feb 26 15:53 __db.005
-rw-------. 1 ldap ldap 32768 Feb 26 15:53 __db.006
-rw-r--r--. 1 ldap ldap 921 Feb 26 15:51 DB_CONFIG
-rw-------. 1 ldap ldap 8192 Feb 26 15:53 dn2id.bdb
-rw-------. 1 ldap ldap 32768 Feb 26 15:53 id2entry.bdb
-rw-------. 1 ldap ldap 10485760 Feb 26 15:53 log.0000000001
(5) 检查搜索域
#ldapsearch -x -b "dc=syd168.com"
-b 指定用作搜索起始点的专有名称。使用引号来指定该值
-x 用于对搜索得到的信息进行排序。
# extended LDIF
#
# LDAPv3
# base <dc=syd168.com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 32 No such object
# numResponses: 1
可能出现如下错误,原因是忘记了-x参数:
ASL/GSSAPI authentication started
ldap_sasl_interactive_bind_s: Local error (-2)
additional info: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (Credentials cache file '/tmp/krb5cc_0' not found)
(6) 创建待认证的用户
#useradd ldapuser1
#echo "123456"|passwd --stdin ldapuser1
#useradd ldapuser2
#echo "123456"|passwd --stdin ldapuser2
#useradd ldapuser3
#echo "123456"|passwd --stdin ldapuser3
(7) 安装迁移工具migrationtools
#cd /usr/share/doc/openldap-servers-2.4.19/
#less README.migration
As from Fedora 9, MigrationTools are shipped as separate package.
Install "migrationtools" package to get them, e.g.: 帮助文档需要你安装migrationtools
#yum install migrationtools -y
安装成功之后会在/usr/share下出现migrationtools
#cd /usr/share/migrationtools
#ls
migrate_aliases.pl migrate_all_offline.sh migrate_hosts.pl migrate_protocols.pl
migrate_all_netinfo_offline.sh migrate_all_online.sh
migrate_netgroup_byhost.pl migrate_rpc.pl
migrate_all_netinfo_online.sh migrate_automount.pl
migrate_netgroup_byuser.pl migrate_services.pl
migrate_all_nis_offline.sh migrate_base.pl migrate_netgroup.pl migrate_slapd_conf.pl
migrate_all_nis_online.sh migrate_common.ph migrate_networks.pl
migrate_all_nisplus_offline.sh migrate_fstab.pl migrate_passwd.pl
migrate_all_nisplus_online.sh migrate_group.pl migrate_profile.pl
可以看到,有一组 Perl 脚本被安装到 /usr/share/openldap/migration/ 中执行迁移。这些 Perl 脚本的配置信息包含在 migrate_common.ph 文件的开头。对于我们来说,只需要修改命名前缀的变量来使用条目的识别名就足够了,如下所示:
#vi migrate_common.ph
修改如下一些内容:
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "syd168.com";
# Default base
$DEFAULT_BASE ="dc=syd168.com";
在进行这些修改之后,请运行脚本 migrate_base.pl,它会创建根项,并为 Hosts、Networks、Group 和 People 等创建低一级的组织单元。
(8) 创建认证账户文件
几个主要的概念:
dn:一条记录的位置
dc:一条记录所属区域
ou:一条记录所属组织
cn/uid:一条记录的名字/ID
创建基本的数据库文件:
#./migrate_base.pl > base.ldif
编辑修改刚才产生的文件:
#vim base.ldif
删除除下面之外的所有条目:
dn: dc=syd168.com
dc: syd168.com
objectClass: top
objectClass: domain
dn: ou=People,dc= syd168.com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc= syd168.com
ou: Group
objectClass: top
objectClass: organizationalUnit
创建用户数据库文件:
#./migrate_passwd.pl /etc/passwd ./user.ldif
编辑user.ldif
#vim user.ldif
删除除下面之外的所有条目:
dn: uid=ldapuser1,ou=People,dc= syd168.com
uid: ldapuser1
cn: ldapuser1
..........
homeDirectory: /home/ldapuser1
dn: uid=ldapuser2,ou=People,dc= syd168.com
uid: ldapuser2
cn: ldapuser2
............
homeDirectory: /home/ldapuser2
dn: uid=ldapuser3,ou=People,dc= syd168.com
uid: ldapuser3
cn: ldapuser3
............
homeDirectory: /home/ldapuser3
然后执行如下命令:
#ldapsearch -x -b "dc=syd168.com"
创建组账户文件:
#./migrate_group.pl /etc/group groups.ldif
编辑groups.ldif
#vim groups.ldif
删除除下面之外的所有条目(可以点v选择开始,移动光标选择,按x删除块):
dn: cn=ldapuser1,ou=Group,dc=syd168.com
objectClass: posixGroup
objectClass: top
cn: ldapuser1
userPassword: {crypt}x
gidNumber: 601
dn: cn=ldapuser2,ou=Group,dc= syd168.com
.............
gidNumber: 602
dn: cn=ldapuser3,ou=Group,dc= syd168.com
.........
gidNumber: 603
检查产生的三个文件
#cd /usr/share/migrationtools
#ll base.ldif groups.ldif user.ldif
-rw-r--r--. 1 root root 248 Feb 26 18:02 base.ldif
-rw-r--r--. 1 root root 402 Feb 26 18:16 groups.ldif
-rw-r--r--. 1 root root 1311 Feb 26 18:10 user.ldif
测试:
# ldapadd -D "cn=Manager,dc=syd168.com" -W -x -f base.ldif
出现错误:
ldap_bind: Invalid credentials (49)
就表示你要么给出了错误的"cn="条目,要么给出了错误的密码
Enter LDAP Password输入你刚才设置的密码),正确之后会显示:
adding new entry "dc=syd168.com"
adding new entry "ou=People,dc=syd168.com"
adding new entry "ou=Group,dc=syd168.com"
# ldapadd -D "cn=Manager,dc=syd168.com" -W -x -f user.ldif
Enter LDAP Password输入你刚才设置的密码),正确之后会显示:
adding new entry "uid=ldapuser1,ou=People,dc=syd168.com"
adding new entry "uid=ldapuser2,ou=People,dc=syd168.com"
adding new entry "uid=ldapuser3,ou=People,dc=syd168.com"
# ldapadd -D "cn=Manager,dc=syd168.com" -W -x -f groups.ldif
Enter LDAP Password输入你刚才设置的密码),正确之后会显示:
adding new entry "cn=ldapuser1,ou=Group,dc=syd168.com"
adding new entry "cn=ldapuser2,ou=Group,dc=syd168.com"
adding new entry "cn=ldapuser3,ou=Group,dc=syd168.com"
此时运行:
# ldapsearch -x -b "dc=syd168.com" //(查询命令)
输出如下内容:
===================================================
# extended LDIF
#
# LDAPv3
# base <dc=syd168.com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# syd168.com
dn: dc=syd168.com
dc: syd168.com
objectClass: top
objectClass: domain
# People, syd168.com
dn: ou=People,dc=syd168.com
ou: People
objectClass: top
objectClass: organizationalUnit
………………………………………………
# numResponses: 10
# numEntries: 9
===========================================================
(9) 用GUI界面查看LDAP用户
#cd /var/www/html
下载phpldapadmin-1.2.2.tgz //(版本不要下错啊!否则可能造成无法使用)
#tar zxf phpldapadmin-1.2.2.tgz
#cd phpldapadmin-1.2.2
#cd ../
#mv phpldapadmin-1.2.2 myldap
#cd myldap/config
#cp config.php.example config.php
还有记得要装php-ldadp包和php包:
#yum install php-ldap php -y
#/etc/init.d/httpd restart //如果httpd服务没安装,要先安装
#ifconfig|grep cas //查看本地IP地址
inet addr:172.16.0.6 Bcast:172.16.255.255 Mask:255.255.0.0
inet addr:10.8.22.19 Bcast:10.8.22.255 Mask:255.255.255.0
inet addr:192.168.100.1 Bcast:192.168.100.255 Mask:255.255.255.0
然后打开浏览器可以类似的用http://10.8.22.19/myldap访问LDAP。界面如下:
如果http服务启动,但无法显示页面,可能是防火墙的问题,执行如下命令:
#iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
#iptables -I INPUT -p tcp -m tcp --dport 389 -j ACCEPT //LDAP 端口
#service iptables save
#service iptables restart
登录的时候:DN框输入:cn=Manager,dc=syd168.com,密码框输入123456。
(10) 客户端配置
下面以RHEL6为例,介绍LDAP客户端的配置。
1) 打开LDAP配置界面
#setup
然后选择第一项,或者用如下命令,将会看到配置界面:
#authchonfig-tui
2) 配置选项
具体配置项目依照右侧的图像选择即可:
左侧选择:use LDAP
右侧选择:use MD5 …;use shadow…;use LDAP …和 Local auth…四项。
然后,点击NEXT后,在新出现的窗口中根据需要填写,具体如下:
在Server框中输入LDAP服务的地址:LDAP://服务器IP
在基本DN中输入dc=syd168.com //这里要和前面的配置一致。
如果要采用加密的认证方式,则要选择上方的TLS复选框,并且要将服务器端配置好的数字签名(如上右图提示)下载到/etc/openldap/cacerts目录下。在RHCE认证考试中,会提供证书下载链接的。
配置完成后,可以通过查看ldap客户端配置文件进行检查:
#etc/openldap/ldap.conf
再次检查/etc/resolv.conf的配置是否发生变化,如下形式:
这表示LDAP认证已经发挥作用。
3) 测试配置
执行如下命令测试是否可以从LDAP服务器活动账户信息:
#getent passwd |grep ldapuser //ldapuserX是前面配置好的账户
如果返回类似如下信息,说明正常!
如果没有返回信息,或返回错误,请检查配置,重新进行测试。
如果检查配置没有错误,可以做如下修改,重新进行测试。
将/etc/sssd/sssd.conf文件中的#enumerate=false,修改为:enumerate=true,这样修改完后,getent就会从LDAP查找账户信息。
并重新执行如下命令:
#service sssd restart
4) 尝试切换用户测试
#su - ldapuser1
显示如上信息,说明账户可以登录,但没找到用户主目录。这需要在本地配置或者通过nfs挂载路径。
(11) 实现基于NFS的LDAP用户主目录
1) 配置nfs服务器
在nfs服务器上输出/home目录,注意,输出的目录上必须有用户登录的目录!
#vi /etc/exports
输入如下内容并保存:
/home *(rw,sync) //根据需要,可能要修改*,限制访问的网络
查找SELinux中关于nfs的配置项目,找到关于nfs主目录的项目:
#getsebool -a |grep nfs
allow_ftpd_use_nfs --> off
allow_nfsd_anon_write --> off
git_system_use_nfs --> off
httpd_use_nfs --> off
nfs_export_all_ro --> on
nfs_export_all_rw --> on
qemu_use_nfs --> on
samba_share_nfs --> off
use_nfs_home_dirs --> on
#上行就是允许远程挂载用户主目录的选项,如果不是on则远程用户无权限进入自己的目录。
virt_use_nfs --> off
xen_use_nfs --> off
用如下的命令修改选项:
#setsebool -P use_nfs_home_dirs on //-P表示重新启动依然有效
设置完后,冲洗器的nfs服务器:
#service nfs restart
检查nfs输出:
#showmount -e
Export list for RHCE01:
/home *
配置防火墙,允许远程挂载:
#iptables -I INPUT -p tcp -m tcp --dport 2049 -j ACCEPT
#service iptables save //保存防火墙配置项
#service iptables restart //重新启动防火墙
可以在LDAP客户端用如下命令测试端口是否可连接:
#telnet nfs服务器IP 2049
如果出现如下内容,则表示端口可以连接,并按ctrl+]断开,并输入quit推出Telnet。
2) 配LDAP客户端
a) 确保已经安装了autofs服务
b) 配置autofs服务
#vi /etc/auto.master
最后加入如下行并保存:
/home auto.nfs //表示挂载到本地的位置和配置文件
#vi /etc/auto.nfs
输入如下内容并保存:
* -fstype=nfs,rw,sync 172.16.0.6:/home/&
说明,上面的*表示要挂载的某用户的目录,后面的&表示用户名。
c) 测试登录
用如下命令测试:
#su - ldapuser1
出现如下结果,即表示成功!注意,这时候,登录的ldapuser1帐号不在本地,而是在LDAP服务器上。 |
|