《Linux就该这么学》培训笔记_ch23_使用OpenLDAP部署目录服务

文章主要内容

了解目录服务

其实目录可以被理解成是一种查询、浏览或搜索的数据库,即目录数据库。

目录数据库主要用于存储较小的信息(如姓名、电话、主机名等),同时具有很好的读性能,但写性能差,不适合存放需要经常修改的数据。

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

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

LDAP采用树状结构存储数据,用于在IP网络层面实现对分布式目录的访问和管理操作,条目是LDAP协议中最基本的元素,通常对LDAP服务程序的添加、删除、更改、搜索都是以条目为基本对象的。

LDAP树状结构条目例子:

一些缩写的解释:

  • dn:每个条目的唯一标识符,如上图中linuxprobe的dn值是:cn=linuxprobe,ou=marketing,ou=people,dc=mydomain,dc=org
  • rdn:一般为dn值中最左侧的部分,如上图中linuxprobe的rdn值是:cn=linuxprobe
  • base DN:此为基准DN值,表示顶层的根部,上图中的base DN值是:dc=mydomain,dc=org

每个条目可以有多个属性,每个属性中会保存着对象名称与对应值,LDAP已经对常见的对象定义了属性,其中有:

属性名称 属性别名 语法 描述 值(举例)
commonName cn Directory String 名字 sean
surname sn Directory String 姓氏 Chow
organizationalUnitName ou Directory String 单位(部门)名称 IT_SECTION
organization o Directory String 组织(公司)名称 linuxprobe
telephoneNumber   Telephone Number 电话号码 911
objectClass     内置属性 organizationalPerson

目录服务实验

配置LDAP服务端(192.168.10.10)

1.安装openldap服务端相关的软件包。各安装包的作用:

  • openldap:openldap主程序
  • openldap-clients:openldap客户端程序
  • openldap-servers:openldap服务端程序
  • migrationtools:迁移工具(手工编写的配置文件,openldap是读不懂的,需要用迁移工具把自行编写的配置文件转换成openldap能读懂的格式)
yum install -y openldap openldap-clients openldap-servers migrationtools

2.设置LDAP服务器全局连接密码(记住生成的密码字符串,后面有用),写入一条主机与IP地址的解析记录。(此步骤客户端也要做。实际工作中,这本应该要配置DNS服务去解析,但此实验主要目的是检验配置openldap服务端的效果,因此怎么简单怎么来。)

slappasswd -s kamin -n > /etc/openldap/passwd           #生成明文密码kamin的密文密码
cat /etc/openldap/passwd #查看生成的文件内容(每重新执行一次命令,生成的值都是不同的)
echo "192.168.10.10 fuckwjm.kamin.com" >> /etc/hosts #往/etc/hosts文件追加一条主机与IP地址的解析记录

3.使用openssl工具生成X509格式的证书文件(公钥和私钥),并修改生成的证书的所属与权限。因为LDAP目录服务是以明文的方式在网络中传输数据的(包括密码),安全性很低,因此采用TLS加密机制提高安全性。

openssl req -new -x509 -nodes -out /etc/openldap/certs/cert.pem -keyout /etc/openldap/certs/priv.pem -days 365    #生成X509格式的证书文件,有效期365天。-out公钥,-keyout私钥,-days有效天数
...
Country Name ( 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) []: #输入服务器主机名,键入fuckwjm.kamin.com(要跟上面/etc/hosts新增的主机名一样),回车
Email Address []: #输入邮件地址回车
cd /etc/openldap/certs/ #进入生成密钥对的所在目录
chown ldap:ldap * #更改密钥对所在目录的文件的所有者和所属组为ldap(该用户在安装好openldap服务后自动生成)
chmod priv.pem #降低私钥的文件权限为仅root用户可读写
ls -al #查看密钥对所在目录所有文件的权限情况

