注:

在 Oracle Linux 上安装 FreeIPA 服务器

简介

FreeIPA 是适用于 Linux 网络环境的开源身份和验证管理系统。该服务器包括 389 Directory Server 作为中央数据存储,提供完整的多主 LDAPv3 功能。

除了本教程的范围之外,FreeIPA 还通过 ISC 绑定服务器提供用于单点登录验证的 MIT Kerberos、Dogtag 证书颁发机构以及可选的域名管理。

本教程说明如何安装 FreeIPA 和配置包含的 LDAP 目录。

目标

需要做哪些准备?

有关 FreeIPA 要求的详细信息,请参阅上游快速入门指南

设置实验室环境

注:使用空闲实验环境时,有关连接和其他使用说明,请参见Oracle Linux Lab Basics

  1. 打开终端并通过 ssh 连接到 freeipa-server 实例(如果尚未连接)。

    ssh oracle@<ip_address_of_instance>
    

确认服务器 HostName

FreeIPA 服务器需要有效的 DNS 配置。使用 ipa 命令行工具注册的客户机通过文件 /etc/ipa/default.conf 中定义的 xmlrpc_urldomain 参数查找服务器。

  1. 验证服务器的主机名。

    sudo hostname
    

    输出不应返回 localhostlocalhost6

确认全限定域名 (FQDN)。

对于在安装期间验证的 FQDN,FreeIPA 的限制为 64 个字符。如果 FQDN 超过 64 个字符,请使用 sudo hostnamectl set-hostname NAME,其中 NAME 是 FQDN,以将其缩短。

  1. 验证 FQDN 及其长度。

    hostname -f
    
    echo $(hostname -f) | wc -m
    

    注: FQDN 包含 freeipa.<RND_SUBNET>.linuxvirt.oraclevcn.com,其中 <RND_SUBNET> 是以字母 o 为前缀的 4 个字符的随机字符串。

确认名称解析。

  1. 获取服务器的 IP 地址。

    sudo ip addr show
    

    输出示例:

    [oracle@freeipa ~]$ sudo ip addr show
    ...
    2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:00:17:02:b3:9e brd ff:ff:ff:ff:ff:ff
        altname enp0s3
        inet 10.0.0.150/24 brd 10.0.0.255 scope global dynamic noprefixroute ens3
           valid_lft 85923sec preferred_lft 85923sec
        inet6 fe80::200:17ff:fe02:b39e/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    

    IPv4 地址显示在以 inet 开头的行上。

  2. 验证正向 DNS 配置。

    host $(hostname -f)
    

    输出示例:

    [oracle@freeipa ~]$ host $(hostname -f)
    freeipa.o6fb5.linuxvirt.oraclevcn.com has address 10.0.0.150
    

    验证正向 DNS 配置的另一种方法是使用 dig +short $(hostname -f) Ahostdig 都是 bind-utils 软件包的一部分,该软件包提供了用于查询 DNS 名称服务器的不同实用程序。

  3. 验证反向 DNS 配置(PTR 记录)。

    host $(hostname -i)
    

    输出示例:

    [oracle@freeipa ~]$ host $(hostname -i)
    150.0.0.10.in-addr.arpa domain name pointer freeipa.o6fb5.linuxvirt.oraclevcn.com.
    

    另一种方法是使用 dig +short -x $(hostname -i)

打开所需的防火墙端口

FreeIPA 要求打开多个端口,并且这些端口可用于与其服务通信。

服务 端口 协议
HTTP/HTTPS 80,443 TCP
LDAP/LDAP 389,636 TCP
Kerberos 88,464 TCP 和 UDP
DNS 53 TCP 和 UDP
非专业人员 123 UDP

Oracle Linux 提供了 freeipa-4 服务来打开这些必需的端口。有关详细信息,请参见 /usr/lib/firewalld/services/freeipa-4.xmlfreeipa-4 服务将替换过时的 freeipa-ldapfreeipa-ldaps 服务。

  1. 添加 firewalld 服务。

    sudo firewall-cmd --permanent --add-service=freeipa-4
    
    sudo firewall-cmd --reload
    

安装所需的程序包

  1. 为没有集成 DNS 服务的 FreeIPA 服务器安装软件包。

    sudo dnf install ipa-server -y
    

    注意:本教程不使用集成 DNS 服务。如果需要,将软件包 ipa-server-dns 添加到安装列表中。

