我想轻松快速地判断用户是本地用户还是域用户(不关心哪个域)。
我正在编写一个 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
Run Code Online (Sandbox Code Playgroud)
检查 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]
Run Code Online (Sandbox Code Playgroud)
我尝试整体清除 sssd 缓存,并且仅针对用户。两者都没有区别。
# sss_cache -U
# sss_cache -u bgstack15-local
Run Code Online (Sandbox Code Playgroud)
用户确实显示为本地用户,我保证它只是本地用户!
getent passwd -s files 'bgstack15-local'
bgstack15-local:x:1000:1000:bgstack15-local:/home/bgstack15-local:/bin/bash
Run Code Online (Sandbox Code Playgroud)
getent(1)和getpwent(3)的手册页不能帮助我理解可能发生的事情。sssd(8)告诉我sssd 可以缓存本地用户,这实际上违背了我的要求!sssd.conf(5)的 nss …