timorunge.freeipa_server
freeipa_server
此角色用于根据您的需求安装和配置 FreeIPA 服务器。
该剧本负责初始化 Kerberos 管理用户(用户名:admin
,密码是您在 freeipa_server_admin_password
中设置的密码)。
结合 freeipa
(Github),可以(并经过测试)在 Ubuntu >= 18.04 上使用 freeipa_server
的最新版本的 FreeIPA(请查看 示例部分)。
不支持 Ubuntu 20.04
Ubuntu 20.04 没有 freeipa-server 这个包。
需求
此角色需要 Ansible 2.5.0 或更高版本。
您可以使用 pip 安装(并定义)一个稳定版本:
pip install ansible==2.7.7
所有平台需求列在元数据文件中。
安装
ansible-galaxy install timorunge.freeipa_server
角色变量
为了让此角色运行(不需要自定义),需要设置以下变量。 这些变量没有默认值:
# 管理用户 Kerberos 密码 - 至少 8 个字符
# 类型:字符串
freeipa_server_admin_password: Passw0rd
# IPA 部署的主要 DNS 域名
# 类型:字符串
freeipa_server_domain: example.com
# 目录管理器密码 - 至少 8 个字符
# 类型:字符串
freeipa_server_ds_password: Passw0rd
# 该机器的主机名(完全限定域名)
# 类型:字符串
freeipa_server_fqdn: ipa.example.com
# 主服务器 IP 地址
# 类型:字符串
freeipa_server_ip: 172.20.0.2
# IPA 部署的 Kerberos 域名
# 类型:字符串
freeipa_server_realm: EXAMPLE.COM
可以传递给此角色的变量及其简要说明如下。(有关所有变量,请查看 defaults/main.yml)
# 启用/禁用管理 RedHat EPEL 存储库
# 类型:布尔值
freeipa_server_enable_epel_repo: true
# 自动在 /etc/hosts 中设置条目
# 类型:布尔值
freeipa_server_manage_host: true
# 选择 FreeIPA 服务器安装类型(主/副本)
# 类型:字符串
freeipa_server_type: master
# 主 FreeIPA 服务器的完全限定域名
# 类型:字符串
freeipa_server_master_fqdn: ''
# FreeIPA 安装的基本命令
# 类型:字符串
freeipa_server_install_base_command: ipa-{{ 'server' if freeipa_server_type == 'master' else 'replica' }}-install --unattended {{ '--server=' + freeipa_server_master_fqdn if freeipa_server_type == 'replica' }}
# 默认的 FreeIPA 安装选项
# 类型:列表
freeipa_server_install_options:
- "--realm={{ freeipa_server_realm }}"
- "--domain={{ freeipa_server_domain }}"
- "--setup-dns"
- "--ds-password={{ freeipa_server_ds_password }}"
- "--admin-password={{ freeipa_server_admin_password }}"
- "--mkhomedir"
- "--hostname={{ freeipa_server_fqdn | default(ansible_fqdn) }}"
- "--ip-address={{ freeipa_server_ip }}"
- "--no-host-dns"
- "--no-ntp"
- "--idstart=5000"
- "--ssh-trust-dns"
- "--forwarder=8.8.8.8"
- "--auto-forwarders"
示例
为了保持文档简洁,安装选项被省略。您可以在 此文档 或 ipa-server-install 的在线手册 中找到安装选项。
1) 使用默认设置安装 FreeIPA 服务器作为主服务器
- hosts: freeipa-server
vars:
freeipa_server_admin_password: Passw0rd
freeipa_server_domain: example.com
freeipa_server_ds_password: Passw0rd
freeipa_server_fqdn: ipa-master.example.com
freeipa_server_ip: 172.20.0.2
freeipa_server_realm: EXAMPLE.COM
roles:
- timorunge.freeipa_server
2) 使用默认设置安装 FreeIPA 服务器作为副本
- hosts: freeipa-server
vars:
freeipa_server_type: replica
freeipa_server_master_fqdn: ipa-master.example.com
freeipa_server_admin_password: Passw0rd
freeipa_server_domain: example.com
freeipa_server_ds_password: Passw0rd
freeipa_server_fqdn: ipa-replica.example.com
freeipa_server_ip: 172.20.0.3
freeipa_server_realm: EXAMPLE.COM
roles:
- timorunge.freeipa_server
3) 安装 FreeIPA 服务器并自动在所有(IPv4)网络接口上启用它
如果您希望使用 freeipa_server_manage_host
,仍然应该设置 freeipa_server_ip
。
- hosts: freeipa-server
vars:
freeipa_server_admin_password: Passw0rd
freeipa_server_domain: example.com
freeipa_server_ds_password: Passw0rd
freeipa_server_fqdn: ipa.example.com
freeipa_server_ip: 172.20.0.3
freeipa_server_realm: EXAMPLE.COM
freeipa_server_install_options:
- "--ip-address={{ ansible_all_ipv4_addresses | join(' --ip-address=') }}"
roles:
- timorunge.freeipa_server
4) 使用自定义安装选项安装 FreeIPA 服务器
- hosts: freeipa-server
vars:
freeipa_server_admin_password: Passw0rd
freeipa_server_domain: example.com
freeipa_server_ds_password: Passw0rd
freeipa_server_fqdn: ipa.example.com
freeipa_server_ip: 172.20.0.2
freeipa_server_realm: EXAMPLE.COM
freeipa_server_install_options:
- "--realm={{ freeipa_server_realm }}"
- "--domain={{ freeipa_server_domain }}"
- "--setup-dns"
- "--ds-password {{ freeipa_server_ds_password }}"
- "--admin-password {{ freeipa_server_admin_password }}"
- "--mkhomedir"
- "--hostname={{ freeipa_server_fqdn | default(ansible_fqdn) }}"
- "--ip-address={{ freeipa_server_ip }}"
- "--ip-address=10.0.0.2"
- "--ip-address=192.168.20.2"
- "--no-host-dns"
- "--no-ntp"
- "--idstart=5000"
- "--ssh-trust-dns"
- "--forwarder=8.8.8.8"
- "--auto-forwarders"
- "--no-ui-redirect"
- "--no-ssh"
- "--no-sshd"
roles:
- timorunge.freeipa_server
FreeIPA 服务器安装选项
ipa-server-install 的安装选项概述(4.6.4)。
使用方法:ipa-server-install [选项]
选项:
--version 显示程序的版本号并退出
-h, --help 显示此帮助信息并退出
-U, --unattended 不干预的(卸)安装永远不会提示用户
--uninstall 卸载现有安装。卸载可以使用 --unattended 选项运行
基本选项:
-p DM_PASSWORD, --ds-password=DM_PASSWORD
目录管理器密码
-a ADMIN_PASSWORD, --admin-password=ADMIN_PASSWORD
管理用户 Kerberos 密码
--ip-address=IP_ADDRESS
主服务器 IP 地址。此选项可以使用多次
-n DOMAIN_NAME, --domain=DOMAIN_NAME
IPA 部署的主要 DNS 域名(不一定与当前主机名相关)
-r REALM_NAME, --realm=REALM_NAME
IPA 部署的 Kerberos 域名(通常是主要 DNS 域名的大写名称)
--hostname=HOST_NAME
此主机的完全限定名称
--ca-cert-file=FILE
包含用于服务证书文件的 CA 证书的文件
--no-host-dns 安装过程中不使用 DNS 进行主机名查找
服务器选项:
--setup-adtrust 配置 AD 信任能力
--setup-kra 配置 dogtag KRA
--setup-dns 配置带有我们区域的 bind
--idstart=IDSTART ID 范围的起始值(默认随机)
--idmax=IDMAX ID 范围的最大值(默认:
idstart+199999)
--no-hbac-allow 不安装 allow_all HBAC 规则
--no-pkinit 禁用 pkinit 设置步骤
--no-ui-redirect 不自动重定向到 Web 用户界面
--dirsrv-config-file=FILE
用于在安装目录服务器实例期间修改 dse.ldif 配置的 LDIF 文件的路径
SSL 证书选项:
--dirsrv-cert-file=FILE
包含目录服务器 SSL 证书和私钥的文件
--http-cert-file=FILE
包含 Apache 服务器 SSL 证书和私钥的文件
--pkinit-cert-file=FILE
包含 Kerberos KDC SSL 证书和私钥的文件
--dirsrv-pin=PIN 解锁目录服务器私钥的密码
--http-pin=PIN 解锁 Apache 服务器私钥的密码
--pkinit-pin=PIN 解锁 Kerberos KDC 私钥的密码
--dirsrv-cert-name=NAME
要安装的目录服务器 SSL 证书的名称
--http-cert-name=NAME
要安装的 Apache 服务器 SSL 证书的名称
--pkinit-cert-name=NAME
要安装的 Kerberos KDC SSL 证书的名称
客户端选项:
--mkhomedir 在用户首次登录时为其创建主目录
-N, --no-ntp 不配置 ntp
--ssh-trust-dns 配置 OpenSSH 客户端以信任 DNS SSHFP 记录
--no-ssh 不配置 OpenSSH 客户端
--no-sshd 不配置 OpenSSH 服务器
--no-dns-sshfp 不自动创建 DNS SSHFP 记录
证书系统选项:
--external-ca 为要由外部 CA 签名的 IPA CA 证书生成 CSR
--external-ca-type={generic,ms-cs}
外部 CA 的类型
--external-ca-profile=EXTERNAL_CA_PROFILE
指定要在外部 CA 使用的证书配置文件/模板
--external-cert-file=FILE
包含 IPA CA 证书和外部 CA 证书链的文件
--subject-base=SUBJECT_BASE
证书主题基准(默认 O=<realm-name>)。
RDN 是 LDAP 顺序(最特定的 RDN 先行)。
--ca-subject=CA_SUBJECT
CA 证书主题 DN(默认 CN=Certificate
Authority,O=<realm-name>)。RDN 是 LDAP 顺序
(最特定的 RDN 先行)。
DNS 选项:
--allow-zone-overlap
即使 DNS 区域已存在,也要创建 DNS 区域
--reverse-zone=REVERSE_ZONE
要使用的反向 DNS 区域。此选项可以使用多次
--no-reverse 不创建新的反向 DNS 区域
--auto-reverse 创建必要的反向区域
--zonemgr=ZONEMGR DNS 区域管理器电子邮件地址。 默认为
hostmaster@DOMAIN
--forwarder=FORWARDERS
添加 DNS 转发器。此选项可以使用多次
--no-forwarders 不添加任何 DNS 转发器,而是使用根服务器
--auto-forwarders 使用 /etc/resolv.conf 中配置的 DNS 转发器
--forward-policy={first,only}
全球转发器的 DNS 转发策略
--no-dnssec-validation
禁用 DNSSEC 验证
AD 信任选项:
--enable-compat 启用老客户端的受信任域支持
--netbios-name=NETBIOS_NAME
IPA 域的 NetBIOS 名称
--rid-base=RID_BASE
映射 UID 和 GID 到 RID 的起始值
--secondary-rid-base=SECONDARY_RID_BASE
映射 UID 和 GID 到 RID 的二级范围的起始值
卸载选项:
--ignore-topology-disconnect
不检查服务器卸载是否断开拓扑(域级别 1+)
--ignore-last-of-role
不检查服务器卸载是否移除最后的 CA/DNS 服务器或 DNSSec 主(域级别 1+)
日志记录和输出选项:
-v, --verbose 打印调试信息
-d, --debug --verbose 的别名(已弃用)
-q, --quiet 仅输出错误
--log-file=FILE 日志记录到指定文件
测试
测试使用 Vagrant 进行 (安装 Vagrant),它会启动以下虚拟机:
- EL
- 7
- Fedora
- 26
- 27
- Ubuntu
- 16.04 LTS (Xenial Xerus)
- 17.10 (Artful Aardvark)
- 18.04 LTS (Bionic Beaver)
在所有虚拟机上安装了最新的 Ansible 稳定版本,并在本地应用 测试剧本。
有关进一步的细节和其他检查,请查看 Vagrant 入口点。
# 在所有可用的 Vagrant 机器上进行测试:
# 这需要一些时间。喝杯咖啡。或者两杯。或者四十二杯。
cd tests
vagrant up --parallel && vagrant halt
for h in $(vagrant global-status --prune | grep freeipa_server | awk '{print $2}') ; do echo ${h} ; vagrant up --provision ${h} ; vagrant ssh ${h} -c "sudo /vagrant/vagrant-entrypoint.sh" && (echo "$(date): ${h}: pass" >> tests/results.log) || (echo "$(date): ${h}: fail" >> tests/results.log) ; vagrant halt ${h} ; done
vagrant destroy -f
如果 Vagrant 无法挂载目录,则应确保您已安装 VirtualBox 客户端增强功能。
Travis 测试使用 Docker 和 docker_test_runner 进行。Travis 上的测试执行语法检查和 lint 检查。
有关进一步的细节和其他检查,请查看 docker_test_runner 配置 和 Docker 入口点。
# 本地测试:
curl https://raw.githubusercontent.com/timorunge/docker-test-runner/master/install.sh | sh
./docker_test_runner.py -f tests/docker_test_runner.yml
安全
此剧本不负责保护 FreeIPA 服务器,可以使用例如 firewalld 或 iptables 来完成。
根据您的设置,您需要打开以下端口:
TCP 端口:
- 80, 443: HTTP/HTTPS
- 389, 636: LDAP/LDAPS
- 88, 464: Kerberos
- 53: BIND
UDP 端口:
- 88, 464: Kerberos
- 53: BIND
备份
请确保备份存储在 /root/cacert.p12 中的 CA 证书。这些文件在创建副本时是必需的。 这些文件的密码是目录管理器的密码(freeipa_server_ds_password
)。
在 FreeIPA 中,您还可以找到一个关于常见主题的 备份与恢复 页面。
有一个 Ansible 角色可以执行一些基本备份:FreeIPA 服务器备份 (Github Repo)。
依赖
无
许可证
BSD 3-Clause "New" or "Revised" License
作者信息
- Timo Runge