安装和配置 FreeIPA 服务器

  1. 运行安装实用程序。

    sudo ipa-server-install
    

    该脚本首先提供安装日志文件位置以及 FreeIPA 服务器包含的内容摘要。

    输出示例:

    [oracle@freeipa ~]$ sudo ipa-server-install
       
    The log file for this installation can be found in /var/log/ipaserver-install.log
    ==============================================================================
    This program will set up the IPA Server.
    Version 4.9.8
       
    This includes:
      * Configure a stand-alone CA (dogtag) for certificate management
      * Configure the NTP client (chronyd)
      * Create and configure an instance of Directory Server
      * Create and configure a Kerberos Key Distribution Center (KDC)
      * Configure Apache (httpd)
      * Configure SID generation
      * Configure the KDC to enable PKINIT
    ...
    

    然后,脚本使用多个提示设置服务器的配置。终端显示对括号内的提示的缺省响应,按 Enter 接受缺省响应。

  2. 接受 no 的默认响应以配置集成 DNS 服务。

    Do you want to configure integrated DNS (BIND)? [no]:
    
  3. 接受默认主机名、域名和领域名称。

    这些是在本实验开始时验证的值。建议领域名称与主 DNS 域名匹配,全部为大写字母。

    Enter the fully qualified domain name of the computer
    on which you're setting up server software. Using the form
    <hostname>.<domainname>
    Example: master.example.com.
    
    
    Server host name [freeipa.o6fb5.linuxvirt.oraclevcn.com]: 
    
    The domain name has been determined based on the host name.
    
    Please confirm the domain name [o6fb5.linuxvirt.oraclevcn.com]: 
    
    The kerberos protocol requires a Realm name to be defined.
    This is typically the domain name converted to uppercase.
    
    Please provide a realm name [O6FB5.linuxvirt.ORACLEVCN.COM]:
    
  4. 输入并确认目录服务器超级用户和 FreeIPA admin 用户的密码。

    目录服务器超级用户映射到目录中的 cn=Directory Manager

    Certain directory server operations require an administrative user.
    This user is referred to as the Directory Manager and has full access
    to the Directory for system management tasks and will be added to the
    instance of directory server created for IPA.
    The password must be at least 8 characters long.
    
    Directory Manager password: 
    Password (confirm): 
    
    The IPA server requires an administrative user, named 'admin'.
    This user is a regular system account used for IPA server administration.
    
    IPA admin password: 
    Password (confirm): 
    
  5. 接受 NETBIOS 域名和配置时间的默认值。

    NetBIOS domain name [O6FB5]: 
    
    Do you want to configure chrony with NTP server or pool address? [no]:
    
  6. 该脚本显示服务器配置的摘要。

  7. 输入 yes 以接受服务器配置。

    Continue to configure the system with these values? [no]: yes
    
  8. 该脚本将继续配置服务器。

    完成此操作可能需要几分钟的时间。

    ...
    Client configuration complete.
    The ipa-client-install command was successful
    
    Please add records in this file to your DNS system: /tmp/ipa.system.records.mv9i0ec2.db
    ==============================================================================
    Setup complete
    
    Next steps:
    	1. You must make sure these network ports are open:
    		TCP Ports:
    		  * 80, 443: HTTP/HTTPS
    		  * 389, 636: LDAP/LDAPS
    		  * 88, 464: kerberos
    		UDP Ports:
    		  * 88, 464: kerberos
    		  * 123: ntp
    
    	2. You can now obtain a kerberos ticket using the command: 'kinit admin'
    	   This ticket will allow you to use the IPA tools (e.g., ipa user-add)
    	   and the web user interface.
    
    Be sure to back up the CA certificates stored in /root/cacert.p12
    These files are required to create replicas. The password for these
    files is the Directory Manager password
    The ipa-server-install command was successful
    

    完成后,脚本将提供:

    • 摘要。
    • 要添加到 DNS 系统的记录列表。
    • 建议备份生成的 CA 证书。

    所需的网络端口已使用 freeipa-4 firewalld 服务打开。

测试 FreeIPA 服务器

FreeIPA 安装包括命令行客户机和用于与服务器交互的 WebUI。使用 WebUI 超出本教程的范围。

