Ok. Eu percebi isso com ajuda do IRC e lendo manpage.
Supondo que você não queira recriar nada além de adicionar hash de senha em um back-end existente do LDAP e estiver executando o Ubuntu (isso é testado apenas em máquinas Ubuntu, mas o método deve ser independente de SO):
Usaremos ldapmodify
para adicionar, modificar e remover entradas.
Etapa 1: crie o test.conf
Nós criaremos um arquivo chamado test.conf
e adicionaremos os seguintes:
dn: olcDatabase={-1}frontend,cn=config
add: olcPasswordHash
olcPasswordHash: {CRYPT}
O dn
é diferente se você tiver um banco de dados diferente. Eu comecei sabendo nada onde colocar, então eu simulei:
sudo su # do this as root
cd /etc/ldap/
mkdir test.d
slaptest -f test.conf -F test.d
O último comando irá converter o test.conf existente (meu nome para o famoso slapd.conf ) para o novo formato cn=config
.
Se você tree
o diretório test.d
e você ler cada um dos arquivos ldif, você encontrará exatamente o arquivo que deseja modificar. No meu caso (possivelmente para todos os usuários do Ubunut por aí), seria olcDatabase={-1}frontend.ldif
.
A outra coisa é cn=config
. Isso ocorre porque o arquivo ldif existe no diretório cn=config
.
Esta é uma boa maneira de descobrir onde o atributo deve pertencer.
Etapa 2: executar o ldapmodify
root@test32giab:/etc/ldap# ldapmodify -Y EXTERNAL -H ldapi:/// -f test.conf
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={-1}frontend,cn=config"
Se você agora verificar o arquivo ldif, ele deverá ter olcPasswordHash
attribute.
Se você quiser especificar o formato do hash, você pode fazer isso. Supondo que você esteja seguindo as duas etapas anteriores, você comente tudo ou comece com um novo arquivo. O arquivo precisa conter as seguintes linhas:
dn: cn=config
add: olcPasswordCryptSaltFormat
olcPasswordCryptSaltFormat: $5$rounds=8000$%.16s
Execute isso usando o mesmo comando ldapmodify
. Agora a conta LDAP será dividida usando SHA-256 ( $6$
é SHA-512) mais 16-char long salt e hash 8000 vezes.
A entrada dn
é cn=config
porque esse valor (com base na minha simulação usando a etapa 1) está no arquivo cn=config.ldif
.
Para saber mais sobre o formato, consulte link
Se você estiver experimentando um formato diferente, tente usar o método replace
. Então o arquivo ficaria assim.
dn: cn=config
replace: olcPasswordCryptSaltFormat
olcPasswordCryptSaltFormat: $5$%.16s
Agora eu removi 8000 vezes a iteração. Eu acho que, por padrão, o SHA5-256-CRYPT é hash 5000 vezes.
Você pode ler mais sobre isso fazendo man ldapmodify
e scrolldown perto da parte inferior da página do manual.