kdb5_ldap_util falha com erro enigmático

1

Supostamente, para configurar o Kerberos, preciso executar kdb5_ldap_util , embora não tenha certeza do motivo. No entanto, falha com:

# kdb5_ldap_util -D cn=admin,dc=example,dc=com create -subtrees dc=example,dc=com -r EXAMPLE.COM -s -H ldapi:///
Password for "cn=admin,dc=example,dc=com":
Initializing database for realm 'EXAMPLE.COM'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify:
kdb5_ldap_util: Invalid syntax while creating realm 'EXAMPLE.COM'

Eu não tenho ideia do que esse erro significa. Procurar no Google me levou a acreditar que é uma maneira críptica de dizer que o "esquema kerberos" ainda não foi "carregado" no servidor LDAP. Verificando /etc/ldap/schema , não há kerberos.schema nem nada igualmente óbvio. Como alguns recursos apontam, há /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz e /usr/share/doc/krb5-kdc-ldap/kerberos.ldif.gz . (Por que estes são gzipped, além de ser obtuso para usar?)

gunzip ing esses dois arquivos em /etc/ldap/schema e executando o seguinte:

# ldapadd -Y EXTERNAL -H ldapi:/// -f kerberos.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
ldapadd: invalid format (line 5) entry: "cn=schema"

A linha 5 é um comentário.

Este é o mesmo comando que eu tive que executar em todos os outros arquivos LDIF naquele diretório para que o OpenLDAP funcione em primeiro lugar . Por que este esquema não funciona?

O erro não me diz nada sobre o que está errado, mas isso parece ser uma correspondência aproximada ( mas implica que o esquema Kerberos é quebrado fora da caixa): eu preciso editá-lo como sugerido lá? Alguns outros recursos parecem também sugerir que o LDIF precisa de uma entrada cn: para cada parte: é necessário também /

    
por Thanatos 13.02.2014 / 21:58

1 resposta

0

krb5_ldap_util está realmente tentando me informar que não adicionei o esquema Kerberos ao servidor LDAP. Infelizmente, isso está longe de ser trivial.

O melhor guia que tenho até agora é este do MIT , embora as direções estejam um pouco fora. Vou repetir mais aqui, mas corrigido para o que parece ser o estado moderno do mundo:

  1. Você precisa extrair os arquivos de esquema. Eles estão em /usr/share/doc/krb5-kdc-ldap/kerberos.ldif.gz e /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz . Para extraí-los, execute:

    gunzip -c /usr/share/doc/krb5-kdc-ldap/kerberos.ldif.gz > /etc/ldap/schema/kerberos.ldif
    gunzip -c /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz > /etc/ldap/schema/kerberos.schema
    
  2. Agora estamos na etapa 1 do guia, portanto, em um diretório em algum lugar, crie um arquivo com:

    include /etc/ldap/schema/kerberos.schema
    

    Salve em algum lugar. Estou chamando meu /tmp/ldap-kerberos/schema_convert.conf .

  3. Crie um diretório para armazenar os resultados, por exemplo,

    mkdir /tmp/ldap-kerberos/krb5_ldif
    
  4. Executar:

    slaptest -f /tmp/ldap-kerberos/schema_convert.conf -F /tmp/ldap-kerberos/krb5_ldif
    
  5. Isso produzirá um monte de coisas em /tmp/ldap-kerberos/krb5_ldif . Abra /tmp/ldap-kerberos/krb5_ldif/cn=config/cn=schema/cn={0}kerberos.ldif em $EDITOR . Como o guia sugere, substitua:

    dn: cn={0}kerberos
    cn: {0}kerberos
    

    com

    dn: cn=kerberos,cn=schema,cn=config
    cn: kerberos
    

    Olhe a parte inferior do arquivo para algo como:

    structuralObjectClass: olcSchemaConfig
    entryUUID: ...
    creatorsName: cn=config
    createTimestamp: ...
    entryCSN: ...
    modifiersName: cn=config
    modifyTimestamp: ...
    

    e remova-o.

  6. Adicione ao servidor:

    ldapadd -Y EXTERNAL -H ldapi:/// -f  /tmp/ldap-kerberos/krb5_ldif/cn=config/cn=schema/cn={0}kerberos.ldif
    

    Você deve ver:

    adding new entry "cn=kerberos,cn=schema,cn=config"
    

krb5_ldif não deve mais reclamar. Além disso, observe que o Kerberos, AFAICT, deve ter um nome com uma senha para vincular. Ele não pode fazer "peer authentication", que é o que estamos fazendo quando fazemos -Y EXTERNAL -H ldapi:/// : que se conecta através de um socket Unix, e o LDAP pode perguntar ao socket qual é o nosso UID e confiar em nós baseado nisso. Você precisa criar um nome com uma senha e usá-lo. Eu já fiz isso; o meu é cn=admin,dc=example,dc=com , visível no comando da questão. O Kerberos armazenará a senha para esse nome em um arquivo, portanto, apenas gere uma senha aleatória longa e defina as permissões adequadamente.

    
por 14.02.2014 / 19:50