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 测试使用 Dockerdocker_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 服务器,可以使用例如 firewalldiptables 来完成。

根据您的设置,您需要打开以下端口:

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
关于项目

FreeIPA Identity Management Server provisioning.

安装
ansible-galaxy install timorunge.freeipa_server
许可证
bsd-3-clause
下载
12.5k
拥有者