访问命令行界面 (CLI)

  1. 根据 Kerberos 领域验证 admin 用户。

    kinit admin
    

    出现提示时,输入在安装和配置步骤期间创建的 admin 用户的密码。然后,kinit 命令将生成 Kerberos 票证。

  2. 列出票证的信息

    klist
    

    输出示例:

    [oracle@freeipa ~]$ sudo klist
    Ticket cache: KCM:0
    Default principal: admin@O6FB5.LINUXVIRT.ORACLEVCN.COM
    
    Valid starting       Expires              Service principal
    09/28/2022 14:05:46  09/29/2022 13:05:53  krbtgt/O6FB5.LINUXVIRT.ORACLEVCN.COM@O6FB5.LINUXVIRT.ORACLEVCN.COM
    
  3. 获取 FreeIPA 服务器上所有现有用户的列表。

    ipa user-find
    

    结果将返回 admin 用户,这是当前存在的唯一用户。

    输出示例:

    [oracle@freeipa ~]$ sudo ipa user-find
    --------------
    1 user matched
    --------------
      User login: admin
      Last name: Administrator
      Home directory: /home/admin
      Login shell: /bin/bash
      Principal alias: admin@O6FB5.LINUXVIRT.ORACLEVCN.COM, root@O6FB5.LINUXVIRT.ORACLEVCN.COM
      UID: 872200000
      GID: 872200000
      Account disabled: False
    ----------------------------
    Number of entries returned 1
    ----------------------------
    

安全设置和强化

以下是安全使用 FreeIPA 服务器的几种方法。

禁用匿名绑定数

FreeIPA LDAP 服务器启用匿名绑定作为默认值,从而公开特定的配置设置和目录值。

nsslapd-allow-anonymous-access 属性控制此行为。可接受的值包括:

