简介

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 凭据登录。

遵循本教程后,您可以在 Ubuntu 16.04或上配置 FreeIPA 客户端在 CentOS 7上配置 FreeIPA 客户端。

先决条件

要遵循本教程,您将需要:

  • 一台 CentOS 7 服务器,至少 1 GB RAM。默认情况下,CentOS 7 只使用 root 用户。因为我们将使用 FreeIPA 来管理用户,所以没有必要手动添加另一个用户。您可以简单地以 root 用户身份遵循本教程。

  • 在您的服务器上启用防火墙,您可以按照CentOS 7 附加推荐步骤教程中的防火墙步骤进行设置。强烈建议这样做,因为 FreeIPA 处理敏感的用户凭据。

  • 用于服务器和客户端的完全注册的域。您可以在Namecheap上购买一台,或者在Freenom上免费获得一台。

  • 为您的服务器设置了以下 DNS 记录。您可以关注这个主机名教程了解如何添加它们的详细信息。

  • 带有您的服务器名称(例如ipa.example.com)的 A 记录指向您的服务器的 IPv4 地址。

  • 如果您希望通过 IPv6 访问您的服务器,则您的服务器名称指向您服务器的 IPv6 地址的 AAAA 记录。

  • 可选,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 地址。 hosts 文件/etc/hosts将域名映射到机器上本地的 IP 地址。使用nano或您喜欢的文本编辑器打开此文件。

nano /etc/hosts

查找在127.0.0.1之后包含您的服务器主机名的行:

/etc/hosts

. . .
# 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 地址。

修改 /etc/hosts

. . .
# 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行更改为您的主机名。

/etc/hosts

...
# 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 地址。

修改 /etc/hosts

...
# 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 地址。

修改/etc/cloud/templates/hosts.redhat.tmpl

...
# 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
...

同样,如果您使用的是 IPv6 地址,请将::1 ${fqdn} ${hostname}行更改为使用您的 IPv6 地址。

修改/etc/cloud/templates/hosts.redhat.tmpl

...
# 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 服务器

我们可以继续安装 FreeIPA 服务器包本身ipa-server

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 中,以管理员用户身份登录。 Username 将是 admin 并且 Password 将是您之前设置的 IPA 管理员密码。页面顶部会显示 Authenticating... 然后您将被带到 IPA 主页面,如下所示:

FreeIPA UI 主页

最后,让我们通过添加新用户来探索 FreeIPA 的一些功能。

第 6 步 — 配置 IPA 用户

FreeIPA 有一套非常广泛的用户管理和策略功能。与标准 Unix 用户类似,FreeIPA 用户可以属于组。可以根据策略允许或拒绝组或单个用户访问主机(客户端计算机)或主机组(主机组)。 FreeIPA 还可以管理 sudo 访问;可以授予组或用户对主机或主机组的 sudo 访问权限。

本教程将介绍如何添加新用户以帮助您入门。

要添加用户,请单击 Identity 选项卡,然后单击 Users。这将显示一个用户表。单击表格上方的 + Add 按钮以添加新用户。在打开的表单中填写必填字段(如名字和姓氏),然后单击 Add 以按原样添加用户或 Add and edit 以配置高级详细信息。

还可以通过单击原始表中的用户来访问高级详细信息。这是管理员在查看用户详细信息时看到的内容:

FreeIPA UI 用户编辑

普通用户也可以登录 IPA GUI。他们将能够查看自己的权限并编辑个人详细信息。

新用户在首次登录 IPA 机器时会被要求更改密码。这适用于 IPA GUI 以及 SSH。一项有用的功能是添加 SSH 密钥的能力。用户可以上传他们的公共 SSH 密钥并将它们传播到 IPA 机器,从而允许无密码登录。然后,用户可以随时删除 SSH 密钥,而不必担心它仍然存在于各个服务器上。

结论

现在您有一个工作的 FreeIPA 服务器,您将需要配置客户端以对其进行身份验证。您可以按照这个 Ubuntu 16.04 FreeIPA 客户端教程或这个 CentOS 7 FreeIPA 客户端教程进行操作。此外,FreeIPA 是一个 LDAP 服务器。任何支持 LDAP 身份验证的服务都可以设置为针对您的 FreeIPA 服务器进行身份验证。

您可以通过 FreeIPA GUI 或其 CLI 配置用户、组和访问策略。 Sudo 规则可以提供一种相对直接的方式来管理 root 访问。对于较大的部署,建议设置多个具有复制功能的 IPA 服务器。最后,如果您想桥接到 Windows 环境,您可以设置对 Active Directory 服务器的信任。

FreeIPA 是一个非常通用的身份验证工具,您接下来需要做什么很大程度上取决于您打算如何使用它。如需更多信息,FreeIPA 网站上有一个文档资源列表。

Logo

CentOS社区为您提供最前沿的新闻资讯和知识内容

更多推荐