如何在 CentOS 7 上使用 FreeIPA 设置集中式 Linux 身份验证
介绍
FreeIPA 是 Linux 的开源安全解决方案,提供帐户管理和集中身份验证,类似于 Microsoft 的 Active Directory。 FreeIPA 建立在多个开源项目之上,包括 389 Directory Server、MIT Kerberos 和 SSSD。
FreeIPA 有 CentOS 7、Fedora 和 Ubuntu 14.04/16.04 的客户端。这些客户端使得将机器添加到您的 IPA 域变得相当简单。其他操作系统可以使用 SSSD 或 LDAP 针对 FreeIPA 进行身份验证。
在本教程中,我们将在 CentOS 7 服务器上安装 FreeIPA 服务器。然后您可以配置客户端机器,允许 FreeIPA 用户使用他们的 IPA 凭据登录。
完成本教程后,您可以在 CentOS 7 上配置 FreeIPA 客户端。
先决条件
要学习本教程,您需要:
- <李> 一台至少有 1 GB 内存的 CentOS 7 服务器。默认情况下,CentOS 7 只使用 root 用户。因为我们将使用 FreeIPA 来管理用户,所以没有必要手动添加其他用户。您可以简单地以 root 用户身份遵循本教程。 <李> 服务器上启用了防火墙,您可以按照 CentOS 7 教程的其他推荐步骤中的防火墙步骤进行设置。强烈建议这样做,因为 FreeIPA 会处理敏感的用户凭据。 <李> 用于服务器和客户端的完全注册域。您可以在 Freenom 上购买一个。 <李> 为您的服务器设置以下 DNS 记录。您可以按照此主机名教程了解有关如何添加它们的详细信息。
- 带有您的服务器名称的 A 记录(例如
ipa.example.com
)指向您服务器的 IPv4 地址。 - 一条 AAAA 记录,其中您的服务器名称指向您服务器的 IPv6 地址,如果您希望您的服务器可通过 IPv6 访问。
可选地,nano
文本编辑器随 yum install nano
安装。 CentOS 默认自带 vi
文本编辑器,但是 nano
可以更友好一些。
第 1 步 — 准备 IPA 服务器
在我们开始安装任何东西之前,我们需要做一些事情来确保服务器准备好运行 FreeIPA。具体来说,我们将设置服务器主机名,更新系统包,检查先决条件中的 DNS 记录是否已传播,并确保防火墙允许流量流向 FreeIPA。
首先,您的服务器的主机名需要与您的完全限定域名 (FQDN) 相匹配,以便 FreeIPA 正常工作。在本教程中,我们将使用 ipa.example.com
作为 FQDN。
您可以在创建服务器时设置主机名,也可以在创建服务器后使用 hostname
命令从命令行设置主机名:
- hostname ipa.example.org
现在,使用 yum
更新包存储库。
- yum update
接下来,在防火墙中打开 FreeIPA 所需的端口。
- firewall-cmd --permanent --add-port={80/tcp,443/tcp,389/tcp,636/tcp,88/tcp,464/tcp,53/tcp,88/udp,464/udp,53/udp,123/udp}
重新加载防火墙以使更改生效。
- firewall-cmd --reload
最后,您需要验证 DNS 名称是否正确解析。为此,您可以使用 dig
命令。安装 bind-utils
包以获取 dig
和其他 DNS 测试实用程序。
- yum install bind-utils
然后使用dig
查看A记录。
- dig +short ipa.example.org A
这应该返回 your_server_ipv4
。
如果启用了 IPv6,则可以用相同的方式测试 AAAA 记录。
- dig +short ipa.example.org AAAA
这应该返回 your_server_ipv6
。
您还可以测试反向查找。这将测试您是否可以从 IP 地址解析主机名。
- dig +short -x your_server_ipv4
- dig +short -x your_server_ipv6
它们都应返回 ipa.example.com。
FreeIPA 大量使用 DNS,因此在下一步中,我们将确保我们的服务器满足 FreeIPA 正常工作所需的特定 DNS 要求。
第 2 步 — 设置 DNS
所有运行 FreeIPA 的机器都必须使用我们在上一步中设置的完全限定域名 (FQDN) 作为它们的主机名。此外,每个服务器的主机名必须解析为其 IP 地址,而不是 localhost
。
注意:如果您在 LAN 内的服务器上设置 FreeIPA,请改用私有 IP。
在 DigitalOcean 上,您可以在控制面板上看到您服务器的公共 IP 地址。您还可以使用 ip
命令查找服务器 IP 地址。
- ip addr show
这应该产生类似于以下内容的输出:
Output. . .
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 111.111.111.111/18 brd 111.111.111.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 1111:1111:1111:1111::1111:1111/64 scope global
valid_lft forever preferred_lft forever
. . .
IPv4 地址直接出现在 inet 之后,而 IPv6 地址(如果已启用)出现在 inet6 之后。如果启用了专用网络,您还可能会看到额外的专用 IP 地址;你可以忽略这些地址。要区分公共 IP 地址和私有 IP 地址,请注意私有 IPv4 地址将在以下范围内:192.168.*.*
、10.*.*.*
或172.16.*.*
到 172.31.*.*
。私有 IPv6 地址将始终以前缀 fe80::
开头。
现在我们需要更改主机文件以将服务器的主机名指向其外部 IP 地址。主机文件 /etc/hosts
将域名映射到计算机本地的 IP 地址。使用 nano
或您最喜欢的文本编辑器打开此文件。
- nano /etc/hosts
在 127.0.0.1
之后查找具有您的服务器主机名的行:
. . .
# The following lines are desirable for IPv4 capable hosts
127.0.0.1 ipa.example.com ipa.example.com
127.0.0.1 localhost.localdomain localhost
127.0.0.1 localhost4.localdomain4 localhost4
. . .
将 127.0.01
更改为您的服务器 IPv4 地址。
. . .
# The following lines are desirable for IPv4 capable hosts
your_server_ipv4 ipa.example.com ipa.example.com
127.0.0.1 localhost.localdomain localhost
127.0.0.1 localhost4.localdomain4 localhost4
. . .
如果启用了 IPv6,则还需要编辑 IPv6 映射,将 ::1
行更改为您的主机名。
...
# The following lines are desirable for IPv6 capable hosts
::1 ipa.example.com ipa.example.com
::1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
...
将 ::1
更改为您的服务器 IPv6 地址。
...
# The following lines are desirable for IPv6 capable hosts
your_server_ipv6 ipa.example.com ipa.example.com
::1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
...
保存并退出文件。
默认情况下,每次系统启动时。 CentOS使用/etc/cloud/templates/hosts.redhat.tmpl
中的配置生成/etc/hosts
。要使此配置更改永久生效,我们还需要对该文件进行类似的更改。
打开文件。
- nano /etc/cloud/templates/hosts.redhat.tmpl
更改 127.0.0.1 $ {fqdn} $ {hostname}
行以使用您的服务器 IPv4 地址。
...
# The following lines are desirable for IPv4 capable hosts
your_server_ipv4 ${fqdn} ${hostname}
127.0.0.1 localhost.localdomain localhost
127.0.0.1 localhost4.localdomain4 localhost4
...
同样,更改 ::1 $ {fqdn} $ {hostname}
行以使用您的 IPv6 地址(如果您使用的是 IPv6 地址)。
...
# The following lines are desirable for IPv6 capable hosts
your_server_ipv6 ${fqdn} ${hostname}
::1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
...
退出并保存文件。
接下来我们将在 CentOS 中配置随机数生成器。这将允许 FreeIPA 执行身份验证所需的加密功能。
第 3 步 — 配置随机数生成器
设置 FreeIPA 需要大量随机数据用于它运行的加密操作。默认情况下,虚拟机将很快耗尽随机数据或熵。为了解决这个问题,我们将使用软件随机数生成器 rngd
。 rngd
的工作原理是从连接到服务器的硬件设备中获取数据并将其提供给内核的随机数生成器。
首先,安装 rngd
。
- yum install rng-tools
然后启用它。
- systemctl start rngd
确保该服务在启动时自动启动。
- systemctl enable rngd
最后,验证 rngd
是否正在运行。
- systemctl status rngd
输出应包括绿色的 active (running)
。
所有依赖项都已配置并正常运行后,我们可以继续安装 FreeIPA 服务器软件本身。
第 4 步 — 安装 FreeIPA 服务器
我们可以继续安装 ipa-server
,即 FreeIPA 服务器包本身。
- yum install ipa-server
然后运行 FreeIPA 安装命令。这将运行一个脚本,提示您输入配置选项并安装 FreeIPA。
- ipa-server-install
除了身份验证之外,FreeIPA 还能够管理主机的 DNS 记录。这可以使供应和管理主机更容易。在本教程中,我们不会使用 FreeIPA 的集成 DNS。基本设置不需要它。
Installation script promptDo you want to configure integrated DNS (BIND)? [no]: no
接下来,您需要输入服务器的主机名、域名和 Kerberos 域名。 Kerberos 是一种身份验证协议,FreeIPA 在后台使用它来对主机进行身份验证。强烈建议您使用您的域名作为 Kerberos 领域。使用不同的命名方案将导致 FreeIPA 的 Active Directory 集成出现问题,并可能导致其他问题。
警告:不要使用您的根域 (example.com
) 作为您的 IPA 域名。这可能会导致 DNS 问题。
Installation script promptServer host name [ipa.example.org]: ipa.example.org
Please confirm the domain name [example.org]: ipa.example.org
Please provide a realm name [EXAMPLE.ORG]: IPA.EXAMPLE.ORG
接下来,为 LDAP 目录管理器创建一个密码。这是 FreeIPA 的 LDAP 功能所必需的。然后是 IPA 管理员密码,该密码将在以管理员用户身份登录 FreeIPA 时使用。强烈建议在此处使用随机生成的安全密码,因为整个系统的安全性都取决于它们。
确认配置。在此之后,安装程序将运行。
Installation script promptContinue to configure the system with these values? [no]: yes
安装过程可能需要几分钟,具体取决于服务器的速度。
现在我们已经完成了服务器安装,我们需要对其进行测试。
第 5 步 — 验证 FreeIPA 服务器功能
首先,通过尝试为管理员用户初始化 Kerberos 令牌来验证是否正确安装了 Kerberos 领域。
- kinit admin
如果工作正常,这应该会提示您输入在安装过程中输入的 IPA 管理员密码。键入它,然后按 ENTER
。
接下来,验证 IPA 服务器是否正常运行。
- ipa user-find admin
这应该打印出以下内容:
Output--------------
1 user matched
--------------
User login: admin
Last name: Administrator
Home directory: /home/admin
Login shell: /bin/bash
Principal alias: admin@IPA.EXAMPLE.COM
UID: 494800000
GID: 494800000
Account disabled: False
----------------------------
Number of entries returned 1
----------------------------
我们还应该能够通过 https://ipa.example.com
访问 Web UI。
注意:TLS 证书将不受信任。现在,我们只是绕过警告。将来,您可以使用自己喜欢的证书颁发机构来获取有效的 TLS 证书。一旦你有了它,你需要上传你的CA证书(通常是ca.crt
),证书文件(your_domain.crt
),和密钥文件 (your_domain.key
) 到服务器。
获得文件后,使用您之前设置的目录管理器密码安装 CA。您可以在命令前加一个空格,以防止它被保存到 shell 历史记录中。
- ipa-cacert-manage -p your_directory_manager_password -n httpcrt -t C,, install ca.crt
然后安装站点证书和密钥。
- ipa-server-certinstall -w -d your_domain.key your_domain.crt
您需要重新启动服务器才能使这些更改生效。
在 Web UI 中,以管理员用户身份登录。用户名为 admin,密码为您之前设置的 IPA 管理员密码。页面顶部会显示 Authenticating...,然后您将被带到 IPA 主页面,如下所示:

最后,让我们通过添加一个新用户来探索 FreeIPA 的一些功能。
第 6 步 — 配置 IPA 用户
FreeIPA 具有非常广泛的用户管理和策略功能集。与标准 Unix 用户类似,FreeIPA 用户可以属于组。可以根据策略允许或拒绝组或个人用户访问主机(客户端计算机)或主机组(主机组)。 FreeIPA 还可以管理 sudo 访问;可以授予组或用户对主机或主机组的 sudo 访问权限。
本教程将介绍如何添加新用户以帮助您入门。
要添加用户,请单击“身份”选项卡,然后单击“用户”。这将显示一个用户表。单击表格上方的 + 添加按钮以添加新用户。在打开的表单中填写必填字段(如名字和姓氏),然后单击“添加”按原样添加用户或“添加并编辑”以配置高级详细信息。
还可以通过单击原始表中的用户来访问高级详细信息。这是管理员在查看用户详细信息时看到的内容:

普通用户也可以登录到 IPA GUI。他们将能够查看自己的权限并编辑个人详细信息。
新用户在首次登录 IPA 机器时将被要求更改密码。这适用于 IPA GUI 以及 SSH。一项有用的功能是能够添加 SSH 密钥。用户可以上传他们的公共 SSH 密钥并将它们传播到 IPA 机器,从而允许无密码登录。然后用户可以随时删除 SSH 密钥,而不必担心它仍然存在于各个服务器上。
结论
现在您已经有了一个可用的 FreeIPA 服务器,您将需要此 CentOS 7 FreeIPA 客户端教程来执行此操作。此外,FreeIPA 是一个 LDAP 服务器。任何支持 LDAP 身份验证的服务都可以设置为针对您的 FreeIPA 服务器进行身份验证。
您可以通过 FreeIPA GUI 或其 CLI 配置用户、组和访问策略。 Sudo 规则可以提供一种相对直接的方式来管理根访问权限。对于较大的部署,建议设置多个具有复制功能的 IPA 服务器。最后,如果您想桥接到 Windows 环境中,您可以设置对 Active Directory 服务器的信任。
FreeIPA 是一种用途极为广泛的身份验证工具,您接下来需要做什么很大程度上取决于您打算如何使用它。如需更多信息,请访问 FreeIPA 网站上的文档资源列表。