太长了;博士
我想轻松快速地判断用户是本地用户还是域用户(不关心哪个域)。
环境
- 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
禁用此行为可以让我进行简单的检查,看看它是本地用户还是域用户。