参考

参考

太长了;博士

我想轻松快速地判断用户是本地用户还是域用户(不关心哪个域)。

环境

  • freeipa-client-4.6.1-3.fc27.x86_64
  • sssd-1.16.0-4.fc27.x86_64

完整故事

我正在编写一个 userinfo.sh 脚本,该脚本将显示用户是否是本地用户、sssd、是否可以 ssh,以及是否被 sssd 允许。

目前我正在使用命令检查用户是否来自域getent passwd -s sss $USERNAME。但我遇到了一个问题,检查 sssd 数据库返回本地用户!

# getent passwd -s sss 'bgstack15-local'
bgstack15-local:x:1000:1000:bgstack15-local:/home/bgstack15-local:/bin/bash

检查 sss 的数据库(缓存)内容显示 sssd 显然缓存了有关本地用户的各种信息。

# sudo su root -c 'strings /var/lib/sss/db/* | grep bgstack15-local' | sort | uniq
name=bgstack15-local@implicit_files,cn=groups,cn=ih
name=bgstack15-local@implicit_files,cn=groups,cn=implicit_files,cn=sysdb
name=bgstack15-local@implicit_files,cn=users,cn=implicit_files,cn=sysdb
[...output truncated]

我尝试整体清除 sssd 缓存,并且仅为用户清除。两者都没有什么区别。

# sss_cache -U
# sss_cache -u bgstack15-local

该用户确实显示为本地用户,而且我保证它只是本地用户!

getent passwd -s files 'bgstack15-local'
bgstack15-local:x:1000:1000:bgstack15-local:/home/bgstack15-local:/bin/bash

的手册页获取(1)得到普文特(3)不要帮助我理解可能发生的事情。固态硬盘(8)向我展示 sssd 可以缓存本地用户,这实际上违背了我想要的!的 nss 部分sssd.conf(5)没有帮助,但也许我没有花足够的时间来阅读它。我有点卡住了。

我的 sssd.conf

[domain/ipa.example.com]
id_provider = ipa
ipa_server = _srv_, dns1.ipa.example.com
ipa_domain = ipa.example.com
ipa_hostname = fc27c-01a.ipa.example.com
auth_provider = ipa
chpass_provider = ipa
access_provider = ipa
cache_credentials = True
ldap_tls_cacert = /etc/ipa/ca.crt
krb5_store_password_if_offline = True
[sssd]
services = nss, pam, ssh, sudo
domains = ipa.example.com
[nss]
homedir_substring = /home
[pam]
[sudo]
[autofs]
[ssh]
[pac]
[ifp]
[secrets]
[session_recording]

最后一招

我可以尝试在进行检查${USERNAME}@${DOMAIN}时进行检查-s sss,但这意味着我必须迭代 sssd.conf 中的所有域,这会减慢进程。

答案1

控制此行为的选项隐藏在 CentOS 7 和 Fedora 上的 sssd.conf(5) 中,但不在在线手册页中。

SSD配置文件

[sssd]
enable_files_domain = false

参考文献 3 显示 sssd 为“本地用户提供快速缓存”。

来自我的 Fedora 系统上的 man sssd.conf(5):

   enable_files_domain (boolean)
       When this option is enabled, SSSD prepends an implicit domain with
       “id_provider=files” before any explicitly configured domains.

       Default: true

禁用此行为可以让我进行简单的检查,看看它是本地用户还是域用户。

参考

  1. DDG:sssd 禁用缓存本地用户
  2. https://bugzilla.redhat.com/show_bug.cgi?id=1357418
  3. https://fedoraproject.org/wiki/Changes/SSSDCacheForLocalUsers
  4. Fedora 27 sssd.conf(5)
  5. https://bgstack15.wordpress.com/2018/02/23/getent-passwd-s-sss-localuser-shows-local-user/

相关内容