Estou no Fedora e configurei um servidor OpenLDAP. Não me lembro de ter definido uma senha de administrador para começar, mas estou tendo que realizar operações nas quais a senha de administrador é solicitada. Não inserir nada não funciona. Fiz uma extensa pesquisa sobre o problema e tentei o seguinte:
$ ldapmodify -Q -Y EXTERNAL -H ldapi:/// << E0F
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}wDiv2teFapZFmOwSz04/2CMaYvpqfLvi
E0F
modifying entry "olcDatabase={1}mdb,cn=config"
ldap_modify: Insufficient access (50)
$ sudo -i
[sudo] password for User:
[root@localhost ~]# ldapmodify -Q -Y EXTERNAL -H ldapi:/// << E0F
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}wDiv2teFapZFmOwSz04/2CMaYvpqfLvi
E0F
modifying entry "olcDatabase={1}mdb,cn=config"
ldap_modify: Insufficient access (50)
$ ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcRootDN=cn=admin,dc=com,dc=example dn olcRootDN olcRootPW
SASL/EXTERNAL authentication started
SASL username: gidNumber=1000+uidNumber=1000,cn=peercred,cn=external,cn=auth
SASL SSF: 0
No such object (32)
$ sudo ldapsearch -H ldapi:/// -Y EXTERNAL -b 'cn=config'
[sudo] password for User:
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base <cn=config
> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 32 No such object
# numResponses: 1
$ sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// << E0F
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}wDiv2teFapZFmOwSz04/2CMaYvpqfLvi
E0F
modifying entry "olcDatabase={1}mdb,cn=config"
ldap_modify: Insufficient access (50)
Também coloquei o acima em um arquivo e tentei o seguinte:
$ vim pw_reset.ldif
$ sudo ldapmodify -Y EXTERNAL -D 'cn=config' -H ldapi:/// -f ./pw_reset.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}mdb,cn=config"
ldap_modify: Insufficient access (50)
Portanto, o problema óbvio aqui é que não importa o que aconteça, parece que não tenho "acesso suficiente", que é o problema aqui. Preciso da senha do administrador para definir a senha do administrador. Qual é a maneira correta de fazer isso?
Provavelmente não havia senha de administrador; em vez disso, seu sistema provavelmente tinha ACLs de banco de dados (o
olcAccess
atributo) configurados para conceder todos os privilégios às conexões "peercred" do UID 0 - antes que isso quebrasse, de qualquer maneira. (É assim que as distros também instalam o Postgres e o MariaDB.)Encerre o serviço, use
slapadd -n 0
/slapmodify -n 0
para aplicar alterações diretamente ao banco de dados back-end e reinicie o serviço. (Certifique-sesudo
de usar a conta de usuário correta, 'slapd' ou 'ldap' ou similar, para evitar a criação acidental de arquivos de propriedade do root que o serviço não será capaz de ler.)O sufixo cn=config sempre usa um banco de dados de arquivo de texto, portanto, você pode até editá-lo
slapd.d/cn=config/olcDatabase=*.ldif
usando qualquer editor de texto.Lembre-se de que o rootDN (assim como o olcAccess) é separado para cada sufixo (instância de banco de dados), então você precisará alterá-lo também para olcDatabase={0}config, não apenas para olcDatabase{1}mdb (e é o primeiro que realmente permite realizar alterações de configuração – a última serve apenas para gerenciar dados).