介绍
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 客户端。
先决条件
要遵循本教程,您将需要:
- 一台具有至少 1 GB RAM 的 CentOS 7 服务器。 默认情况下,CentOS 7 只使用 root 用户。 因为我们将使用 FreeIPA 来管理用户,所以没有必要手动添加另一个用户。 您可以简单地以 root 用户身份遵循本教程。
- 在您的服务器上启用防火墙,您可以按照 CentOS 7 附加推荐步骤教程 中的防火墙步骤进行设置。 强烈建议这样做,因为 FreeIPA 处理敏感的用户凭据。
- 用于服务器和客户端的完全注册的域。 您可以在 Namecheap 上购买一个或在 Freenom 上免费获得一个。
- 为您的服务器设置了以下 DNS 记录。 您可以关注 this hostname tutorial 了解如何添加它们的详细信息。
- 带有您的服务器名称的 A 记录(例如
ipa.example.com
) 指向您的服务器的 IPv4 地址。 - 如果您希望通过 IPv6 访问您的服务器,则您的服务器名称指向您服务器的 IPv6 地址的 AAAA 记录。
- 带有您的服务器名称的 A 记录(例如
- 可选地,与
yum install nano
一起安装的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
。
注意:如果您在局域网内的服务器上设置 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 服务器
我们可以继续安装 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 中,以管理员用户身份登录。 Username 将是 admin 并且 Password 将是您之前设置的 IPA 管理员密码。 页面顶部会显示 Authenticating... 然后您将被带到 IPA 主页面,如下所示:
最后,让我们通过添加新用户来探索 FreeIPA 的一些功能。
第 6 步 — 配置 IPA 用户
FreeIPA 有一套非常广泛的用户管理和策略功能。 与标准 Unix 用户类似,FreeIPA 用户可以属于组。 可以根据策略允许或拒绝组或单个用户访问主机(客户端计算机)或主机组(主机组)。 FreeIPA 还可以管理 sudo 访问; 可以授予组或用户对主机或主机组的 sudo 访问权限。
本教程将介绍如何添加新用户以帮助您入门。
要添加用户,请单击 Identity 选项卡,然后单击 Users。 这将显示一个用户表。 点击表格上方的【X10X】+添加【X19X】按钮添加新用户。 在打开的表单中填写必填字段(如名字和姓氏),然后单击 添加 按原样添加用户或单击 添加和编辑 以配置高级详细信息。
还可以通过单击原始表中的用户来访问高级详细信息。 这是管理员在查看用户详细信息时看到的内容:
普通用户也可以登录 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 网站上有一个 文档资源列表 。