tl; dr
Eu quero dizer com facilidade e rapidez se um usuário é local ou de domínio (não importa qual domínio).
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 comando getent passwd -s sss $USERNAME
. Mas me deparei com 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
Verificando o conteúdo do banco de dados (cache) para sss mostra que o sssd aparentemente armazena 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]
Eu tentei limpar o cache sssd geral e apenas para o usuário. Nem fez diferença.
# sss_cache -U
# sss_cache -u bgstack15-local
O usuário aparece como um usuário local e eu 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 man pages para getent (1) e getpwent (3) não me ajuda a entender o que poderia estar acontecendo. sssd (8) me mostra que o sssd pode armazenar em cache usuários locais, o que na verdade vai contra o que eu quero! A seção nss do sssd.conf (5) não ajuda, mas talvez eu não tenha tempo suficiente para lê-lo. 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
Eu posso tentar fazer minhas verificações contra ${USERNAME}@${DOMAIN}
ao fazer a -s sss
check, mas isso significa que eu tenho que percorrer todos os domínios em sssd.conf e isso atrasaria o processo.