建议在禁止匿名绑定时使用 rootdse 而不是 off,因为使用 off 还会阻止外部客户机检查服务器配置。非域客户机(如 LDAP 和 Web 客户机)通过读取根 DSE 文件以获得连接详细信息匿名连接。

  1. 检查是否启用了匿名绑定。

    ldapsearch -x -h $(hostname -f) -b dc=$RND_SUBNET,dc=linuxvirt,dc=oraclevcn,dc=com
    
    • -x 设置简单或匿名验证。
    • -h 设置 LDAP 服务器主机。
    • -b 设置用于搜索的基本 DN。

    密钥设置(包括 FreeIPA 服务器的基本 DN)存储在 /etc/ipa/default.conf 文件中。

    $RND_SUBNET 是自由实验室环境中设置的环境变量,表示 FQDN 中的 4 个字符随机化字符串。

    输出示例:

    ...
    # Default SMB Group, groups, accounts, o6fb5.linuxvirt.oraclevcn.com
    dn: cn=Default SMB Group,cn=groups,cn=accounts,dc=o6fb5,dc=linuxvirt,dc=oraclevc
     n,dc=com
    cn: Default SMB Group
    description: Fallback group for primary group RID, do not add users to this gr
     oup
    objectClass: top
    objectClass: ipaobject
    objectClass: posixgroup
    objectClass: ipantgroupattrs
    ipaUniqueID: 0c9cf178-4324-11ed-bf0b-02001704fe22
    gidNumber: 921600001
    ipaNTSecurityIdentifier: S-1-5-21-2697967063-3375457457-2974965896-1001
      
    # search result
    search: 2
    result: 0 Success
      
    # numResponses: 110
    # numEntries: 109
    

    搜索结果返回 LDAP 目录的整个树。

  2. 修改配置并禁用匿名绑定。

    ldapmodify 命令接受包含对标准输入执行 make 或读取操作的更改的 LDIF 文件。

    1. 创建 LDIF 文件。

      cat << 'EOF' | tee ~/disable_anon_bind.ldif > /dev/null
      dn: cn=config
      changetype: modify
      replace: nsslapd-allow-anonymous-access
      nsslapd-allow-anonymous-access: rootdse
      EOF
      

      可以通过单独在一行上使用短划线 - 字符分隔多个属性来更改这些属性。每次附加更改均从属性更改类型开始,并提供必需的属性。

    2. 应用 LDIF 更改。

      ldapmodify -x -D "cn=Directory Manager" -W -H ldap:// -ZZ -f ~/disable_anon_bind.ldif
      
      • -x 设置简单或匿名验证。
      • -D 设置绑定 DN。
      • -W 提示输入 LDAP admin 口令。
      • -H 使用 LDAP 统一资源标识符 (Uniform Resource Identifier,URI) 进行连接,而不是使用 LDAP 服务器主机进行连接。
      • -ZZ 启动 TLS 请求并强制成功响应。

      注:由于使用自签名证书,因此需要 -ZZ

      输出示例:

      [oracle@freeipa ~]$ ldapmodify -x -D "cn=Directory Manager" -W -H ldap:// -ZZ -f ~/disable_anon_bind.ldif
      Enter LDAP Password: 
      modifying entry "cn=config"
      
    3. 重新启动 FreeIPA 服务器。

      sudo systemctl restart ipa.service
      
  3. 通过匿名查询目录来验证修改。

    ldapsearch -x -h $(hostname -f) -b dc=$RND_SUBNET,dc=linuxvirt,dc=oraclevcn,dc=com
    

    请注意响应 Anonymous access is not allowed

    输出示例:

    [oracle@freeipa ~]$ ldapsearch -x -h freeipa.o6fb5.linuxvirt.oraclevcn.com -b dc=o6fb5,dc=linuxvirt,dc=oraclevcn,dc=com
    # extended LDIF
    #
    # LDAPv3
    # base <dc=o6fb5,dc=linuxvirt,dc=oraclevcn,dc=com> with scope subtree
    # filter: (objectclass=*)
    # requesting: ALL
    #
      
    # search result
    search: 2
    result: 48 Inappropriate authentication
    text: Anonymous access is not allowed.
      
    # numResponses: 1
    
  4. 使用验证验证验证验证查询目录是否有效。

    ldapsearch -D uid=admin,cn=users,cn=accounts,dc=$RND_SUBNET,dc=linuxvirt,dc=oraclevcn,dc=com -W -H ldap://
    

    输出示例:

    ...
    # freeipa.o6fb5.linuxvirt.oraclevcn.com + 389, subordinate-ids, dna, ipa, etc, 
     o6fb5.linuxvirt.oraclevcn.com
    dn: dnaHostname=freeipa.o6fb5.linuxvirt.oraclevcn.com+dnaPortNum=389,cn=subord
     inate-ids,cn=dna,cn=ipa,cn=etc,dc=o6fb5,dc=linuxvirt,dc=oraclevcn,dc=com
    objectClass: dnaSharedConfig
    objectClass: top
    dnaHostname: freeipa.o6fb5.linuxvirt.oraclevcn.com
    dnaPortNum: 389
    dnaSecurePortNum: 636
    dnaRemainingValues: 32766
      
    # search result
    search: 2
    result: 0 Success
      
    # numResponses: 475
    # numEntries: 474
    

验证 TLS 是否已启用

从 Oracle Linux 8 开始,FreeIPA 使用系统范围的加密策略。有关更多详细信息,请参见 crypto-policies(7) 手册页。

  1. 列出当前系统范围的加密策略。

    cat /etc/crypto-policies/config
    
  2. 列出加密策略详细信息。

    cat /usr/share/crypto-policies/$(cat /etc/crypto-policies/config)/nss.txt
    

    输出示例:

    [oracle@freeipa ~]$ cat /usr/share/crypto-policies/$(cat /etc/crypto-policies/config)/nss.txt
    library=
    name=Policy
    NSS=flags=policyOnly,moduleDB
    config="disallow=ALL allow=HMAC-SHA256:HMAC-SHA1:HMAC-SHA384:HMAC-SHA512:CURVE25519:SECP256R1:SECP384R1:SECP521R1:aes256-gcm:chacha20-poly1305:aes256-cbc:aes128-gcm:aes128-cb   > c:SHA256:SHA384:SHA512:SHA224:ECDHE-RSA:ECDHE-ECDSA:RSA:DHE-RSA:ECDSA:RSA-PSS:RSA-PKCS:tls-version-min=tls1.2:dtls-version-min=dtls1.2:DH-MIN=2048:DSA-MIN=2048:RSA-MIN=2048"
    

    请注意,DEFAULT 策略至少使用 TLS 1.2

查看 FreeIPA 服务器状态

