我正在尝试配置 nsswitch 以使用sudoers: files sss
rhel9 系统的默认设置,但这对我来说不起作用,但以下操作sudoers: files ldap
确实有效。
我缺少什么才能使 SSSD 正常工作?
我可以使用我的帐户成功登录实例,但即使如此,我仍不允许使用 sudosudoCommand: ALL
$ ldapsearch -H ldap://ipa.example.com -b ou=sudoers,dc=example,dc=com -ZZ '(&(objectClass=sudoRole))' -x
# allow_all, sudoers, EXAMPLE.COM
dn: cn=allow_all,ou=sudoers,dc=EXAMPLE,dc=COM
objectClass: sudoRole
objectClass: top
sudoUser: %host-admin
sudoHost: ALL
sudoCommand: ALL
sudoRunAsUser: ALL
sudoRunAsGroup: ALL
cn: allow_all
$ id admin
uid=6666(admin),1234(host-admins)
sssd.conf
[domain/default]
id_provider = ldap
auth_provider = ldap
sudo_provider = ldap
chpass_provider = ldap
ldap_uri = ldaps://ipa.example.com
ldap_search_base = dc=example,dc=com
ldap_id_use_start_tls = True
ldap_schema = rfc2307bis
ldap_sudo_include_regexp = true
cache_credentials = True
ldap_tls_cacertdir = /etc/openldap/certs
ldap_tls_reqcert = allow
[sssd]
services = nss, pam, sudo
domains = default
[nss]
homedir_substring = /home
[pam]
[sudo]
debug_level = 7
nsswitch.conf
sudoers: files sss <--- Does not work
sudoers: files ldap <--- Does work
答案1
我猜这host-admin[s]
是当地的服务器上的组而不是 LDAP 组。
SSSD 故意忽略引用主机本地组的 LDAP“sudoers”条目。如果我没记错的话,它只接受引用同一 SSSD“域”内的组的条目。
如果您希望不同的主机拥有不同的管理员,则可以将授权用户名直接存储在 LDAP sudoers 规则中(该sudoUser
属性是多值的),用于sudoHost
将角色限制为特定主机(或主机集),并为每组需要不同管理员列表的主机创建一个新角色。
或者,你可以使用 NIS 风格网络组在 LDAP 中(使用 objectClassnisNetgroup
并包含三元组列表(host,user,[nisdomain])
),或者您可以完全避免使用 LDAP 并通过 Salt/Ansible 部署 /etc/sudoers.d/ 作为常规文件(然后可以引用 nsswitch 已知的任何组或 NIS 网络组)。