Kerberos

sssd 活動目錄密碼集成不起作用

  • February 26, 2020

我們正在使用下面的配置設置 sssd 以與活動目錄一起使用。

我們不使用屬性映射,因為我們想使用 AD ldap 對像中定義的屬性,例如自定義 uid、unixHomeDirectory 和公鑰等。

sssd.conf:

[sssd]
domains = company.domain
config_file_version = 2
services = nss, pam, sudo, ssh
debug_level = 6

[domain/sew.online]
ad_hostname = EXAMPLESERVER01 #This is templated using ansible
ad_domain = company.domain
krb5_realm = COMPANY.DOMAIN
krb5_store_password_if_offline = true
use_fully_qualified_names = false
id_provider = ad
auth_provider = ad
access_provider = ad
chpass_provider = ad
lookup_family_order = ipv4_only
cache_credentials = true
dns_discovery_domain = {{ prod_domain_name }}
create_homedir = true
auto_private_groups = true
ad_gpo_access_control = permissive
ad_gpo_cache_timeout = 30
ad_site = SITENAME
case_sensitive = false
enumerate = false
default_shell = /bin/bash
ldap_schema = ad
ldap_id_mapping = False
ldap_user_shell = loginShell
ldap_user_principal = samAccountName
ldap_user_ssh_public_key = altSecurityIdentities
ldap_user_home_directory = unixHomeDirectory
fallback_homedir = /home/%u

ldap_force_upper_case_realm = true
ldap_purge_cache_timeout = 0
ldap_account_expire_policy = ad
ldap_group_search_base = DN=etc...
ldap_user_search_base = DN=etc...
debug_level = 6

[nss]
fallback_homedir = /home/%u
reconnection_retries = 3
debug_level = 6

[pam]
offline_credentials_expiration = 3
offline_failed_login_attempts = 10
offline_failed_login_delay = 30
pam_verbosity = 3
pam_id_timeout = 10
pam_pwd_expiration_warning = 30
reconnection_retries = 3
debug_level = 6

krb5.conf

[logging]
default = FILE:/var/log/krb5libs.log

[libdefaults]
default_realm = COMPANY.DOMAIN
ticket_lifetime = 1d
renew_lifetime = 7d
dns_lookup_realm = true
dns_lookup_kdc = true
rdns = false
allow_weak_crypto = false
permitted_enctypes = aes256-cts-hmac-sha1-96
default_tkt_enctypes = aes256-cts
default_tgs_enctypes = aes256-cts
kdc_timesync = 1
kdc_timeout = 3000
forwardable = true
renewable = true
proxiable = true
udp_preference_limit = 1
rnds = false

這是各種 sssd 日誌文件的 pastebin: https ://pastebin.com/2P58uybg

日誌顯示已成功登錄(通過 sshd 和公鑰身份驗證)的域使用者嘗試執行sudo bash

除密碼外,廣告集成按需要工作:

  • 使用者可以使用他們的 sAMAccountName 登錄
  • 如果我執行 id username 你可以從活動目錄中看到使用者名的組及其 gid
  • 電腦對象(使用 adcli 添加)顯示在活動目錄中
  • 電腦 SPN 似乎存在有效的 kerberos 票證

作為故障排除步驟,我在域控制器上配置了 LDAPS,並在 ubuntu 的 ca 儲存中添加了一個內部受信任的證書。

我已經瀏覽了 sudo 日誌(非常詳細),它顯示該組已成功匹配並允許使用者 sudo。

任何幫助表示讚賞。

編輯:

主機作業系統:Ubuntu 18.04

nsswitch.conf

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat systemd sss
group:          compat systemd sss
shadow:         compat sss
gshadow:        files

hosts:          files dns
networks:       files

protocols:      db files
services:       db files sss
ethers:         db files
rpc:            db files

netgroup:       nis sss
sudoers:        files sss

為 ansible 角色安裝的軟體包:

  • adcli
  • krb5-使用者
  • 固態硬碟
  • sssd工具
  • sssd 廣告
  • sssd-krb5
  • python3-sss
  • libpam-sss
  • libnss-sss
  • libsss-南

查看提供的配置 sssd 嘗試從 LDAP/AD 獲取 sudo 規則,但似乎沒有收到任何相應的條目。

   13:38:35 [sssd[sudo]] [sudosrv_query_cache] (0x0200): Searching sysdb with [(&(objectClass=sudoRule)(|(sudoUser=ALL)(sudoUser=example_user@company.domain)(sudoUser=#1010101)(sudoUser=%example_leadership@company.domain)(sudoUser=%acl_win_admins@company.domain)(sudoUser=%example_team@company.domain)(sudoUser=%meta_managed_by_ansible@company.domain)(sudoUser=%example_web@company.domain)(sudoUser=%example_ols@company.domain)(sudoUser=%acl_jump_access@company.domain)))]
   13:38:35 [sssd[sudo]] [sudosrv_fetch_rules] (0x0400): Returning 0 rules for [example_user@company.domain@company.domain]

Ubuntu sssd sudo 故障排除指南說明了一些關於如何驗證 sudo 規則查詢的提示。 https://docs.pagure.org/SSSD.sssd/users/sudo_troubleshooting.html#what-to-look-for-in-the-logs

看起來您的配置缺少用於配置 sudo 規則的 ldap 詳細資訊的相應部分。由於 sssd 版本 1.11.5 應該可以使用sssd_provider = ad.

https://pagure.io/SSSD/sssd/issue/2256

最近的手冊頁狀態: https ://linux.die.net/man/5/sssd.conf

sudo_provider (string) 
Default: The value of "id_provider" is used if it is set. 
"none" disables SUDO explicitly.

如果您使用的 sssd 版本足夠新,則應將其配置為sudo_provider=ad.

根據 Ubuntu sssd 1.16 版,當使用 ad 作為 sudo 提供程序時,這些選項似乎取自 sssd-ldap 選項: https ://github.com/SSSD/sssd/blob/sssd-1_16_4/src/providers/ad/ ad_sudo.c#L49

   ad_options->id->sudorule_map = ldap_options->sudorule_map;

來自 sssd-sudo 手冊頁的 sudo 規則映射的 Thefore 文件應該適用:https ://linux.die.net/man/5/sssd-sudo

建議設置: ldap_sudo_search_base =根據您的需要。

如果您想使用基於文件的 sudo 建議嘗試使用以下方法禁用提供程序: sudo_provider=none 此外,最好在/etc/nssswitch.conf添加/修改行時明確禁用 sssd 查找sudoers: files

引用自:https://serverfault.com/questions/1003510