4.生成LDAP数据库文件并启用slapd服务程序。先复制一份LDAP的数据库配置文件的模板,再生成LDAP数据库文件(可以忽略报错信息),并修改LDAP数据库的所有者和所有组,最后启动slapd服务并加入开机启动项。

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG    #复制一份LDAP的数据库配置文件的模板
slaptest #生成LDAP数据库文件(可以忽略报错信息)
chown ldap:ldap /var/lib/ldap/* #修改LDAP数据库的所有者和所有组
systemctl restart slapd #启动slapd服务并加入开机启动项
systemctl enable slapd

5.在日志记录服务的配置文件中追加设置LDAP日志文件的配置,以保存LDAP日志信息,并重启日志服务。

vim /etc/rsyslog.conf         #编辑日志记录服务的配置文件
...
local4.* /var/log/ldap.log #追加设置LDAP日志文件的配置
...
systemctl restart rsyslog #重启日志服务

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

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

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

6.配置LDAP本地服务器域。

6.1.添加cosine和nis模块,配置基础用户认证结构。

cd /etc/openldap/schema/                                          #该目录有很多ldif结尾的模版文件
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f cosine.ldif #添加cosine模块
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f nis.ldif #添加nis模块

6.2.配置LDAP的顶级域(base DN)。创建/etc/openldap/changes.ldif文件,按一定格式输入配置信息,并将其更新到slapd服务程序。

vim /etc/openldap/changes.ldif
dn: olcDatabase={}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=kamin,dc=com(主机名为fuckwjm.kamin.com,则域为kamin.com) dn: olcDatabase={}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=kamin,dc=com dn: olcDatabase={}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: 此处输入之前生成的密码({SSHA}3SUlqsjHGbPjFiviFKuGanqZhMSExOs7 dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/cert.pem dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/priv.pem dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: - dn: olcDatabase={}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=linuxprobe,dc=com" read by * none
ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/changes.ldif #将changes.ldif配置文件更新到slapd服务程序

6.3.配置LDAP的组织单位(OU)。创建/etc/openldap/base.ldif文件,按一定格式输入配置信息,并导入该文件,按该文件的配置来创建目录的结构服务。

vim /etc/openldap/base.ldif    #编辑/etc/openldap/base.ldif文件
dn: dc=kamin,dc=com
dc: kamin
objectClass: top
objectClass: domain dn: ou=People,dc=kamin,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit dn: ou=Group,dc=kamin,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
ldapadd -x -w kamin -D cn=Manager,dc=kamin,dc=com -f /etc/openldap/base.ldif #导入base.ldif文件,根据该文件的配置创建目录的结构服务

7.创建若干个测试用户,设置用户的迁移,把用于测试的用户以及对应的用户组信息迁移至目录服务。

用户和用户组信息分别存放在/etc/passwd和/etc/group文件中,创建好测试用户后,可以读取这两个文件把测试用户的信息抽出来保存。通过migrationtools迁移工具将其转换为LDAP能读懂的格式,再将转换好的ldif文件导入ldap。

useradd test1    #创建测试用户(创建用户后相关信息会默认生成与用户名同名的用户组,)
useradd test2
vim /usr/share/migrationtools/migrate_common.ph #配置用户的迁移
...
$DEFAULT_MAIL_DOMAIN = "kamin.com";
...
$DEFAULT_BASE = "dc=kamin,dc=com";
...
cd /usr/share/migrationtools/ #进入migrationtools迁移工具的目录
grep ":10[0-9][0-9]" /etc/passwd > passwd #抽取出测试用户的信息另存为passwd文件
./migrate_passwd.pl passwd users.ldif #通过migrationtools迁移工具将passwd文件转换为LDAP能读懂的ldif格式
ldapadd -x -w kamin -D cn=Manager,dc=kamin,dc=com -f users.ldif #把转换好格式的users.ldif文件导入到openldap数据库中
grep ":10[0-9][0-9]" /etc/group > group #抽取出测试用户对应用户组的信息另存为group文件
./migrate_group.pl group groups.ldif #通过迁移工具将group文件转换成LDAP能读懂的ldif格式
ldapadd -x -w kamin -D cn=Manager,dc=kamin,dc=com -f groups.ldif #把转换好格式的groups.ldif文件导入到openldap数据库中
ldapsearch -x cn=test1 -b dc=kamin,dc=com #检索测试用户test1,查看openldap中用户test1的配置信息

8.安装httpd服务程序,将第3步生成的公钥文件复制到网站目录,供客户端下载。(这一步主要是要让服务端为客户端提供下载公钥文件的途径。)

yum install -y httpd
cp /etc/openldap/certs/cert.pem /var/www/html #将公钥文件上传至网站目录
systemctl restart httpd #重启httpd服务并加入开机启动项
systemctl enable httpd
iptables -F #清空防火墙规则并保存状态
service iptables save

9.配置NFS服务,共享openldap用户的家目录。(如果不做这一步,则在客户端切换登录到openldap用户时,会提示没有该用户的家目录。另外,该步骤可以采用很多方式,samba、autofs都可以。)

vim /etc/exports
/home/test1 *(rw,sync,root_squash) #共享/home/test1目录,*代表任何主机都可以使用本机NFS共享的/home目录
/home/test2 *(rw,sync,root_squash) #
systemctl restart rpcbind #先重启rpcbind服务程序并加入启动项,通过RPC把FNS服务器的ip地址和端口号等信息发送给客户端
systemctl enable rpcbind
systemctl restart nfs-server #再重启nfs服务并加入开机启动项
systemctl enable nfs-server

至此,openldap服务端配置完毕。

配置LDAP客户端(192.168.10.20)

1.把服务端的NFS服务共享的openldap用户家目录挂载到客户端上。 虽然可以直接在客户机的/etc/fstab文件中直接追加服务端的nfs共享目录挂载信息,但是假如有100个openldap用户,则要挂载很多个用户家目录(经验证,是不能以/home/*这样的格式去企图批量挂载的)。考虑这一点,建议在客户端安装并配置autofs自动挂载服务。该服务可以灵活配置参数,而不需要往/etc/fstab文件追加多条挂载信息这么麻烦。

注意:因为服务端中用ldapsearch命令检索并查看测试用户信息时,家目录为/home/*(*泛指测试用户名),所以在客户端的挂载目录也必须是在/home/*下(像/home/ldap/*,中间又新建了一个ldap目录都不行)!。

yum install -y autofs    #安装autofs服务程序
vim /etc/auto.master #编辑autofs主配置文件
...
/home /etc/ldap.misc #指定设备挂载位置的上一级目录和对应的子配置文件
...
vim /etc/ldap.misc
* -fstype=nfs,rw,vers= fuckwjm.kamin.com:/home/& #主机名也可用ip地址代替,当访问本机/home/*的资源时,自动挂载上服务端NFS共享的/home/&(&代表任意名称的目录)
systemctl restart autofs #重启autofs服务并加入开机启动项
systemctl enable autofs
cd /home/test2 #尝试访问本不存在的/home/test2,提示Permission denied(共享目录的权限为700),但说明autofs服务已配置成功。

2.写入LDAP服务端主机名与IP地址的解析记录,并安装openldap客户端相关软件包。各安装包作用:

echo "192.168.10.10 fuckwjm.kamin.com" >> /etc/hosts                     #往/etc/hosts追加LDAP服务端的解析记录
yum install -y openldap-clients nss-pam-ldapd authconfig-gtk pam_krb5 #安装openldap客户端相关软件包

3.运行界面化的系统认证工具,填好相应的LDAP服务信息。

运行系统认证工具的方法:

  • 命令方式进入:执行authconfing-gtk或者system-config-authentication都可以
  • 桌面方式进入:(RHEL7系统桌面)左上角Application -> Sundry -> Authentication
authconfig-gtk    #运行系统认证工具

3.1.输入openldap的顶级域和openldap服务器地址,勾选上“Use TLS to encrypte connections”表示采用TLS验证openldap连接。

3.2.点击 Download CA Certificate... ,输入公钥的下载地址(服务端配置了httpd服务):http://fuckwjm.kamin.com/cert.pem

配置好后,稍作等待,在切换一下openldap的用户,就能正常登陆使用,且不会因找不到家目录以及无权创建家目录而报错了。

《Linux就该这么学》培训笔记_ch23_使用OpenLDAP部署目录服务的更多相关文章

  1. 《Linux就该这么学》培训笔记_ch16_使用Squid部署代理缓存服务

    <Linux就该这么学>培训笔记_ch16_使用Squid部署代理缓存服务 文章最后会post上书本的笔记照片. 文章主要内容: 代理缓存服务 配置Squid服务程序 正向代理 标准正向代 ...

  2. LInux 就该这么学 笔记分享

    看了Linux就该这么学的前部分书,觉得写的还可以,就在网上找了下面这个同学写的笔记,觉得很详细,所以保存地址,供以后查阅参看.这里对作者表示感谢!!! 博客地址: https://www.cnblo ...

  3. Linux就该这么学笔记

    https://www.linuxprobe.com/========================================================================= ...

  4. 《Linux就该这么学》第二期视频

    Linux就该这么学--第二期学习笔记... ------------- 你的未来取决于你现在点点滴滴的努力 需要用到的一些工具: Vm11激活码 ---------- root在Linux系统中相当 ...

  5. 《Linux就该这么学》第十六天课程

    今天笔记有点少就不发了,分享一下第23章 使用OpenLDAP部署目录服务很实用 下面是DHCP动态管理地址,如需深入学习请前往 https://www.linuxprobe.com/chapter- ...

  6. 《Linux就该这么学》培训笔记_ch02_一些必须掌握的Linux命令

    本文在原来作者的基础上做一些符合自己的修改.原文参考: <Linux就该这么学>培训笔记_ch02_一些必须掌握的Linux命令.     本章的内容虽然多,基本都是书本原话,但是笔记能精 ...

  7. 《Linux就该这么学》培训笔记_ch00_认识Linux系统和红帽认证

    <Linux就该这么学>培训笔记_ch00_认识Linux系统和红帽认证 文章最后会post上书本的笔记照片. 文章主要内容: 认识开源 Linux系统的种类及优势特性 认识红帽系统及红帽 ...

  8. 《Linux就该这么学》培训笔记_ch01_部署虚拟环境安装Linux系统

    <Linux就该这么学>培训笔记_ch01_部署虚拟环境安装Linux系统 文章最后会post上书本的笔记照片. 文章主要内容: 在虚拟机中安装红帽RHEL7系统 在Linux系统中找回r ...

  9. 《Linux就该这么学》培训笔记_ch03_管道符、重定向与环境变量

    <Linux就该这么学>培训笔记_ch03_管道符.重定向与环境变量 文章最后会post上书本的笔记照片. 文章主要内容: 输入输出重定向 管道命令符 命令行的通配符 常用的转义字符 重要 ...

随机推荐

  1. Java虚拟机内存区域详解

    JVM 运行时的数据区域 首先获取一个直观的认识: 总共也就这么 5 个区(直接内存不属于 JVM 运行时数据区的一部分),除了程序计数器其他的地方都有可能出现 OOM (OutOfMemoryErr ...

  2. JavaScript之二十三种设计模式

    23种JavaScript设计模式   原文链接:https://boostlog.io/@sonuton/23-javascript-design-patterns-5adb006847018500 ...

  3. this(this的4种指向和改变this指向的方式)

    this是Javascript语言的一个关键字. 随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是,调用函数的那个对象. 1.this指向的形式4种 a.如果是 ...

  4. 个人项目-wc

    个人项目-WC   (C语言) 一.Github地址:https://github.com/Lin-J-F/WC 二.PSP表格 PSP2.1 Personal Software Process St ...

  5. logger(二)logback简介及其实现原理

    一.logback简介 logback是log4j创始人写的,性能比log4j要好,目前主要分为3个模块 logback-core:核心代码模块 logback-classic:log4j的一个改良版 ...

  6. django framework插件类视图分页

    分页 继承APIView类的视图中添加分页 from rest_framework.pagination import PageNumberPagination class MyPageNumberP ...

  7. 【IDE_IntelliJ IDEA】在Intellij IDEA中使用Debug

    转载博客:在Intellij IDEA中使用Debug

  8. HTTP中分块编码(Transfer-Encoding: chunked)

    转自: 妙音天女--分块传输编码~ 参考链接: HTTP MDN--HTTP协议 一.背景: 持续连接的问题:对于非持续连接,浏览器可以通过连接是否关闭来界定请求或响应实体的边界:而对于持续连接,这种 ...

  9. matplotlib 绘制正余弦曲线图

    1.普通风格 代码 import numpy as npimport matplotlib.pyplot as plt x = np.linspace(0, 2*np.pi, 50)y1 = np.s ...

  10. django 导出xls文件

    1.同目录下创建file_handle.py文件 file_handle.py import xlwt, datetime from xlwt import * import xlsxwriter # ...