第 6 章 配置 RHEL 主机以使用 AD 作为身份验证提供程序

作为系统管理员,您可以在不将主机加入 AD 的情况下,使用 Active Directory (AD) 作为 Red Hat Enterprise Linux (RHEL) 主机的身份验证供应商。

例如在以下情况下可以实现:

  • 您不想向 AD 管理员授予对启用和禁用主机的控制权。
  • 主机(可以是一个公司 PC)只表示被您公司中的某一用户使用。
重要

仅在很少情况下使用此方法。

考虑将系统完全加入 AD 或 Red Hat Identity Management (IdM)。将 RHEL 主机加入到域中可方便管理设置。如果您关注与将客户端直接加入 AD 中的客户端访问许可证,请考虑利用与 AD 信任协议中的 IdM 服务器。有关 IdM-AD 信任的更多信息,请参阅 规划 IdM 和 AD 之间的跨林信任,以及 在 IdM 和 AD 之间安装信任

此流程可让名为 AD_user 的用户使用 example.com 域中的活动目录(AD)用户数据库中设置的密码登录到 rhel_host 系统。在这个示例中,EXAMPLE.COM Kerberos realm 对应于 example.com 域。

先决条件

  • 您有访问 rhel_host 的 root 权限。
  • AD_user 用户帐户存在于 example.com 域中。
  • Kerberos realm 是 EXAMPLE.COM
  • rhel_host 尚未使用 realm join 命令加入到 AD。

流程

  1. 在本地创建 AD_user 用户帐户而不为其分配密码:

    # useradd AD_user
  2. 打开 /etc/nsswitch.conf 文件进行编辑,并确保该文件包含以下行:

    passwd:     sss files systemd
    group:      sss files systemd
    shadow:     files sss
  3. 打开 /etc/krb5.conf 文件进行编辑,并确保该文件包含以下部分和项目:

    # To opt out of the system crypto-policies configuration of krb5, remove the
    # symlink at /etc/krb5.conf.d/crypto-policies which will not be recreated.
    includedir /etc/krb5.conf.d/
    
    [logging]
        default = FILE:/var/log/krb5libs.log
        kdc = FILE:/var/log/krb5kdc.log
        admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
        dns_lookup_realm = false
        ticket_lifetime = 24h
        renew_lifetime = 7d
        forwardable = true
        rdns = false
        pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
        spake_preauth_groups = edwards25519
        default_realm = EXAMPLE.COM
        default_ccache_name = KEYRING:persistent:%{uid}
    
    [realms]
     EXAMPLE.COM = {
         kdc = ad.example.com
         admin_server = ad.example.com
     }
    
    [domain_realm]
     .example.com = EXAMPLE.COM
     example.com = EXAMPLE.COM
  4. 创建 /etc/sssd/sssd.conf 文件,并将以下部分和行插入到该文件中:

    [sssd]
        services = nss, pam
        domains = EXAMPLE.COM
    
    [domain/EXAMPLE.COM]
        id_provider = files
        auth_provider = krb5
        krb5_realm = EXAMPLE.COM
        krb5_server = ad.example.com
  5. 更改 /etc/sssd/sssd.conf 文件的权限:

    # chmod 600 /etc/sssd/sssd.conf
  6. 启动安全性系统服务守护进程(SSSD):

    # systemctl start sssd
  7. 启用 SSSD:

    # systemctl enable sssd
  8. 打开 /etc/pam.d/system-auth 文件,修改该文件使其包含以下部分和行:

    # Generated by authselect on Wed May  8 08:55:04 2019
    # Do not modify this file manually.
    
    auth        required                                     pam_env.so
    auth        required                                     pam_faildelay.so delay=2000000
    auth        [default=1 ignore=ignore success=ok]         pam_succeed_if.so uid >= 1000 quiet
    auth        [default=1 ignore=ignore success=ok]         pam_localuser.so
    auth        sufficient                                   pam_unix.so nullok try_first_pass
    auth        requisite                                    pam_succeed_if.so uid >= 1000 quiet_success
    auth        sufficient                                   pam_sss.so forward_pass
    auth        required                                     pam_deny.so
    
    account     required                                     pam_unix.so
    account     sufficient                                   pam_localuser.so
    account     sufficient                                   pam_succeed_if.so uid < 1000 quiet
    account     [default=bad success=ok user_unknown=ignore] pam_sss.so
    account     required                                     pam_permit.so
    
    password    requisite                                    pam_pwquality.so try_first_pass local_users_only
    password    sufficient                                   pam_unix.so sha512 shadow nullok try_first_pass use_authtok
    password    sufficient                                   pam_sss.so use_authtok
    password    required                                     pam_deny.so
    
    session     optional                                     pam_keyinit.so revoke
    session     required                                     pam_limits.so
    -session    optional                                     pam_systemd.so
    session     [success=1 default=ignore]                   pam_succeed_if.so service in crond quiet use_uid
    session     required                                     pam_unix.so
    session     optional                                     pam_sss.so
  9. /etc/pam.d/system-auth 文件的内容复制到 /etc/pam.d/password-auth 文件中。输入 yes 来确认覆盖文件的当前内容:

    # cp /etc/pam.d/system-auth /etc/pam.d/password-auth
    cp: overwrite '/etc/pam.d/password-auth'? yes

验证步骤

  1. AD_user 请求 Kerberos 票据 (TGT)。根据请求输入 AD_user 密码:

    # kinit AD_user
    Password for AD_user@EXAMPLE.COM:
  2. 显示获得的 TGT:

    # klist
    Ticket cache: KEYRING:persistent:0:0
    Default principal: AD_user@EXAMPLE.COM
    
    Valid starting     Expires            Service principal
    11/02/20 04:16:38  11/02/20 14:16:38  krbtgt/EXAMPLE.COM@EXAMPLE.COM
    	renew until 18/02/20 04:16:34

AD_user 已使用 EXAMPLE.COM Kerberos 域中的凭据成功登录到 rhel_host