tl;dr
Quero saber com facilidade e rapidez se um usuário é local ou de domínio (não importa qual domínio).
Meio Ambiente
- freeipa-client-4.6.1-3.fc27.x86_64
- sssd-1.16.0-4.fc27.x86_64
História completa
Estou escrevendo um script userinfo.sh que mostrará se um usuário é local, sssd, pode ssh e é permitido pelo sssd.
Atualmente estou verificando se o usuário é do domínio com o getent passwd -s sss $USERNAME
comando. Mas encontrei um problema em que a verificação do banco de dados sssd retorna um usuário local!
# getent passwd -s sss 'bgstack15-local'
bgstack15-local:x:1000:1000:bgstack15-local:/home/bgstack15-local:/bin/bash
Verificar o conteúdo do banco de dados (cache) para sss mostra que sssd aparentemente armazena em cache todos os tipos de informações sobre o usuário local.
# 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]
Tentei limpar o cache sssd em geral e apenas para o usuário. Nenhum dos dois fez diferença.
# sss_cache -U
# sss_cache -u bgstack15-local
O usuário aparece como um usuário local e prometo que é apenas um usuário local!
getent passwd -s files 'bgstack15-local'
bgstack15-local:x:1000:1000:bgstack15-local:/home/bgstack15-local:/bin/bash
As páginas man para getent(1) e getpwent(3) não me ajudam a entender o que pode estar acontecendo. sssd(8) me mostra que sssd pode armazenar em cache usuários locais, o que na verdade vai contra o que eu quero! A seção nss de sssd.conf(5) não ajuda, mas talvez eu não tenha tido tempo suficiente para lê-la. Estou um pouco preso.
meu 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]
Último recurso
Posso tentar fazer minhas verificações ${USERNAME}@${DOMAIN}
ao fazer a -s sss
verificação, mas isso significa que tenho que iterar todos os domínios em sssd.conf e isso tornaria o processo mais lento.
A opção que controla esse comportamento está escondida em sssd.conf(5) no CentOS 7 e Fedora, mas não na página do manual online.
sssd.conf
A referência 3 mostra que o sssd cria um "cache rápido para usuários locais".
De man sssd.conf(5) no meu sistema Fedora:
Desativar esse comportamento me permite fazer uma verificação simples para ver se é um usuário local ou usuário de domínio.
Referências