getent passwd -s sss LOCALUSER mostra o usuário local

3

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.

    
por bgStack15 24.02.2018 / 00:00

1 resposta

3

A opção que controla este comportamento está enterrada no sssd.conf (5) no CentOS 7 e no Fedora, mas não na página man online.

sssd.conf

[sssd]
enable_files_domain = false

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:

   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

Desativar esse comportamento permite que eu faça uma verificação simples para ver se é um usuário local ou usuário do domínio.

Referências

  1. ddg: sssd desativar o cache de usuários locais
  2. link
  3. link
  4. Fedora 27 sssd.conf (5)
  5. link
por 24.02.2018 / 00:00