20.8. 在 IdM 客户端上启用 GSSAPI 身份验证,并为 sudo 强制使用 Kerberos 身份验证指示符

以下流程描述了通过 pam_sss_gss.so PAM 模块在 IdM 客户端上为 sudosudo -i 命令启用通用安全服务应用程序接口(GSSAPI)身份验证。此外,只有使用智能卡登录的用户才能使用 Kerberos 票据对这些命令进行身份验证。

注意

您可以将此流程用作模板,来其他 PAM 感知服务配置 带有 SSSD 的 GSSAPI 身份验证,并进一步限制对拥有附加到 Kerberos 票据的特定身份验证指示符的用户的访问。

先决条件

  • 您已为 IdM 用户创建了一个应用于 IdM 主机的 sudo 规则。在本例中,您已创建了 idm_user_reboot sudo 规则,来为 idm_user 帐户授予在 idmclient 主机上运行 /usr/sbin/reboot 命令的权限。
  • 您已为 idmclient 主机配置了智能卡验证。
  • idmclient 主机正在运行 RHEL 8.4 或更高版本。
  • 您需要 root 权限来修改 /etc/pam.d/ 目录中的 /etc/sssd/sssd.conf 文件和 PAM 文件。

流程

  1. 打开 /etc/sssd/sssd.conf 配置文件:
  2. 将以下条目添加到 [domain/<domain_name>] 部分中。

    [domain/<domain_name>]
    pam_gssapi_services = sudo, sudo-i
    pam_gssapi_indicators_map = sudo:pkinit, sudo-i:pkinit
  3. 保存并关闭 /etc/sssd/sssd.conf 文件。
  4. 重启 SSSD 服务以载入配置更改。

    [root@idmclient ~]# systemctl restart sssd
  5. 打开 /etc/pam.d/sudo PAM 配置文件。
  6. 添加下列条目,来作为 /etc/pam.d/sudo 文件中 auth 部分的第一行。

    #%PAM-1.0
    auth sufficient pam_sss_gss.so
    auth       include      system-auth
    account    include      system-auth
    password   include      system-auth
    session    include      system-auth
  7. 保存并关闭 /etc/pam.d/sudo 文件。
  8. 打开 /etc/pam.d/sudo-i PAM 配置文件。
  9. 添加下列条目,来作为 /etc/pam.d/sudo-i 文件中 auth 部分的第一行。

    #%PAM-1.0
    auth sufficient pam_sss_gss.so
    auth       include      sudo
    account    include      sudo
    password   include      sudo
    session    optional     pam_keyinit.so force revoke
    session    include      sudo
  10. 保存并关闭 /etc/pam.d/sudo-i 文件。

验证步骤

  1. idm_user 帐户身份登录到主机,并使用智能卡进行身份验证。

    [root@idmclient ~]# ssh -l idm_user@idm.example.com localhost
    PIN for smart_card
  2. 验证您是否有一个智能卡用户的票据授予票据。

    [idm_user@idmclient ~]$ klist
    Ticket cache: KEYRING:persistent:1358900015:krb_cache_TObtNMd
    Default principal: idm_user@IDM.EXAMPLE.COM
    
    Valid starting       Expires              Service principal
    02/15/2021 16:29:48  02/16/2021 02:29:48  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    	renew until 02/22/2021 16:29:44
  3. 显示允许 idm_user 帐户执行的 sudo 规则。

    [idm_user@idmclient ~]$ sudo -l
    Matching Defaults entries for idmuser on idmclient:
        !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
        env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
        env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
        env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
        env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
        env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME",
        secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    User idm_user may run the following commands on idmclient:
        (root) /usr/sbin/reboot
  4. 使用 sudo 而不指定密码来重新启动机器。

    [idm_user@idmclient ~]$ sudo /usr/sbin/reboot