openldap

openldap

  • A+
所属分类:系统运维

章节概述:

本章节将理解目录服务的概念,学习OpenLdap服务程序与TLS加密协议的部署方法,并自动挂载用户目录。

通过部署目录服务实现对系统帐户的集中式管理,相比于X.500协议具有更快的查询速度、更少的消耗资源等优势。

23.1 了解目录服务

回忆前面所学的章节,我们发现其实目录可以被理解成是一种为查询、浏览或搜索的数据库,但数据库又分为了目录数据库和关系数据库,目录数据库主要用于存储较小的信息(如姓名、电话、主机名等),同时具有很好的读性能,但在写性能方面比较差,所以不适合存放那些需要经常修改的数据。

目录服务则是由目录数据库和一套能够访问和处理数据库信息的协议组成的服务协议,用于集中的管理主机帐号密码,员工名字等数据,大大的提升了管理工作效率。轻量级目录访问协议LDAP(Lightweight Directory Access Protocol)是在目录访问协议X.500的基础上研发的,主要的优势是:

X.500目录协议功能非常臃肿,消耗大量资源,无法做到快速查询且不支持TCP/IP协议网络。

LDAP采用树状结构存储数据(类似于前面学习的DNS服务程序),用于在IP网络层面实现对分布式目录的访问和管理操作,条目是LDAP协议中最基本的元素,可以想象成字典中的单词或者数据库中的记录,通常对LDAP服务程序的添加、删除、更改、搜索都是以条目为基本对象的。
openldap

LDAP树状结构存储数据

dn:每个条目的唯一标识符,如上图中drscrewdriver的dn值是:

rdn:一般为dn值中最左侧的部分,如上图中drscrewdriver的rdn值是:

base DN:此为基准DN值,表示顶层的根部,上图中的base DN值是:

而每个条目可以有多个属性(如姓名、地址、电话等),每个属性中会保存着对象名称与对应值,LDAP已经为运维人员对常见的对象定义了属性,其中有:

属性名称属性别名语法描述值(举例)
commonNamecnDirectory String名字sean
surnamesnDirectory String姓氏Chow
organizationalUnitNameouDirectory String单位(部门)名称IT_SECTION
organizationoDirectory String组织(公司)名称drscrewdriver
telephoneNumberTelephone Number电话号码911
objectClass内置属性organizationalPerson

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

23.2 目录服务实验

OpenLdap是基于LDAP协议的开源程序,它的程序名称叫做slapd,本次实验需要用到两台主机:

主机名称操作系统IP地址
LDAP服务端
(instructor.drscrewdriver.com)
红帽RHEL7操作系统192.168.10.10
LDAP客户端红帽RHEL7操作系统192.168.10.20
23.2.1 配置LDAP服务端

安装openldap与相关的软件包:

生成密钥文件(记下生成出的值,后面要用):

写入一条主机与IP地址的解析记录:

因为LDAP目录服务是以明文的方式在网络中传输数据的(包括密码),这样真的很不安全,所以我们采用TLS加密机制来解决这个问题,使用openssl工具生成X509格式的证书文件(有效期为365天):

[root@drscrewdriver ~]# openssl req -new -x509 -nodes -out /etc/openldap/certs/cert.pem -keyout /etc/openldap/certs/priv.pem -days 365
Generating a 2048 bit RSA private key
..........................................+++
..............................................................+++
writing new private key to '/etc/openldap/certs/priv.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:敲击回车
State or Province Name (full name) []:敲击回车
Locality Name (eg, city) [Default City]:敲击回车
Organization Name (eg, company) [Default Company Ltd]:敲击回车
Organizational Unit Name (eg, section) []:敲击回车
Common Name (eg, your name or your server hostname) []:instructor.drscrewdriver.com
Email Address []:敲击回车

修改证书的所属与权限:

复制一份LDAP的配置模板:

生成数据库文件(不用担心报错信息):

修改LDAP数据库的所属主与组:

启动slapd服务程序并设置为开机启动:

[root@drscrewdriver ~]# systemctl restart slapd
[root@drscrewdriver ~]# systemctl enable slapd
ln -s '/usr/lib/systemd/system/slapd.service' '/etc/systemd/system/multi-user.target.wants/slapd.service'

在LDAP目录服务中使用LDIF(LDAP Interchange Format)格式来保存信息,而LDIF是一种标准的文本文件且可以随意的导入导出,所以我们需要有一种“格式”标准化LDIF文件的写法,这中格式叫做“schema”,schema用于指定一个目录中所包含对象的类型,以及每一个类型中的可选属性,我们可以将schema理解为面向对象程序设计中的“类”,通过“类”定义出具体的对象,因此其实LDIF数据条目则都是通过schema数据模型创建出来的具体对象:

ldapadd命令用于将LDIF文件导入到目录服务数据库中,格式为:“ldapadd [参数] LDIF文件”。

参数作用
-x进行简单认证。
-D用于绑定服务器的dn。
-h:目录服务的地址。
-w:绑定dn的密码。
-f:使用LDIF文件进行条目添加的文件。

添加cosine和nis模块:

创建/etc/openldap/changes.ldif文件,并将下面的信息复制进去(注意有一处要修改的地方):

将新的配置文件更新到slapd服务程序:

创建/etc/openldap/base.ldif文件,并将下面的信息复制进去:

创建目录的结构服务:

[root@drscrewdriver ~]# ldapadd -x -w drscrewdriver -D cn=Manager,dc=drscrewdriver,dc=com -f /etc/openldap/base.ldif
adding new entry "dc=drscrewdriver,dc=com"
adding new entry "ou=People,dc=drscrewdriver,dc=com"
adding new entry "ou=Group,dc=drscrewdriver,dc=com"

创建测试用的用户:

设置帐户的迁移(修改第71与74行):

将当前系统中的用户迁移至目录服务:

[root@drscrewdriver ~]# cd /usr/share/migrationtools/
[root@drscrewdriver migrationtools]# grep ":10[0-9][0-9]" /etc/passwd > passwd
[root@drscrewdriver migrationtools]# ./migrate_passwd.pl passwd users.ldif
[root@drscrewdriver migrationtools]# ldapadd -x -w drscrewdriver -D cn=Manager,dc=drscrewdriver,dc=com -f users.ldif
adding new entry "uid=drscrewdriver,ou=People,dc=drscrewdriver,dc=com"
adding new entry "uid=ldapuser,ou=People,dc=drscrewdriver,dc=com"

将当前系统中的用户组迁移至目录服务:

[root@drscrewdriver migrationtools]# grep ":10[0-9][0-9]" /etc/group > group
[root@drscrewdriver migrationtools]# ./migrate_group.pl group groups.ldif
[root@drscrewdriver migrationtools]# ldapadd -x -w drscrewdriver -D cn=Manager,dc=drscrewdriver,dc=com -f groups.ldif
adding new entry "cn=drscrewdriver,ou=Group,dc=drscrewdriver,dc=com"
adding new entry "cn=ldapuser,ou=Group,dc=drscrewdriver,dc=com"

测试drscrewdriver用户的配置文件:

安装httpd服务程序:

将密钥文件上传至网站目录:

将httpd服务程序重启,并添加到开机启动项:

[root@drscrewdriver ~]# systemctl restart httpd
[root@drscrewdriver ~]# systemctl enable httpd
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'

清空防火墙的规则并保存状态:

在日志记录服务的配置文件中追加下面语句,并重启日志服务:

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

23.2.2 配置LDAP客户端

将LDAP服务端主机名与IP地址的解析记录写入:

安装相关的软件包:

运行系统认证工具,并填写LDAP服务信息:

openldap

填写证书地址:
openldap

稍等片刻后,验证本地是否已经有了ldapuser用户:

此时说明已经可以通过LDAP服务端验证了,并且ldapuser用户的帐号信息也不会保存在您本地的/etc/passwd文件中~

23.3 自动挂载用户目录

虽然在客户端已经能够使用LDAP验证帐户了,但是当切换到ldapuser用户时会提示没有该用户的家目录:

原因是本机并没有该用户的家目录,我们需要配置NFS服务将用户的家目录自动挂载过来:

在LDAP服务端添加共享信息(NFS服务程序已经默认安装,我们之前学过还记得吗?):

重启nfs-server服务程序:

在LDAP客户端查看共享信息:

将共享目录挂载到本地:

再次尝试切换到ldapuser用户,这样非常顺利:

设置为开机自动挂载:

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

本章节的复习作业(答案就在问题的下一行哦,用鼠标选中即可看到的~)

1:LDAP目录服务的特点是?

答案:消耗资源少,适合存储较小的信息、具有很好的读性能以及支持TCP/IP协议网络。

2:目录服务的唯一标识符dn的作用是?

答案:用于定义某个条目或属性的唯一性。

3:为什么需要启用TLS加密?

答案:因为openldap服务程序默认使用明文传送数据(包括密码)。

4:ldapadd命令的作用是?

答案:ldapadd命令用于将LDIF文件导入到目录服务数据库中。

5:部署目录服务后配置nfs服务的作用是?
5:部署目录服务后配置nfs服务的作用是?

weinxin
我的微信公众号
我的微信公众号扫一扫

发表评论

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen: