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:
-
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
-
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
. -
Crie um diretório para armazenar os resultados, por exemplo,
mkdir /tmp/ldap-kerberos/krb5_ldif
-
Executar:
slaptest -f /tmp/ldap-kerberos/schema_convert.conf -F /tmp/ldap-kerberos/krb5_ldif
-
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.
-
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.