tl;博士
我想轻松快速地判断用户是本地用户还是域用户(不在乎哪个域)。
环境
- 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
getent(1)和getpwent(3)的手册页不能帮助我理解可能发生的情况。sssd(8)告诉我 sssd 可以缓存本地用户,这实际上与我想要的背道而驰!sssd.conf(5)的 nss 部分没有帮助,但也许我没有花足够的时间阅读它。我有点卡住了。
我的 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 中的所有域,这会减慢进程。