Eu fiz esta pergunta no stackoverflow e percebi que poderia obter melhores respostas aqui.
Tentativa de configurar o Samba + OpenLDAP usando o nss_ldap uner Linux. O software Alls é compilado por mim a partir da fonte, então nenhum RPM, YUM, etc ...
Usando o Pozix Linux, que é nosso próprio sistema de distribuição - o significado do sistema de login baunilha, a distro depende do padrão / etc / passwd, / etc / group.
Instalou todo o software necessário para converter o sistema em um sistema baseado em LDAP que parece funcionar com outro software, como o SSH, exceto o SAMBA.
Conseguiu juntar o Windows7 ao PDC autônomo do Samba, não consigo fazer login com uma conta de domínio, a menos que essa conta também seja adicionada ao arquivo / etc / passwd.
Eu recebo: user no passdb, mas o getpwnam () falha!
Tudo que li aponta para um problema do NSS_LDAP. Aqui está uma lista de coisas que fiz:
- getent passwd mostra usuários perfeitamente bem
- Eu posso ssh no mesmo host Linux usando uma conta de usuário que está apenas no banco de dados LDAP.
teste de - id (teste é minha conta de teste somente no LDAP) que funciona
- ./ pdbedit -Lv test trabalha
- ./ net rpc lista de direitos de contas -Urro funciona, vejo raiz tem todos os direitos necessários
- por sugestão do stackoverflow, alterei meu arquivo nsswitch.conf de (arquivos ldap) para (arquivos ldap) que essencialmente alteravam a ordem de despejo de getent passwd & não resolveu o problema.
- comentou rootbinddn e incluiu o bindpw com a versão em texto puro da senha para eliminar qualquer dúvida com ldap.secret
- smb.conf tem ldapsam: trusted = yes
- smb.conf e ldap.conf ambos têm SSL fora de um
- Não executando o nscd
Em todo o site samba.org, capítulo 5, sobre como fazer os usuários felizes, exceto:
./smbclient // tsrvr / test -Utest
Isso produz a mensagem de erro subject em log.smbd e o log de depuração ldap mostra uma consulta para teste sem erros e um valor de retorno bem-sucedido.
Se eu colocar 'test' em / etc / passwd, então funciona!
É como se a relação entre nss_ldap e smbd estivesse quebrada e eu enfatizasse relacionamento porque o LDAP parece OK (slapcat, ldapsearch, etc ... all work) ... Parece que a biblioteca nss_ldap está recebendo um valor de retorno que quando entregue de volta ao smbd, de alguma forma não é entendido.
Eu realmente aprecio todas as sugestões. Eu vejo esse problema listado com freqüência. Geralmente relacionado ao PAM, mas não estou usando o PAM.
Além disso, se eu abrir o arquivo / etc / passwd e adicionar uma linha para o usuário em questão, posso fazer o login.
Eu não estou usando o PAM. Eu adicionei as duas atualizações de registro do Windows7 necessárias para o site Samba.org.
A pilha de software é a seguinte: Samba 3.5.3 OpenLDAP 2.4.21 nss_ldap 264
--------------------- [update] ---------------------
Eu comecei a olhar para o código fonte do Samba.
Eu encontrei esta função em samba3 / auth / auth_util.c (sobre a linha 580)
auth_serversupplied_info *result;
const char *username = pdb_get_username(sampass);
pwd = getpwnam_alloc(result, username);
O pwd é avaliado como NULL, embora o nome de usuário seja válido.
getpwnam_alloc aloca memória para estrutura de resultado e preenche-a com o Unix UID, o GID principal, etc ...
Tudo o que li diz que esta chamada usa o NSS. Espero que alguém da equipe de samba que tenha conhecimento disso eu possa falar.
--------------------- [update] ---------------------
Examinar o código-fonte do samba aqui é o que estou descobrindo:
A falha está acontecendo em auth / auth_util.c (linha 580) com uma chamada para getpwnam_alloc
getpwnam_alloc tenta fazer algum tipo de armazenamento em cache e, se o nome de usuário não for encontrado no cache recente, o código fica com uma chamada para:
sys_getpwnam encontrado em lib / system.c que é apenas um wrapper para getpwnam
Documentado aqui: link
Não aparece quando o Samba verifica o errno descrito; irá adicionar alguns depurar e reportar de volta.
Definitivamente, uma falha na biblioteca do sistema operacional que está implementando o getpwnam, mas ainda não é certa.