Users
getent passwd -s sss LOCALUSER 顯示本地使用者
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 中的所有域,這會減慢程序。
控制此行為的選項隱藏在 CentOS 7 和 Fedora 上的 sssd.conf(5) 中,但不在線上手冊頁中。
sssd.conf
[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
禁用此行為讓我可以簡單地檢查它是本地使用者還是域使用者。
參考