服务器架设篇 - RockyLinux 9

第十一章、使用 LDAP 统一管理帐号

企业当中电脑的帐号应该都是相同的,这时,通过统一管理的身份验证服务器来管理,应该是个比较合理的作法!

最近更新时间: 2024/07/04

如果在企业的环境中有多部系统,每部系统里面的用户都相同,那么是否每部系统都需要创建这批帐号呢? 如果是每部系统独立创建这些帐号,未来需要添加、移除、修改帐号的任务时,可能会造成许多的困扰。因此,统一将帐号密码放置在一部系统上, 就会是比较正统的作法!过去 Linux 常见的帐号密码管理机制,大概使用 NIS,不过近来为了跨平台管理,大多使用 LDAP 机制管理!达成 LDAP 机制的软件非常多,我们在这个章节中,主要介绍 FreeIPA 这套软件喔!

11.1、LDAP 简介

在企业内部,每个员工应该有专属的帐号与密码,包括用于公司内部的 email 地址、登录工作站的身份验证等等。这些帐号密码的管理机制, 大多使用轻量级目录服务 (Lightweight Directory Access Protocol, LDAP),这个 LDAP 协定的主要功能在『目录服务 (directory service)』。 底下我们先来谈谈什么是 LDAP,尤其是很重要的 LDIF 文档内容~还有关于领域 (domain) 的设置等等,之后实际设置 LDAP 的服务器软件时, 大家才能比较清楚的了解,那个是什么东西~

11.1.1、身份识别与文件系统间的关系

以电脑教室为例,如果让每个学生全部都以同一个帐号登录 (例如很多学校都会用 student 当登录帐号), 那么学生在座位上面的调整就会比较没有弹性,因为他们得要将自己的作业数据放置到该电脑的本地端目录,或者是学生自己的 USB 磁盘机。 那,如果课程是有延续性质的,学生就得要坐到前一次上课的座位,否则就无法取得上次操作的环境与文件。 因此,许多电脑教室或办公室,可能都会提供一个文件服务器来给学生或员工挂载使用,例如底下的图标,就是以 NFS 服务来提供文件系统的范例:

图 11.1.1、用一台文件服务器,统一提供企业内部所有系统的应用
图 11.1.1、用一台文件服务器,统一提供企业内部所有系统的应用

不过文件系统也是需要验证的,否则所有人都可以读取任何人的文件数据,那就天下大乱了!因此就需要有身份验证系统才行。 所以,我们也才能够通过身份验证系统登录每一部主机,这样在出问题时,也比较好查找到到底是那一位学生或员工恶意使用所造成的问题, 比较好厘清责任归属啰。

总结说明身份识别与文件系统间的关系就是:在一组或一间服务器机房内,所有的服务器均需要使用同一组帐号与密码来登录, 并取得相同家目录时,就需要这样的设备需求。此种状况常见的环境有:

  • 在大型数值模式仿真中,经常需要跨不同的运算节点 (computing node) 来操作,以让一个仿真的工作,可以通过多台高性能的系统共同运作, 以期待快速达成模式运算的结果。因为每台 node 都需要读取相同的文件系统 (连文件名都要相同),且操作的进程 (process) 也需要相同的帐号 (连同 UID/GID 最好都相同),因此,在这些运算节点中,每部系统的帐号以及文件系统,就都得要同步才行。
  • 在昆山资传系操作电脑教室的电脑时,所有的电脑均可以使用你的学号登录,并且可以取得你的个人桌面与额外的三个文件系统 (是文件系统,不是文件而已喔!)。因此在资传系上课时,你可以在五间电脑教室的任何一间,使用相同的帐密登录,并可取得前一次上课的桌面与工作家目录。 所以如果对当前的座位不满意,可以立刻换座位,也不会影响到你的正常操作。

再次强调该功能就得要有两个组件:

  • 使用身份识别功能:就是 ID 认证的服务。常见的服务有: NIS, LDAP, AD(windows), Kerboros...
  • 用户家目录的取得:就是个人文件数据。常见的服务有: NFS, SMB(网芳), AD(windows)...

以纯粹 linux 的服务器环境来说,最容易设置的其实是 NIS 与 NFS 两者的搭配,不过 NIS 对于 windows 的支持较差,所以如果考量到未来的系统规划, 建议是可以使用跨平台的 LDAP 来取代 NIS 作为身份识别系统较佳。至于文件系统方面,虽然 SAMBA 才是缺省可以提供跨平台的文件系统, 不过在运作的性能方面,还是以 NFS 较为强大,因此作为纯 Linux Server 的环境来说,当然首选还是使用 NFS 的。 在这个章节中,我们主要介绍 LDAP 协定的应用,其他文件系统数据,将于后续章节介绍啰!

11.1.2、LDAP 节点与数据的组成

如前所述,LDAP 全名: Lightweight Directory Access Protocol,主要的功能在于『目录服务 (directory service)』的提供!什么是『目录服务』呢? 从 wiki 上的说明来看,目录服务指的是:

目录服务是一个保存、组织和提供信息访问服务的软件系统,在软件工程中,一个目录是指一组名字和值的映射。 它允许根据一个给出的名字来寻找对应的值,与词典相似。 像词典中每一个词也许会有多个词义,在一个目录中,一个名字也许会与多个不同的信息相关联。 类似地,就像一个词会有多个不同的发音和多个不同的词义,目录中的一个名字可能会有多个不同类型的值。

目录也许只提供范围非常小的节点类型和数值类型,也可能对任意的或可延伸的一组类型提供支持。在一个电话目录中,节点就是姓名而数值项就是电话号码。 在DNS中,节点是域名而数值项是IP地址(还有别名,邮件服务器名等等)。 在一个网络操作系统的目录中,节点是那些由操作系统所管理的资源,包括用户、电脑、打印机和其它共享资源。

简单的说,就是你可以提供一个查找的数据对应的内容,举例来说,你可以提供一个『帐号名称』, 而在这个帐号名称底下给予对应了密码、UID、GID、真实姓名等信息,若用户端使用帐号名称来查找目录服务,则可以得到该帐号的密码、 UID等等信息就是了。而且目录服务还不只提供这些数据,你想要额外增加什么节点都可以!所以用途相当广泛。

  • LDAP 的组成

基本上,你就将 LDAP 想成是一个目录,而每个目录都有个目录名称,然后根据不同需求,可以给予更多的目录节点。 至于目录的内容,则根据目录的定义来给予乡对应的内容就是了。至于目录的节点还是需要根据不同的层级给予不同的设置才行。 单纯以节点的角度来看,以一个公司名称为『 example.com 』的位置来说,该公司的相关部门位置节点有点像这样:

