Users

getent passwd -s sss LOCALUSER 顯示本地使用者

  • February 23, 2018

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

禁用此行為讓我可以簡單地檢查它是本地使用者還是域使用者。

參考

  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/

引用自:https://unix.stackexchange.com/questions/426195