
Herdei vários servidores RHEL5 que foram configurados para autenticar usuários em suas contas AD via winbind. Tudo funciona bem até eu atualizar a associação ao grupo no AD. Para alguns usuários, as alterações nunca chegam à saída do comando "groups", embora sejam refletidas na saída de "getent group <groupname>".
Por exemplo, considere o seguinte:
[root@hcc1pl1 ~]# grupos plubans
plubans: usuários do domínio desenvolvimento de infraestrutura de sistemas
[root@hcc1pl1 ~]# grupo getent q1esb
q1esb:*:23136:q1qai,q1prodi
Se eu me adicionar ao q1esb no DC que o winbind está usando, você poderá ver que a associação foi atualizada:
[root@hcc1pl1 ~]#lsof -i | grep winbind
winbindd 31339 root 17u IPv4 63817934 TCP hcc1pl1:56541->hcnas01:microsoft-ds (ESTABELECIDO)
winbindd 31339 root 21u IPv4 63817970 TCP hcc1pl1:53622->hcnas01:ldap (ESTABELECIDO) 1pl1
~]#ldapsearch -u -x -LLL -h hcnas01 -D "[e-mail protegido]" -W -b "CN=Peter Lubans,OU=Contas de usuário padrão,OU=Usuários,OU=XXX,DC=XXX,DC=XXX" "(sAMAccountName=*)" memberOf
Digite a senha LDAP:
...
memberOf: CN=q1esb,OU=Grupos de segurança,OU=Grupos,OU=XXX,DC=XXX,DC=XXX
...
Observe que o winbind está sendo executado sem cache (sinalização -n):
[root@hcc1pl1 ~]# ps -ef | grep winbind
root 31339 1 0 13:50 ? 00:00:00 winbindd -n
root 31340 31339 0 13:50 ? 00:00:00 winbindd -n
root 31351 31339 0 13:50 ? 00:00:00 winbindd -n
root 31352 31339 0 13:50 ? 00:00:00 winbindd -n
root 31353 31339 0 13:50 ? 00:00:00 winbindd -n
Agora getent mostra que esse grupo possui os membros corretos:
[root@hcc1pl1 ~]# grupo getent q1esb
q1esb:*:23136:q1qai,plubans,q1prodi
Mas a adesão atualizada não se reflete nos detalhes da minha conta:
[root@hcc1pl1 ~]# grupos plubans
plubans: usuários do domínio desenvolvimento de infraestrutura de sistemas
[root@hcc1pl1 ~]#
A parte verdadeiramente incômoda desse problema é que ele funciona bem para outras contas nesta máquina e para minha conta em máquinas que configurei desde o início.
Alguma ideia?
Responder1
Parece que isso foi causado pelo armazenamento em cache das informações do grupo no momento do logon em /var/cache/samba/netsamlogon_cache.tdb. Eu acho que embora '-n' tenha instruído o winbind a não armazenar em cache suas consultas no LDAP, a presença das informações de associação naquele arquivo TDB foi suficiente para bagunçar as coisas.
Responder2
Consegui encontrar o artigo perdido de Marcin (https://marcinm.co.uk/group-membership-not-updating-in-winbind/) perguntando a ele por e-mail. Como tenho certeza de que isso ajudará pelo menos algumas pessoas, aqui está a postagem completa do blog:
Cenário
Servidor de arquivos executando smbd security=ads
(ou seja, atuando como membro do domínio), o usuário se conecta ao compartilhamento Samba e obtém a associação ao grupo capturada corretamente ao se conectar pela primeira vez - e nunca é atualizado depois disso.
Causa raiz
O Samba atualiza a associação ao grupo quando é calculada pelo controlador de domínio AD e é calculada somente quando o usuário efetua login em um servidor executando smbd e winbind. Que é acionado wbinfo -a
apenas por login SMB kerberizado. Como esta é uma limitação séria, o que significa que nenhuma associação ao grupo seria conhecida em máquinas nas quais o usuário nunca efetua login, foi desenvolvido um código de associação ao grupo substituto que extrai a associação do usuário ao grupo do AD sem o login do usuário, mas como conta de máquina usada pelo winbind não tem o direito de solicitar a adesão a um grupo de usuários, é considerado instável e seus resultados não são confiáveis. Portanto, o winbind nunca depende dele - ele o chamará quando nenhuma associação ao grupo for conhecida, mas nunca será usado para atualizar as associações ao grupo em cache. Como resultado disso - em alguns cenários, o winbind captura associações de grupos de usuários uma vez e nunca as atualiza depois disso.
Não é possível desabilitar o cache de membros do grupo, ou seja, não há como desabilitar tal comportamento colocando uma linha em smb.conf
. Observe que este não é um problema do Samba, mas um problema de design do AD, tal comportamento é consistente com a maneira como o Windows se comporta, que efetivamente é que a associação ao grupo AD é atualizada quando um usuário se autentica durante o login.
Como forçar a atualização da associação ao grupo para um usuário
A associação ao grupo é armazenada em cache em um arquivo chamado netsamlogon_cache.tdb
que pode ser investigado pelo tdbtool (todas as versões do Samba) ou net cache samlogon
(Samba 4.7 ou mais recente). A exclusão de entradas em cache desse arquivo aciona uma atualização única das associações ao grupo, chamando o código de atualização de fallback e colocando seu resultado de volta netsamlogon_cache.tdb
- e depois disso elas são armazenadas em cache para sempre novamente.
maneira tdbtool:
$ wbinfo -n user.name
S-1-5-21-3023451936-689652692-1079546996-40725 SID_USER (1)
anexe \0
ao SID e coloque-o entre aspas:
$ tdbtool netsamlogon_cache.tdb delete "S-1-5-21-3023451936-689652692-1079546996-40725\0"
a associação ao grupo será atualizada na primeira vez que o sistema operacional precisar, aguarde alguns minutos para que o arquivo tdb seja preenchido,
forma de samlogon do cache de rede:
$ net cache samlogon list|head
SID Name When cached
---------------------------------------------------------------------------------------------------------------------------
S-1-5-21-3023451936-689652692-1079546996-40725 DOM\user.name Tue Apr 27 07:59:19 AM 2018 BST
S-1-5-21-3023451936-689652692-1079546996-41432 DOM\user.name2 Tue Apr 27 02:13:33 PM 2018 BST
$ net cache samlogon delete S-1-5-21-3023451936-689652692-1079546996-40725
O mesmo que anteriormente - a associação ao grupo será atualizada na primeira vez que o sistema operacional precisar, aguarde alguns minutos para que o arquivo tdb seja preenchido.
Responder3
Meu único pensamento, e muito vago, é que pode ter algo a ver com a comunicação com o seu mestre de infraestrutura (que é responsável por atualizar as associações de grupos entre domínios).
Responder4
Eu tive algo semelhante. Para corrigir o problema, executei "authconfig --disablecache --update". É claro que isso tornou os logons lentos.