图 11.1.2-1、LDAP 组成示意图(http://dbaontap.com/2016/07/20/oem-13c-ldap-authentication/)
图 11.1.2-1、LDAP 组成示意图(http://dbaontap.com/2016/07/20/oem-13c-ldap-authentication/)

如上所示,公司底下有两个部门 (organization unit),一个是服务器部门 (Servers) 一个是人资部门 (People) , 其中人资部门底下管理着员工证号 (Person, udid),大概就是这样一层一层的分配下来~而每一个节点底下可以搭配不同的数据给予特别的任务就是了。 而如果是不同部门的相似架构呢?则可以用底下图标来说明:

图 11.1.2-2、各部门分不同群组的设计方式(http://dbaontap.com/2016/07/20/oem-13c-ldap-authentication/)
图 11.1.2-2、各部门分不同群组的设计方式(http://dbaontap.com/2016/07/20/oem-13c-ldap-authentication/)

在公司 (company.com) 内部的两大部门 (location1, location2) 个别提供了各自的帐号密码管理机制之类的,可以再细分下去之意。 因此,只要找寻不同的 location 即可取得各自部门的人信息息。

在比较学理的组成说明如下:

  1. 可以提供非关联性的数据库环境,而每一笔数据则通过判别名称 (distinguished name, DN) 来提示定义。 例如上图的 Organization unit 可以分别是两者无关的部门 (People 与 Servers 明显就是不同且无关的部门定义)
  2. 每一个组织均需要定义最顶层的判别名称,就被称为 baseDN,这也是整个 LDAP 系统最先要设置的项目。 例如上图的『 dc=exmpale,dc=com 』以及底下的『 dc=company,dc=com 』都是所谓的 baseDN !你可以猜测在组织 (Organization) 那一层的名称, 就是 baseDN 的意思了。
  3. 每一笔查找数据称为 DN (Distinguished Name),而 DN 就是调用出目录节点的位置所在。 例如上面提到的 baseDN 就是一例。他的展现方式就是『 dc=exmaple,dc=com 』,从小范围写起直到最顶层 (dc=com) 为止。 事实上,DN 的展示方式其实有点像 DNS,不过需要使用 dc, ou, cn 等来进行名称的指定。dc (domain component) 一般用在公司或最顶层 DN 的设置, ou (organization unit) 一般用在大部门的设置上, cn (common name) 一般用在非上述两个用途的其他应用上。
  4. 每个 baseDN 底下还有附属组织单位,那就是 organization unit 的概念。例如人事部门可以使用类似: 『 dn: ou=People,dc=example,dc=com 』之类的方式来命名。而该 DN 底下就会有多种属性定义!这些属性定义就牵涉到每一个 LDAP 的用途为何。
  5. 因为 LDAP 仅是一个『目录服务』的提供者,但这些目录底下数据的定义使用的功能为何,就是通过预先定义的纲要档 (Schema) 来定义。 举例来说, Linux 与 Windows 的帐号所需要的项目并不相同,因此使用 LDAP 作为 Linux 的帐号认证来源时,就得要使用 LDAP 提供的 Linux 帐号所需纲要档 (schema)

如果是比较简单理解的方式来说的话,你有没有发现,上面的图标非常非常像是目录树系统 (directory tree)!哈哈!没错, 你就将 LDAP 的组成结果想成是目录树,而最顶天的节点就是根目录,接下来的每个节点就是各自的子目录。那跟关联性数据库 (SQL) 有啥不同呢? 你就这样想,每个节点 (目录) 里面的内容,都可以随便你添加任何数据!这就大大的增加了数据的可扩充性了!

  • 什么是 LDIF

如前所述,在 LDAP 的架构下,我们将每笔纪录都称为一个 DN,最顶天的 DN 我们称为 baseDN,而撰写的方法通常与你的 DNS 架构有点关系! 例如,我们的 DNS 架构是 server.vbird 这样的领域,那么 baseDN 应该就可以设置成:『 dc=server,dc=vbird 』这样的结构! 跟目录树系统对照起来,也就是说,根目录 (/) 相当于 dc=server,dc=vbird 这个 DN 的名称就是了。那么谁可以管理这个 LDAP 系统呢? 我们就得要有另外一个管理员的 DN!这个管理员 DN 有点像 /root 目录啦!通常我们称为 rootDN,在后续谈到的 FreeIPA 里面, rootDN 的名称通常是『 cn=Directory Manager 』这样的结构!那如果你有帐号数据的话,也有可能需要用到帐号的 DN, 会有点像 /home/admin 类似的目录,在 FreeIPA 的帐号数据 DN 有点像『 uid=admin,cn=users,cn=accounts,dc=server,dc=vbird 』。

那么 baseDN 里面含有什么数据呢?如果一部创建好的 LDAP 数据,使用『 ldapsearch -x "dc=server" 』查找数据时,应该就会出现如下画面:

# server.vbird
dn: dc=server,dc=vbird
objectClass: top
objectClass: domain
objectClass: pilotObject
objectClass: domainRelatedObject
objectClass: nisDomainObject
dc: server
info: IPA V2.0
associatedDomain: server.vbird
nisDomain: server.vbird

上面这个数据就被称为是 LDIF (LDAP Data Interchange Format)!这是正常的 LDAP 修改数据内容的格式!早期修改 LDAP 的信息,都要通过这种格式,然后以 ldapmodify 指令来导入修改~相当痛苦!近期以来,有 FreeIPA 可以使用指令的方式来修订 LDAP 的内容, 感觉舒服多了!

11.1.3、FreeIPA 简介

要提供 LDAP 的身份验证功能,有很多软件可以支持,在 Windows 上面最常用的就是 AD (Active Directory, AD) 服务器,在 Linux 上面则有多种服务! 包括 openldap 服务器、389ds 服务器、Red Hat Directory Server (rhds) 服务器、FreeIPA 服务器等等,其中 openldap, 389ds 主要仅提供 LDAP 服务, rhds 则是 Red Hat 官方支持的软件,基本上没有发布给 RHEL 衍生产品使用,最后的 FreeIPA 就有趣了!FreeIPA 是开放原代码软件, 主要的任务是提供类似 windows AD 服务器的功能,可以统一提供 LDAP, DNS, NTP 等等功能,相当强大!而且,如同上一小节提到的, FreeIPA 已经集成了大部分常见系统的纲要档,所以,几乎所有的用户端系统,都可以直接拿 FreeIPA 服务器当作帐号密码验证来源服务器! 简单易用!

FreeIPA 的官方网站自己的介绍中,FreeIPA 就是 Identity, Policy, Audit,亦即身份验证、政策规则管理、稽核验证功能等。 鸟哥最需要的其实只有第一个啦!那就是身份验证的功能!也就是帐密统一管理的 LDAP 机制就是了!过去鸟哥使用 openldap 设置时, 每一个项目都需要用到 LDIF 文本档进行导入,真的头很痛~FreeIPA 则有制式化方式创建服务,设置上面做非常多简化! 因此,管理员只需要知道 LDAP 是什么,大致请处 LDIF 格式之后,其他的,都用 ipa 这个指令来完成即可!相当简便! 整个简单的 FreeIPA 服务器功能,我们可以拿底下的图标来做个简单的介绍:

图 11.1.3、FreeIPA 服务器当中,跟 LDAP 与身份验证较相关的组件示意
图 11.1.3、FreeIPA 服务器当中,跟 LDAP 与身份验证较相关的组件示意

上图当中,右侧为 FreeIPA 服务器里头的组件,有特殊底色的组件是 FreeIPA 架设值,就可以主动提供与设置好的项目! 你几乎什么都不用做,所有的设置就完成了!之后要添加、删除、修改帐号等数据,就通过『 ipa cli 』组件来管理即可! 要注意的是,FreeIPA 并不是独立做出全部的服务,而是拿既有的软件来搭建出类似 AD 的管理机制!所以 ldap.conf 是使用 openldap-clients 软件,身份验证则是抓取 sssd 服务来处理,只是全部的设置档,都是通过 freeipa 主动建置完毕而已。

至于用户端,只要设置好 ldap 用户端数据,加上设计好 sssd 服务,就可以主动连接上 FreeIPA 的 LDAP 服务 (一般端口口放行在 port 389 及加密的 port 636),那就能够进行身份验证了!整体结构就是这样。

11.1.4、LDAP 服务器、用户端电脑硬件准备与网络参数设置

帐号信息毕竟是非常重要的内部数据,所以,建议直接放在 LAN 的内部服务器系统,不要放在 DMZ 环境下喔! 不要让你家的帐号数据暴露在可被访问的 DMZ 环境内~这样应该会稍微安全些!我们在 LAN 区域当中创建好 LDAP 服务器,然后在 LAN 里面抓两部系统来处理,一部预计使用 Linux 另一部将使用 windows 系统喔! 所以,最终会有三部新的系统这样。相关的设置会有点像这样:

图 11.1.4、本章节用来测试 FreeIPA 的服务器与用户端硬件设备示意
图 11.1.4、本章节用来测试 FreeIPA 的服务器与用户端硬件设备示意

不过,由于担心云端系统可用的资源不够多,因此,建议将上一节课的 works 系统先关闭,最终只剩下系统缺省绝对会使用的项目即可:

# 在 cloud 母系统上面,将多余的虚拟机关闭,剩下需要的大概有:
[root@cloud ~]# virsh list
 Id   Name                 State
------------------------------------
 1    master               running
 13   server_dns_master    running
 15   server_dns_slave     running
 16   server_dhcp          running
 19   server_backup        running
  • 处理硬件设置档 (XML)、磁盘档 (.img) 等信息

要先记得,我们的母系统是在 cloud 的主机底下,然后我们拷贝的服务器来源文件,主要是由 server_raw 来的!现在就让我们来处理 XML 以及映像档数据:

# 1.1 拷贝 server_raw/client_raw 给 server_ldap/client_linux 使用
[root@cloud ~]# cd /kvm/img
[root@cloud img]# cp server_raw.img server_ldap.img
[root@cloud img]# cp client_raw.img client_linux_00.img

# 1.2 windows 需要比较大的容量,而且需要全新安装,请创建 100G 的硬盘
[root@cloud img]# qemu-img create -f qcow2 client_win_00.img 100G

# 2.1 创建好 server_ldap.xml 的设置档,并尝试启动
[root@cloud img]# cd /kvm/xml
[root@cloud xml]# cp server_workstation.xml server_ldap.xml
[root@cloud xml]# vim server_ldap.xml
  <name>server_ldap</name>
    <nvram>/kvm/xml/server_ldap.uefi.fd</nvram>
      <source file="/kvm/img/server_ldap.img"/>
      <source bridge="lanbr0"/>
      <mac address="52:54:00:00:20:51"/>
    <graphics type="vnc" port="5936" listen="127.0.0.1" passwd="rocky9">

[root@cloud xml]# virsh create server_ldap.xml

# 2.2 创建好 Linux 用户端 client_linux_00 的设置档,并尝试启动
[root@cloud xml]# cp client_raw.xml client_linux_00.xml
[root@cloud xml]# vim client_linux_00.xml
  <name>client_linux_00</name>
    <loader readonly="yes" type="pflash" secure="no">/usr/share/edk2/ovmf/OVMF_CODE.fd</loader>
    <nvram>/kvm/xml/client_linux_00.uefi.fd</nvram>
      <source file="/kvm/img/client_linux_00.img"/>
      <mac address="52:54:00:00:20:00"/>
    <graphics type="vnc" port="5920" listen="127.0.0.1" passwd="rocky9">

[root@cloud xml]# virsh create client_linux_00.xml

# 2.3 创建好 Windows 用户端 client_win_00 的设置档,并尝试启动
[root@cloud xml]# cp client_raw.xml client_win_00.xml
[root@cloud xml]# vim client_win_00.xml
  <name>client_win_00</name>
  <memory>6097152</memory>
  <currentMemory>6097152</currentMemory>
    <loader readonly="yes" type="pflash" secure="yes">/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd</loader>
    <nvram>/kvm/xml/client_win_00.uefi.fd</nvram>
  <hyperv mode="custom">
    <relaxed state="on"/>
    <vapic state="on"/>
    <spinlocks state="on" retries="8191"/>
    <vpindex state="on"/>
    <runtime state="on"/>
    <synic state="on"/>
    <stimer state="on">
      <direct state="on"/>
    </stimer>
    <reset state="on"/>
    <vendor_id state="on" value="KVM Hv"/>
    <frequencies state="on"/>
    <reenlightenment state="on"/>
    <tlbflush state="on"/>
    <ipi state="on"/>
    <evmcs state="on"/>
  </hyperv>
    <timer name="hypervclock" present="yes"/>
  </clock>
      <source file="/kvm/img/client_win_00.img"/>
      <mac address="52:54:00:c2:00:00"/>
    <tpm model="tpm-tis">
      <backend type="emulator" version='2.0'/>
    </tpm>
    <graphics type="vnc" port="5921" listen="127.0.0.1" passwd="rocky9" />

[root@cloud xml]# virsh create client_win_00.xml
# 这样就可以进入 windows 11 的安装模式当中才对!
  • 安装 Windows 11 到虚拟机上

上面的设置数据跟前几个章节相近,没有什么太大的问题~但是,Windows 11 的虚拟机安装,就很有问题了! 因为 Windows 11 对硬件的要求比较高~所以,我们缺省的环境是不足以支撑相关硬件的要求的~同时,Windows 11 的相关安装档, 以及 virtio 磁盘机驱动程序,则需要事先下载到 /kvm/iso 底下才行!因为 windows 11 的 XML 数据非常多~ 所以鸟哥将全部的设置写入一个文本档,大家可以从底下的网址自行取得参考喔!

几个比较重要的安装流程是,安装过程由于 windows 不懂 virtio 的磁盘设备,因此,你得要到 virtio-win.iso 那个光盘去找数据! 加载驱动程序,这样才有办法抓到实际的硬盘来安装!后续安装过程应该就很顺畅了。安装完毕之后,到设备管理员当中, 会看到更多的有问题的设备~每个有问题设备都点进去更新驱动程序,同样使用 virtio-win.iso 光盘的内容!应该很快就能找到正确的驱动程序! 在这过后,你的 windows 11 才会有网络喔~要注意!要注意!

  • LDAP 服务器网络设置

FreeIPA 的 LDAP 功能,应该还是需要固定 IP 地址才好!至于 linux/windows 等客户端,那就单纯使用 dhcp 取得就好! 如上图所示,我们的 LDAP 相关数据应该是:

  • IP address: 192.168.20.251/24
  • Gateway: 192.168.20.254
  • DNS server: 192.168.30.211, 192.168.30.212
  • hostname: ldap.server.vbird

底下的动作需要在刚刚激活的虚拟机底下实做 (vnc://192.168.201.249:5936),这是因为我们会修改网络参数的缘故啊!

# 在 LDAP 服务器 (VNC 环境) 完成如下参数设置:
[root@server001 ~]# hostnamectl hostname ldap.server.vbird
[root@server001 ~]# nmcli connection modify enp1s0 ipv4.method manual ipv4.addresses 192.168.20.251/24 \
> ipv4.gateway 192.168.20.254 ipv4.dns 192.168.30.211,192.168.30.212 \
> ipv4.dns-search server.vbird,lan.vbird,ap.vbird
[root@server001 ~]# nmcli connection up enp1s0
[root@server001 ~]# curl http://vbird.cn
  • 更新 DNS zone file

创建新主机,需要有名称的对应!请修改 dns1 服务器的 server.vbird 的 zone file !直接做吧!

# 底下所有的动作都应该要在 dns1 (master DNS) 上面动作:
[root@dns1 ~]# vim /var/named/named.server.vbird
@  IN SOA  dns1.server.vbird. adm.mail.server.vbird. ( 2024070404 3H 15M 1D 600 )
....
ldap     IN A    192.168.20.251
....

[root@dns1 ~]# vim /var/named/named.192.168.20
@ IN SOA  dns1.server.vbird. adm.mail.server.vbird. ( 2024070404 3H 15M 1D 600 )
...
251     IN PTR  ldap.server.vbird.
...

[root@dns1 ~]# systemctl restart named-chroot
[root@dns1 ~]# dig +short ldap.server.vbird
192.168.20.251
[root@dns1 ~]# dig +short -x 192.168.20.251
ldap.server.vbird.

11.2、FreeIPA 架设

如前所述,FreeIPA 真的是很庞大的一个系统~集成好多东西!还提供了网页界面的控制环境!一切都是这么的美好... 不过,鸟哥基本上只需要使用 LDAP 统一控制用户的帐号密码而已啦!所以,预计开放的防火墙端口口并不会全部都放行! 而是只放行 port 389, 636 而已喔~相关的 FreeIPA server 与使用 LDAP 服务的用户端相关性, 有点像底下的模样:

图 11.2、FreeIPA 与相关的组件示意图
图 11.2、FreeIPA 与相关的组件示意图

上图右侧有底色的方块,是 FreeIPA 提供的,或是 FreeIPA 主动去设置的项目!好像很多组件要处理, 但事实上,使用一个安装指令就搞定了...实在觉得很简单啊!

11.2.1、行前检测与规划,非常重要!

基本上,LDAP 的服务在查找数据时,主要是使用主机名称在进行查找的!但是,LDAP 是架构在 TCP/IP 的协定上! 所以,主机名称对应到正确的 IP 地址这件事,就显得非常非常重要!我们的环境其实比较 OK,因为着眼在企业内部使用内部 DNS 系统的情境, 因此无须改动 /etc/hosts !只是特别要注意,主机名称一定要对应的起来才行!很重要!对应不起来,LDAP 就会失败!

# 在 LDAP 系统上面,找出正确的主机名称对应的 IP 地址:
[root@ldap ~]# dig +short ldap.server.vbird
192.168.20.251
[root@ldap ~]# ip addr show enp1s0  | grep 'inet '
    inet 192.168.20.251/24 brd 192.168.20.255 scope global noprefixroute enp1s0
# 本机的主机名称与 IP 确实是可以对应的!
[root@ldap ~]# hostname
ldap.server.vbird
# 主机名称的设置也没有问题!OK 的!

看起来是没问题啊!另外,我们也需要规划一下 LDAP 那个小节提到的两个 DN,一个是 baseDN,一个是 rootDN! 一般来说,baseDN 会跟你的 dns 的 FQDN 有关!因为我们的领域 (domain) 主要是 server.vbird,所以, baseDN 通常就会这样设置:

  • hostname: ldap.server.vbird
  • domainname: server.vbird
  • baseDN: dc=server,dc=vbird
  • rootDN: cn=Directory Manager: 同时系统管理员帐号为 admin 喔!
  • 用户家目录缺省在 /rhome 上(这是为了与本机用户做区分,而且可提供远程挂载之用!)

那个 rootDN 是在 OpenLDAP 上面的管理员节点,鸟哥将它借来用在 FreeIPA 上面~至于用户家目录建议不要放置在 /home 的原因是, 未来我们会将统一管理的用户各自的家目录也提供给企业内的所有主机使用,如果远程帐号也使用 /home 的话,我们就得要将帐号一个一个设置, 否则可能会跟本机帐号冲突 (都在 /home 底下啊)。因此,鸟哥建议将远程用户的家目录放置到其他位置,例如 /rhome 就是个常见的远程用户家目录上层目录名。大致需要注意的项目就像上面这样啰!接下来,就让我们简单来设置一下 FreeIPA 服务器吧!

11.2.2、FreeIPA 的 LDAP 服务快速安装与设置

FreeIPA 在 RHEL 9 衍生产品的软件名称为 ipa-server,所以,你可以简单的立刻安装好:

[root@ldap ~]# yum install ipa-server

安装完毕之后,我们可以使用 FreeIPA 提供的 ipa-server-install 脚本来完成我们需要的所有工作喔! 这个脚本运行过程中,会需要输入一些信息,大多就是 baseDN 或管理员密码等,底下,让我们来简单的完成需要的任务:

# 在 LDAP 服务器上面,创建好 ipa server
[root@ldap ~]# ipa-server-install

The log file for this installation can be found in /var/log/ipaserver-install.log
==============================================================================
This program will set up the IPA Server.
Version 4.10.2

This includes:
  * Configure a stand-alone CA (dogtag) for certificate management
  * Configure the NTP client (chronyd)
  * Create and configure an instance of Directory Server
  * Create and configure a Kerberos Key Distribution Center (KDC)
  * Configure Apache (httpd)
  * Configure SID generation
  * Configure the KDC to enable PKINIT

To accept the default shown in brackets, press the Enter key.

Do you want to configure integrated DNS (BIND)? [no]:   <==缺省不要绑定 DNS 喔!

Enter the fully qualified domain name of the computer
on which you're setting up server software. Using the form
.
Example: master.example.com


Server host name [ldap.server.vbird]:   <==缺省用本机的主机名,所以没问题!

The domain name has been determined based on the host name.

Please confirm the domain name [server.vbird]:   <==一样使用本机领域名!

The kerberos protocol requires a Realm name to be defined.
This is typically the domain name converted to uppercase.

Please provide a realm name [SERVER.VBIRD]:   <==同样采用默认值
Certain directory server operations require an administrative user.
This user is referred to as the Directory Manager and has full access
to the Directory for system management tasks and will be added to the
instance of directory server created for IPA.
The password must be at least 8 characters long.

Directory Manager password: <==输入 LDAP 管理密码
Password (confirm): <==输入 LDAP 管理密码

The IPA server requires an administrative user, named 'admin'.
This user is a regular system account used for IPA server administration.

IPA admin password: <==输入 admin 用户密码
Password (confirm): <==输入 admin 用户密码

Trust is configured but no NetBIOS domain name found, setting it now.
Enter the NetBIOS name for the IPA domain.
Only up to 15 uppercase ASCII letters, digits and dashes are allowed.
Example: EXAMPLE.


NetBIOS domain name [SERVER]:   <==同样采用默认值

Do you want to configure chrony with NTP server or pool address? [no]:   <==同样采用默认值

The IPA Master Server will be configured with:
Hostname:       ldap.server.vbird
IP address(es): 192.168.30.216
Domain name:    server.vbird
Realm name:     SERVER.VBIRD

The CA will be configured with:
Subject DN:   CN=Certificate Authority,O=SERVER.VBIRD
Subject base: O=SERVER.VBIRD
Chaining:     self-signed

Continue to configure the system with these values? [no]: yes

The following operations may take some minutes to complete.
Please wait until the prompt is returned.
# 接下来会跑好一阵子的系统检测与设置~你可以顺便看看 FreeIPA 在干麻!
The ipa-client-install command was successful

Please add records in this file to your DNS system: /tmp/ipa.system.records.t241j_cw.db
==============================================================================
Setup complete

Next steps:
        1. You must make sure these network ports are open:
                TCP Ports:
                  * 80, 443: HTTP/HTTPS
                  * 389, 636: LDAP/LDAPS
                  * 88, 464: kerberos
                UDP Ports:
                  * 88, 464: kerberos
                  * 123: ntp

        2. You can now obtain a kerberos ticket using the command: 'kinit admin'
           This ticket will allow you to use the IPA tools (e.g., ipa user-add)
           and the web user interface.

Be sure to back up the CA certificates stored in /root/cacert.p12
These files are required to create replicas. The password for these
files is the Directory Manager password
The ipa-server-install command was successful
# 出现上面这段文本,就是完成了!要注意提示!防火墙记得处理!

基本上,整体安装就这样搞定耶!因为鸟哥以前搞 OpenLDAP 时,搞到头发昏~没想到 FreeIPA 竟然这样搞定一切... 刚刚完成的当下,会有点不知所措...笑死~

  • 防火墙设置: 针对加密的 LDAP 服务

要注意的是,无论 FreeIPA 提供什么服务,鸟哥这边再次强调,目前『我们系统仅使用 LDAP 有加密连接的服务』而已,所以,我们只需要放行 port 636 这个 ldaps 喔!那就来处理一下防火墙吧!

# 放行需要的防火墙!
[root@ldap ~]# firewall-cmd --permanent --add-service=freeipa-ldaps
[root@ldap ~]# firewall-cmd firewall-cmd --permanent --remove-service={ftp,http,https}
[root@ldap ~]# firewall-cmd --reload
[root@ldap ~]# firewall-cmd --list-service
cockpit dhcpv6-client freeipa-ldaps ssh

其实,比较重要的是 freeipa-ldaps 与 ssh 就是了!

  • 使用 ldapsearch -x 检测 LDAP 功能是否正常

现在,先让我们来检查一下,目前这个 LDAP 服务器,真的可以顺利提供 LDAP 嘛? 最简单的方法,其实就是使用 ldapsearch -x 这个指令来查找即可!应该要先来查找一下 baseDN 这个节点的内容才是! 不过要注意的是, ldapsearch 其实会找第一个出现的组件,所以, dc=server,dc=vbird 要列表,可以直接查找 dc=server 即可! 简单这样处理看看:

# 查找一下,目前有没有名为 dc=server,dc=vbird 的节点纪录
[root@ldap ~]# ldapsearch -x dc=server
....(略过)....
# server.vbird
dn: dc=server,dc=vbird
objectClass: top
objectClass: domain
objectClass: pilotObject
objectClass: domainRelatedObject
objectClass: nisDomainObject
dc: server
info: IPA V2.0
associatedDomain: server.vbird
nisDomain: server.vbird

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

出现的数据最要注意的是『 dn: dc=server,dc=vbird 』那一行!因为那个 dn 就是判别名称的意思!后面的 objectClass 等信息, 就是这个节点的内容!这样应该就看得懂吧!另外,上面安装 IPA 时,过程中说有创建一个 admin 的用户, 我们也可以使用『 uid=帐号名称 』这样来查找看看喔!

[root@ldap ~]# ldapsearch -x uid=admin
# admin, users, compat, server.vbird
dn: uid=admin,cn=users,cn=compat,dc=server,dc=vbird
objectClass: posixAccount
objectClass: ipaOverrideTarget
objectClass: top
gecos: Administrator
cn: Administrator
uidNumber: 915600000
gidNumber: 915600000
loginShell: /bin/bash
homeDirectory: /home/admin
ipaAnchorUUID:: OklQQTpzZXJ2ZXIudmJpcmQ6MzVmYjkwOGMtZmYyYi0xMWVlLThlZTgtNTI1ND
 AwMDAzMGM2
uid: admin

# admin, users, accounts, server.vbird
dn: uid=admin,cn=users,cn=accounts,dc=server,dc=vbird
objectClass: top
objectClass: person
objectClass: posixaccount
objectClass: krbprincipalaux
objectClass: krbticketpolicyaux
objectClass: inetuser
objectClass: ipaobject
objectClass: ipasshuser
objectClass: ipaSshGroupOfPubKeys
objectClass: ipaNTUserAttrs
uid: admin
cn: Administrator
sn: Administrator
uidNumber: 915600000
gidNumber: 915600000
homeDirectory: /home/admin
loginShell: /bin/bash
gecos: Administrator
ipaNTSecurityIdentifier: S-1-5-21-2221503860-19708226-1022894140-500

以 admin 为开头的帐号有两笔纪录,这两笔纪录分在不同的 cn 组织中~一个是 cn=compat 一个是 cn=accounts! 不过内容差不多耶~应该是有进行两个组织相同帐号的同步才对!这样才能适合不同用户端系统的帐号需求!所以,看起来没问题喔!

  • LDAP 用户端设置 /etc/openldap/ldap.conf

只是...ldapsearch 是找哪个设置档?基本上看一下底下这个文件:

[root@ldap ~]# cat /etc/openldap/ldap.conf | grep -v '#' | grep -v '^$'
SASL_NOCANON    on
URI ldaps://ldap.server.vbird
BASE dc=server,dc=vbird
SASL_MECH GSSAPI

上面文件最重要的就是 LDAP 服务器来源的主机名称~还有 baseDN 名称的设置!

11.2.3、登录 LDAP admin 用户管理 LDAP

过去我们都得要使用 LDIF 格式来处理好需要的节点 (DN) 格式,之后再以 ldapadd, ldapmodify, ldapdelete 等指令来导入处理, 以改变在 LDAP 服务器当中的数据。如果学过 SQL 语言的,那你可以假想,LDIF 就是 SQL 的语法,而 ldap{add,modify,delete} 则是导入 SQL 语言的指令这样。问题是,LDIF 很难处理~一个小细节错误,在导入的时候,就很容易出错! 虽然使用 LDIF 创见 LDAP 数据库内容会比较干净,不过...就是很难管理!

现在,FreeIPA 提供了 ipa 这个 cli 指令,可以让大家快速方便的找到所有需要的帐号管理功能,处理起来非常方便! 怎么使用 ipa 呢?我们需要在 ldap.server.vbird 系统上面,先以 Kerberos 验证登录管理员身份后, 才能使用 ipa 喔!我们在前一小节安装 FreeIPA 的时候,不是要你输入 Directory Manager 的密码嘛? 在底下的指令当中输入那个密码就对了!

[vbird@ldap ~]$ kinit admin
Password for admin@SERVER.VBIRD: <==这里输入 LDAP admin 的密码

[vbird@ldap ~]$ klist
Ticket cache: KCM:1000
Default principal: admin@SERVER.VBIRD

Valid starting     Expires            Service principal
07/04/24 21:52:49  07/05/24 21:51:25  krbtgt/SERVER.VBIRD@SERVER.VBIRD
# 时间格式是 月/日/西元年后两位数

你用 Linux 的哪个帐号运行 kinit 都没问题,如上所示,鸟哥用 vbird 这个管理员惯用的一般帐号,进行 FreeIPA 的 admin 管理身份转换,然后使用 klist 查看一下目前的 Kerberos 票据 (ticket),就可以看到,如果 vbird 这个帐号一直没有注销的话, 这份票据就可以用到 24 小时之后喔!好了!现在你可以开始使用 ipa 这个指令啦!

  • 改变帐号管理默认值,以家目录为例

在 linux 系统的管理中,创建用户的缺省家目录,一般是在 /home 底下,我们可以通过修改 /etc/default/useradd 这个指令来修改默认值。那 FreeIPA 的帐号默认值怎么查看与修改?首先,记得你已经登录了 admin 这个帐号喔 (kinit admin)! 然后这样做:

[vbird@ldap ~]$ ipa config-show
  Maximum username length: 32
  Maximum hostname length: 64
  Home directory base: /home
  Default shell: /bin/sh
  Default users group: ipausers
  Default e-mail domain: server.vbird
  Search time limit: 2
  Search size limit: 100
  User search fields: uid,givenname,sn,telephonenumber,ou,title
  Group search fields: cn,description
  Enable migration mode: False
  Certificate Subject base: O=SERVER.VBIRD
  Password Expiration Notification (days): 4
  Password plugin features: AllowNThash, KDC:Disable Last Success
  SELinux user map order: guest_u:s0$xguest_u:s0$user_u:s0$staff_u:s0-s0:...
  Default SELinux user: unconfined_u:s0-s0:c0.c1023
  Default PAC types: MS-PAC, nfs:NONE
  IPA masters: ldap.server.vbird
  IPA master capable of PKINIT: ldap.server.vbird
  IPA CA servers: ldap.server.vbird
  IPA CA renewal master: ldap.server.vbird

跟帐号设置比较有关的如上头特殊字体部份。我们想要修改缺省的家目录成为 /rhome ,那可以使用底下的方式来修改喔!

[vbird@ldap ~]$ ipa help config-mod
...
  --homedirectory=STR   Default location of home directories
...
[vbird@ldap ~]$ ipa config-mod --homedirectory=/rhome
  Maximum username length: 32
  Maximum hostname length: 64
  Home directory base: /rhome
  Default shell: /bin/sh
  Default users group: ipausers
  Default e-mail domain: server.vbird
....

这样就改好了!相当简单易用!另外,如果你有想要知道的 ipa 指令用途,只要用『 ipa help command 』格式去找就好啰!

你会看到缺省的 shell 还是 /bin/sh,能否请您自己修改一下,让缺省的 shell 成为 /bin/bash 呢!加油!
  • 简单用户管理

先来看看我们有多少群组与多少用户,在刚刚创建好 FreeIPA 的这个时刻:

# 先来看看目前有几个群组
[vbird@ldap ~]$ ipa group-find
----------------
4 groups matched
----------------
  Group name: admins
  Description: Account administrators group
  GID: 915600000

  Group name: editors
  Description: Limited admins who can edit other users
  GID: 915600002

  Group name: ipausers
  Description: Default group for all users

  Group name: trust admins
  Description: Trusts administrators group
----------------------------
Number of entries returned 4
----------------------------

# 再来看看,那有几个用户呢?
[vbird@ldap ~]$ ipa user-find
--------------
1 user matched
--------------
  User login: admin
  Last name: Administrator
  Home directory: /home/admin
  Login shell: /bin/bash
  Principal alias: admin@SERVER.VBIRD, root@SERVER.VBIRD
  UID: 915600000
  GID: 915600000
  Account disabled: False
----------------------------
Number of entries returned 1
----------------------------

# 那么来看看 admin 这个用户的重要信息:
[vbird@ldap ~]$ ipa user-show admin
  User login: admin
  Last name: Administrator
  Home directory: /home/admin
  Login shell: /bin/bash
  Principal alias: admin@SERVER.VBIRD, root@SERVER.VBIRD
  UID: 915600000
  GID: 915600000
  Account disabled: False
  Password: True
  Member of groups: trust admins, admins
  Kerberos keys available: True

看起来缺省有 4 个群组,以及 1 个用户,用户名称就是权力无限大的 admin 这样。现在,先让我们来随便创建个一般用户, 用户名称为 amanda 好了~最简单处理的方式如下:

# 用缺省的方式创建一个 amanda 用户
[vbird@ldap ~]$ ipa user-add amanda
First name: Amanda
Last name: Tsai
-------------------
Added user "amanda"
-------------------
  User login: amanda
  First name: Amanda
  Last name: Tsai
  Full name: Amanda Tsai
  Display name: Amanda Tsai
  Initials: AT
  Home directory: /rhome/amanda
  GECOS: Amanda Tsai
  Login shell: /bin/bash
  Principal name: amanda@SERVER.VBIRD
  Principal alias: amanda@SERVER.VBIRD
  Email address: amanda@server.vbird
  UID: 915600003
  GID: 915600003
  Password: False
  Member of groups: ipausers
  Kerberos keys available: False

FreeIPA 的缺省 UID/GID 似乎是在 915600000 开始这样,总之,这样就增加了一个用户!如果你要查找这个用户的相关信息, 除了使用『 ipa user-shwo amanda 』之外,也可以直接通过 LDAP 的查找方式处理,也就是『 ldapsearch -x uid=amanda 』! 但是目前这个用户没有密码喔!创建密码的最简单方式,可以这样处理看看:

# 使用管线命令直接带入密码的方式:
[vbird@ldap ~]$ echo MyPassW04d | ipa user-mod amanda --password
----------------------
Modified user "amanda"
----------------------
  User login: amanda
  First name: Amanda
  Last name: Tsai
  Home directory: /rhome/amanda
  Login shell: /bin/bash
  Principal name: amanda@SERVER.VBIRD
  Principal alias: amanda@SERVER.VBIRD
  Email address: amanda@server.vbird
  UID: 915600003
  GID: 915600003
  Account disabled: False
  Password: True
  Member of groups: ipausers
  Kerberos keys available: True
  • 复杂组合的帐号管理

现在,让我们来仿真基础学习篇里面提到的帐号管理方式,假设我们需要创建三个用户,信息分别如下;

  • alex (Alex Tsai)
  • melody (Melody Tsai)
  • ponda (Ponda Lin)
  • 密码都是 MyPassW04d
[vbird@ldap ~]$ echo MyPassW04d | ipa user-add alex --first=Alex --last=Tsai --password
[vbird@ldap ~]$ echo MyPassW04d | ipa user-add melody --first=Melody --last=Tsai --password
[vbird@ldap ~]$ echo MyPassW04d | ipa user-add ponda --first=Ponda --last=Lin --password

接下来,这三个用户得要加入一个群组,假设群组名称为 studygroup,那么加入这三个用户到此群组当中的流程, 应该就是这样的:

# 1. 先创建需要的群组
[vbird@ldap ~]$ ipa group-add studygroup
------------------------
Added group "studygroup"
------------------------
  Group name: studygroup
  GID: 915600007

# 2. 加入三个用户到此群组内
[vbird@ldap ~]$ ipa help group-add-member
[vbird@ldap ~]$ ipa group-add-member studygroup --user={alex,melody,ponda}
  Group name: studygroup
  GID: 915600007
  Member users: alex, melody, ponda
-------------------------
Number of members added 3
-------------------------

[vbird@ldap ~]$ ipa group-show studygroup
  Group name: studygroup
  GID: 915600007
  Member users: alex, melody, ponda
  • 通过 sssd 服务管理 Linux 系统帐号

前面讲这么多,都是在介绍 FreeIPA cli, LDAP 等等的管理上面,如果你仔细去看一下 /rhome,那根本就没有创建目录! 对啊!原本上面的工作,都仅只是在 LDAP 的数据节点上面进行修改而已!不过, FreeIPA 也很厉害, 其实也帮我们修订了 sssd 这个系统认证的服务了!来看看系统验证服务选择了哪些?接下来都是 Linux 系统操作了, 所以,不能再用一般帐号啰~请转成 root 处理!

[root@ldap ~]# authselect list
- minimal        Local users only for minimal installations
- sssd           Enable SSSD for system authentication (also for local users only)
- winbind        Enable winbind for system authentication

[root@ldap ~]# authselect current
Profile ID: sssd
Enabled features:
- with-sudo

目前就是使用 sssd 这个服务喔!那这个服务是什么?来看看这个服务先:

[root@ldap ~]# systemctl status sssd
● sssd.service - System Security Services Daemon
     Loaded: loaded (/usr/lib/systemd/system/sssd.service; enabled; preset: enabled)
     Active: active (running) since Sat 2024-04-20 23:37:03 CST; 16h ago
   Main PID: 22524 (sssd)
      Tasks: 8 (limit: 12337)
     Memory: 57.8M
        CPU: 2.499s
     CGroup: /system.slice/sssd.service
             ├─22524 /usr/sbin/sssd -i --logger=files
....

原来全名是『 System Security Services Daemon 』啊!系统资安服务!主要目的就是进行身份验证! 来看看主要的设置档:

[root@ldap ~]# cat /etc/sssd/sssd.conf
[domain/server.vbird]
id_provider = ipa
ipa_server_mode = True
ipa_server = ldap.server.vbird
ipa_domain = server.vbird
ipa_hostname = ldap.server.vbird
auth_provider = ipa
chpass_provider = ipa
access_provider = ipa
cache_credentials = True
ldap_tls_cacert = /etc/ipa/ca.crt
krb5_store_password_if_offline = True
[sssd]
services = nss, pam, ifp, ssh, sudo
domains = server.vbird
[nss]
homedir_substring = /home
memcache_timeout = 600

上面就是 sssd 这个服务查找数据的流程~在 [sssd] 的规范中,使用到的服务 (services) 那个 nss 与 pam 就是本机的帐号机制! 而 domains 就会去找 [domains/规范的领域] 有关的设置!因此,sssd 缺省还是会先找本机 /etc/passwd 里面有的帐号来呈现, 若找不到,就会再去找 domains 的规范~而上述 domains 的规范当中,主要就是通过 ipa_server 来验证~并使用 LDAP 的 TLS 加密机制! 加密密钥则放置于 /etc/ipa/ca.crt 这个文件内!

有了上面的服务以及相关的设置之后,我们就可以来查找 Linux 系统需要的帐号了!

[root@ldap ~]# id alex
uid=915600004(alex) gid=915600004(alex) groups=915600004(alex),915600007(studygroup)

这样我们就将 LDAP 集成到 Linux 帐号验证环境中了!最后,就让我们来瞧一瞧 IPA 运作的服务有哪些!

# 底下这个指令需要使用 root 的身份喔!
[root@ldap ~]# ipactl status
Directory Service: RUNNING
krb5kdc Service: RUNNING
kadmin Service: RUNNING
httpd Service: RUNNING
ipa-custodia Service: RUNNING
pki-tomcatd Service: RUNNING
ipa-otpd Service: RUNNING
ipa: INFO: The ipactl command was successful

11.2.4、Linux 用户端系统使用 sssd 验证设置

我们在 11.1.3 小节当中的图标,有提到 Linux 用户端想要使用 LDAP 进行身份验证,需要设置 LDAP 与 sssd 才行! 所以,底下我们就依序来处理一下这两个环节吧!让 Linux 系统的终端帐号,也能使用 LDAP server 提供的帐号!

  • 设置 LDAP 用户端

使用 LDAP 用户端,亦即我们在 Linux 上面直接使用 ldapsearch 等指令时,可以即时的到 LDAP server 去查找数据的意思! 如前一小节提到的,我们的 LDAP server 目前仅提供 TLS 支持的 port 636 端口口~亦即是 ldaps:// 这个协定! 知道这个情况之后,再来让我们实验一下啰!记得在 11.1.4 我们有激活一个 linux client 吧~连接上这部使用 dhcp 取得网络参数的系统, 开始进行如下的实验:

# 1. 先安装所有需要的 openldap 与 sssd 的软件
[root@client001 ~]# yum install sssd-ipa sssd-ldap openldap-clients sssd-tools

# 2. 开始设置 openldap 用户端数据
[root@client001 ~]# vim /etc/openldap/ldap.conf
URI ldaps://ldap.server.vbird
BASE dc=server,dc=vbird
SASL_MECH GSSAPI
TLS_CACERT /etc/openldap/certs/ca.crt
# 缺省的情况下, LDAP 的 TLS 凭证会建议放在 /etc/openldap/certs 中
# 而且,该文件来自于 ldap.server.vbird 喔!

# 3. 拷贝 ldap.server.vbird 的 ca.crt 凭证数据
[root@client001 ~]# scp ldap:/etc/ipa/ca* /etc/openldap/certs/

# 4. 使用 ldapsearch -x uid=admin 测试查找结果
[root@client001 ~]# ldapsearch -x uid=admin
# admin, users, compat, server.vbird
dn: uid=admin,cn=users,cn=compat,dc=server,dc=vbird
objectClass: posixAccount
objectClass: ipaOverrideTarget
objectClass: top
gecos: Administrator
cn: Administrator
uidNumber: 915600000
gidNumber: 915600000
loginShell: /bin/bash
homeDirectory: /home/admin
.....

通过简单的几个步骤,我们就在 Linux 端创建好帐号查找的数据了!LDAP client 的设置就完成啦!相当容易吧! 只是,当你使用『 id admin 』时,却发现没有这个用户!这是因为我们只设置了 LDAP 而尚未设置 sssd 服务之故! 接下来,让我们继续处理吧!

  • 设置让 sssd 通过 LDAP 去查找 ldap.server.vbird 的身份验证

跟 ldap.server.vbird 不同,我们是 LDAP 用户端而不是 FreeIPA 用户端,因此许多设置我们只引用 LDAP 的机制! 所以,现在这么做看看:

# 1. 进行 sssd.conf 的设置
[root@client001 ~]# vim /etc/sssd/sssd.conf
[sssd]
services = nss, pam
domains = server.vbird

[nss]

[domain/server.vbird]
ldap_id_use_start_tls = True
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldaps://ldap.server.vbird
ldap_search_base = dc=server,dc=vbird
cache_credentials = True
ldap_tls_cacertdir = /etc/openldap/certs
ldap_tls_reqcert = demand

[root@client001 ~]# chmod 600 /etc/sssd/sssd.conf
[root@client001 ~]# sssctl config-check
Issues identified by validators: 0
Messages generated during configuration merging: 0
Used configuration snippet files: 0

[root@client001 ~]# systemctl restart sssd

# 2. 使用 sssd 当成验证的来源
[root@client001 ~]# authselect select sssd --force
Backup stored at /var/lib/authselect/backups/2024-04-21-12-32-41.YdRLPb
Profile "sssd" was selected.
The following nsswitch maps are overwritten by the profile:
- passwd
- group
- netgroup
- automount
- services

Make sure that SSSD service is configured and enabled. See SSSD documentation for more information.

# 3. 测试仅在 LDAP 上面出现的帐号
[root@client001 ~]# id admin
uid=915600000(admin) gid=915600000(admins) groups=915600000(admins)

[root@client001 ~]# id melody
uid=915600005(melody) gid=915600005(melody) groups=915600005(melody),915600007(studygroup)

# 4. 尝试使用一般用户切换成为 LDAP 的帐号看看
[vbird@client001 ~]$ su - melody
Password:
su: warning: cannot change directory to /rhome/melody: No such file or directory

[melody@client001 vbird]$ whoami
melody
[melody@client001 vbird]$ exit

很快的就建置好 client 端的身份验证功能!一切如此美好!只是...为啥没有家目录?这是因为我们尚未创建正确的家目录啦~ 远程用户的家目录,理论上也应该在远程~这个我们在后续章节再来处理啰!

11.2.5、Windows 用户端系统使用 pGina 验证设置

FreeIPA 也有提供 windows 用户使用 LDAP 登录的处理方式。只是这些方式最终在用户端输入的数据,都需要是『 melody@server.vbird 』 这样的登录帐号名称,同时,还得要改机码,而且恐怕也无法取得 Windows 管理员身份的问题。所以,这个小节当中, 我们改介绍 pGina 这套软件!你同时得要注意,我们的环境中,LDAP server 仅提供 SSL/TLS 的连接验证 (port 636),并不提供明码的 port 389 查找!在这个练习中,我们仅使用 SSL 进行 LDAP 的验证与查找,并不使用 TLS 喔!

  • 安装 pGina.fork 软件

准备来安装 pGina,不过得要留意喔~pGina 官网最新稳定版本停止在 2013 年,该版本并没有支持 SSL/TLS 加密! 找了找 github 的好心人,找到底下这个网站,该网站的主程序也是从 pGina 官网 fork 出来的~目前 (2024/04) 最新版本也来到 3.9.9.12。 虽然还是旧了点 (最新版日期 2018/03),不过鸟哥实验过,确实是能支持 LDAP SSL 喔!所以应该还是能用的才对!

图 11.2.5-1、pGina 下载的版本与文件
图 11.2.5-1、pGina 下载的版本与文件

下载完毕之后,直接双击该软件,就可以直接安装~安装流程就不再一一介绍,反正,就是一直下一步与同意就对了!到最后的画面, 先点击『 No, I will restart the computer later 』项目,等我们设置妥当再重新开机即可。接下来,请到开始程序集选择『 pGina 』项目, 就可以启动 pGina 的设置画面了!

图 11.2.5-2、pGina 安装流程的最后一步!要注意!
图 11.2.5-2、pGina 安装流程的最后一步!要注意!
图 11.2.5-3、pGina 功能启动所在位置
图 11.2.5-3、pGina 功能启动所在位置
  • 开始设置 pGina

在出现的设置窗口中,选择左上角的『 Plugin Selection 』页面,然后点击 LDAP 项目的 Authentication (认证) 、Authorization (授权) 与 Gateway 等勾菜单,之后再点击『 Configure 』项目,流程有点像底下这样:

图 11.2.5-4、pGina 选择 LDAP 作为验证方式
图 11.2.5-4、pGina 选择 LDAP 作为验证方式

在如下的画面中,你应该要修改的项目有:

  • LDAP Host: ldap.server.vbird
  • LDAP Port: 636, Use SSL
  • Authentication: User DN Pattern: uid=%u,cn=users,cn=accounts,dc=server,dc=vbird
  • Gateway: Always add to local group: Administrators [Add Rule]
图 11.2.5-5、pGina 在 LDAP 画面中设置
图 11.2.5-5、pGina 在 LDAP 画面中设置
图 11.2.5-6、pGina 在 LDAP 设置中,让登录者都加入 Administrators 群组
图 11.2.5-6、pGina 在 LDAP 设置中,让登录者都加入 Administrators 群组

如上两个图标,很快的设置好 LDAP 相关的数据,然后按下『Save』后,就会回到前一个画面~然后,请点击 LDAP 底下的『 Local Machine 』项目, 点击 configure 之后,在出现的窗口中,勾选『Always authenticate local users』、『Mirror groups from local user』, 然后右侧 Gateway 的部份,增加 Administrators 群组,处理完毕之后,就可以按下『 Save 』了!如下图所示:

图 11.2.5-7、pGina 设置本地端验证的方式
图 11.2.5-7、pGina 设置本地端验证的方式

回到原始画面当中,按下右下角『Apply』按钮,然后按下『Save』离开。接下来就可以尝试重新开机。如果一切顺利的话,那么你的 windows 就会出现如下的画面:

图 11.2.5-8、pGina 实际作用于登录环境
图 11.2.5-8、pGina 实际作用于登录环境

上图中左下角的环境,你可以选择通过本机的帐号登录,也可以选择 pGina 登录,如果选择本机帐号,那就应用到本机的登录功能, 如果使用 pGina 的话,就可以使用 LDAP server 上面的用户帐号密码,这样就可以登录系统啦!而且,登录之后的所有用户, 缺省都会是管理员身份!这是合在小型企业的环境中~大型企业或者是控管比较严格的单位内,就不要让一般用户加入 Administrators 群组喔! 特别注意!特别注意!如果你登录系统并且查看一下帐户信息,就可以看到『系统管理员』字样喔!

图 11.2.5-9、pGina 的支持,让用户登录成为管理员
图 11.2.5-9、pGina 的支持,让用户登录成为管理员

11.3、参考数据

修改历史:
  • 2024/04/26:小型企业使用 FreeIPA 作为 LDAP 主控系统,感觉真是好简单啊!也容易管理!
  • 2024/07/04:询问了一些业界的朋友,大家都说,帐密管理应该放在 LAN 里面比较合理~所以做了修订!
2024/04/26以来统计人数
计数器
其他链接
环境工程模式篇
鸟园讨论区
鸟哥旧站

今日 人数统计
昨日 人数统计
本月 人数统计
上月 人数统计