FreeIPA 服务器包含用于查看已配置服务的状态的 ipactl 实用程序。同一实用程序还可以启动、停止和重新启动整个 FreeIPA 服务器。如果需要 startstoprestart 个组件,请使用 systemctl COMMAND name.service

  1. 显示所有服务的状态。

    sudo ipactl status
    

    输出示例:

    [oracle@freeipa ~]$ sudo ipactl status
    Directory Service: RUNNING
    krb5kdc Service: RUNNING
    kadmin Service: RUNNING
    httpd Service: RUNNING
    ipa-custodia Service: RUNNING
    pki-tomcatd Service: RUNNING
    ipa-otpd Service: RUNNING
    ipa: INFO: The ipactl command was successful
    

    使用 sudo ipactl --help 可查看其他命令选项。

创建用户和组

完成 FreeIPA 服务器的基本安装和配置后,下一步是处理身份管理,其中包括创建用户和组。在执行此操作之前,生成 Kerberos 令牌。

  1. 为用户 admin 生成令牌。

    kinit admin
    
  2. 获取现有令牌的列表。

    klist
    

    默认情况下,Kerberos 令牌有效期为 24 小时。由于以前在 "Access the Command-Line Interface (CLI)" 步骤中运行了这些命令,因此列表将显示原始标记,而不是创建新标记。

  3. 添加新用户组。

    FreeIPA 将用户组定义为具有标准密码策略、权限和其他特征的一组用户。

    用户组可以包括:

    • 用户
    • 其他用户组
    • 存在于 FreeIPA 外部的外部用户

   ipa group-add foo

输出示例:

[oracle@freeipa ~]$ ipa group-add foo
-----------------
Added group "foo"
-----------------
  Group name: foo
  GID: 1326400003

FreeIPA 服务器支持三种组类型:

foo 是 POSIX 用户组。要指定不同的组类型,请使用以下选项之一:

   ipa group-find

输出示例:

[oracle@freeipa ~]$ ipa group-find
----------------
5 groups matched
----------------
  Group name: admins
  Description: Account administrators group
  GID: 1326400000
   
  Group name: editors
  Description: Limited admins who can edit other users
  GID: 1326400002
   
  Group name: foo
  GID: 1326400003
   
  Group name: ipausers
  Description: Default group for all users
  
  Group name: trust admins
  Description: Trusts administrators group
----------------------------
Number of entries returned 5
----------------------------

FreeIPA 服务器在安装期间创建以下用户组。

警告:请勿删除 admin 组,因为它包含默认的 admin 用户。FreeIPA 服务器要求 admin 组正常运行。

  1. 添加新的用户帐户。

    ipa user-add
    

    该命令运行交互式脚本,提示您提供创建用户帐户所需的最少数据集 FreeIPA。

    输出示例:

    [oracle@freeipa ~]$ ipa user-add
    First name: Oracle
    Last name: User
    User login [ouser]: oracle
    -------------------
    Added user "oracle"
    -------------------
      User login: oracle
      First name: Oracle
      Last name: User
      Full name: Oracle User
      Display name: Oracle User
      Initials: OU
      Home directory: /home/oracle
      GECOS: Oracle User
      Login shell: /bin/sh
      Principal name: oracle@OD1F5.LINUXVIRT.ORACLEVCN.COM
      Principal alias: oracle@OD1F5.LINUXVIRT.ORACLEVCN.COM
      Email address: oracle@od1f5.linuxvirt.oraclevcn.com
      UID: 1326400004
      GID: 1326400004
      Password: False
      Member of groups: ipausers
      Kerberos keys available: False
    

    或者,运行带有多个选项的命令允许在非交互模式下创建用户帐户。要获取可用选项的列表,请运行 ipa user-add --help

  2. 将新用户添加到新用户组。

    ipa group-add-member foo --users=oracle
    

    输出示例:

    [oracle@freeipa ~]$ ipa group-add-member foo --users=oracle
      Group name: foo
      GID: 1326400003
      Member users: oracle
    -------------------------
    Number of members added 1
    -------------------------
    

ipa 命令的功能比所显示的功能更多。有关其他命令,请运行 ipa help commands 以获得完整列表。

汇总

此练习结束,介绍了安装和使用 FreeIPA 服务器的基本知识。使用下面的链接探索更多内容,或者阅读产品手册页面,因为 FreeIPA 除了这里介绍的内容之外还有许多其他功能。

详细信息

请参阅其他相关资源:

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心