Grave a senha de hash no LDAP ao criar um novo usuário

1

Estou trabalhando em um projeto com um sistema central de banco de dados de usuários. Um dos requisitos do sistema é que deve haver apenas um conjunto de usuários para todo o aplicativo. O FreeRADIUS e o Samba são dois meus aplicativos que usam o LDAP como seu back-end. Como os usuários devem ser os mesmos para todo o sistema que contém muitos outros aplicativos, tenho que ler a lista de usuários do banco de dados central e recriá-los nos diretórios LDAP para Samba e FreeRADIUS. O problema é que os usuários são enviados para mim de outra entidade e eu posso salvá-los no banco de dados com suas senhas hash. Eu não tenho acesso às suas senhas em texto puro. Eu estou querendo saber se eu poderia entrar diretamente uma senha de hash para um novo usuário no LDAP com o meu mecanismo de hash preferido. Se não, alguém pode me dizer qual estratégia devo usar?

Estou executando meu servidor no UBUNTU 12.04 e todos os outros aplicativos são as versões mais recentes. Meu sistema de banco de dados é o PostgreSQL 9.2.

Obrigado

    
por alibaba 18.10.2013 / 10:48

1 resposta

1

Como você está usando o OpenLDAP, se tiver um formato de hash compatível (e aqui ), você pode inserir o hash diretamente no userPassword atributo. Tome cuidado para que alguns clientes LDAP possam adivinhar modificações em userPassword e aplicar hashing (semelhante à maneira como alguns servidores LDAP modificam ou modificam automaticamente este atributo quando gravados). ldapadd / ldapmodify atualizará a senha corretamente sem reinterpretá-la (contanto que você não tenha uma política de senha do servidor ppolicy_hash_cleartext em vigor, o que pode complicar as coisas). / p>

Você precisará determinar o formato que você tem e prefixar o formato hash ou hash + salt com tipo de tipo, por exemplo, {SHA}xxxxxx ou {SSHA}xxxxxx (em que xxxxxx é um hash ou hash + sal codificado na base64, respectivamente).

Se estiver no formato crypt , você pode inseri-lo com um {crypt} prefixo, mas no caso do OpenLDAP você precisará ter uma compilação configurada com --enable-crypt , já que seu uso é obsoleto. O OpenLDAP usará a função crypt() da biblioteca C, pode haver variações específicas da plataforma em sua saída. No Linux há uma solução simples, crypt() está em sua própria biblioteca libcrypt que você pode "ajustar" em compilação ou tempo de execução. (Observe também que crypt() não é reentrante, portanto, slapd usa um texto para proteger chamadas para ele.) Veja também password-crypt-salt-format para resolver o problema na outra direção: tornando as senhas de lojas do OpenLDAP em vários formatos de cripta.

Como você está usando o Samba, pesquise também a sobreposição smbk5pwd (a README é mais útil). Observe que isso exige alterações de senha para usar uma operação de modificação de senha adequada em vez de uma modificação direta de userPassword .

Com o OpenLDAP, você também tem a opção de delegar a verificação de senha para um sistema externo via SASL (também requer configuração de compilação não padrão), o que pode ser suficiente durante uma janela de migração até que todos os usuários redefinam suas senhas. Uma outra opção (que muitas vezes é uma surpresa) é que o OpenLDAP também suporta várias senhas por usuário, cada uma das quais é testada por sua vez durante a autenticação. Embora seja um pouco frágil (requer que todos os escritores do atributo userPassword executem The Right Thing ), ele pode ajudar na migração, especialmente ao mesclar vários sistemas.

    
por 18.10.2013 / 15:01