MIT Kerberos: Configuring Kerberos with LDAP

Updated: Sep 23, 2026

 
# If already using local krb5 db and you want to migrate LDAP
kdb5_util dump kdb5_backup.txt

pkg install krb5-ldap

cp /usr/local/sbin/krb5kdc /usr/libexec/
cp /usr/local/sbin/kadmind  /usr/libexec/

rm -Rf /usr/local/var/krb5kdc
ln -s /var/db/krb5kdc /usr/local/var/krb5kdc

cp /usr/local/share/examples/krb5/krb5.conf /usr/local/etc/
ln -s /usr/local/etc/krb5.conf  /etc/krb5.conf


ln -s /var/db/krb5kdc/kdc.conf /usr/local/etc/kdc.conf
ln -s /var/db/krb5kdc/kdc.conf /etc/kdc.conf





kerberos.example.net.	900	CNAME	server1.example.net.
kerberos1.example.net.	900	CNAME	server1.example.net.
_kerberos.example.net.	900	TXT	"EXAMPLE.NET"
_kerberos._tcp.example.net. 900	SRV	10 10 88 server1.example.net.
_kerberos._udp.example.net. 900	SRV	10 10 88 server1.example.net.
_kpasswd._udp.example.net. 900	SRV	10 10 464 server1.example.net.
_kerberos-master._udp.example.net. 900 SRV 10 10 88 server1.example.net.
_kerberos-adm._tcp.example.net.	900 SRV	10 10 749 server1.example.net.

vim /etc/krb5.conf
vim /etc/kdc.conf
 
 
[libdefaults]
	default_realm = EXAMPLE.NET
	default_keytab_name = /etc/krb5.keytab
	default_tgs_enctypes = aes256-cts-hmac-sha1-96
	default_tkt_enctypes = aes256-cts-hmac-sha1-96
	forwardable = true
	dns_lookup_realm = true
	dns_lookup_kdc = true
	ticket_lifetime = 24h
	renew_lifetime = 7d
	preferred_enctypes = aes256-cts:normal aes128-cts:normal


[realms]
	EXAMPLE.NET = {
		kdc = kerberos1.example.net
		admin_server = kerberos.example.net
	}


[domain_realm]
	example.net = EXAMPLE.NET
	.example.net = EXAMPLE.NET

[kadmin]
	default_keys = aes256-cts:normal aes128-cts:normal

[logging]
	default = FILE:/var/log/krb5libs.log
	kdc = FILE:/var/log/krb5kdc.log
	admin_server = FILE:/var/log/kadmin.log
 
 
[kdcdefaults]
    kdc_ports = 88,750
    kdc_tcp_ports = 88

[realms]
    EXAMPLE.NET = {
        database_module = openldap_ldapconf
        kadmind_port = 749
        kpasswd_port = 464
        max_life = 12h 0m 0s
        max_renewable_life = 7d 0h 0m 0s
	default_principal_flags = +preauth
        master_key_type = aes256-cts
        key_stash_file = /var/db/krb5kdc/.k5.EXAMPLE.NET
        acl_file = /var/db/krb5kdc/kadm5.acl
        admin_keytab = /var/db/krb5kdc/kadm5.keytab
        supported_enctypes = aes256-cts:normal aes128-cts:normal
        dict_file = /usr/share/dict/words
    }

[dbdefaults]
    ldap_kerberos_container_dn = cn=krbContainer,ou=kerberos,ou=Services,dc=example,dc=net

[dbmodules]

    db_module_dir = /usr/local/lib/krb5/plugins/kdb

    openldap_ldapconf = {
        db_library = kldap

        ldap_servers = ldap://ldap1.example.net ldap://ldap2.example.net

        ldap_kdc_dn = cn=krbtgt,ou=kerberos,ou=Services,dc=example,dc=net
        ldap_kadmind_dn = cn=kadmin,ou=kerberos,ou=Services,dc=example,dc=net
        ldap_service_password_file = /var/db/krb5kdc/service.keyfile

        ldap_kerberos_container_dn = cn=krbContainer,ou=kerberos,ou=Services,dc=example,dc=net

        ldap_conns_per_server = 5
    }

[logging]
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmin.log
    default = FILE:/var/log/krb5lib.log
 
 
[kdcdefaults]
    kdc_ports = 88,750
    kdc_tcp_ports = 88

[realms]
    EXAMPLE.NET = {
        database_module = openldap_ldapconf
        kadmind_port = 749
        kpasswd_port = 464
        max_life = 12h 0m 0s
        max_renewable_life = 7d 0h 0m 0s
	default_principal_flags = +preauth
        master_key_type = aes256-cts
        key_stash_file = /var/db/krb5kdc/.k5.EXAMPLE.NET
        acl_file = /var/db/krb5kdc/kadm5.acl
        admin_keytab = /var/db/krb5kdc/kadm5.keytab
        supported_enctypes = aes256-cts:normal aes128-cts:normal
        dict_file = /usr/share/dict/words
    }

[dbdefaults]
    ldap_kerberos_container_dn = cn=krbContainer,ou=kerberos,ou=Services,dc=example,dc=net

[dbmodules]

    db_module_dir = /usr/local/lib/krb5/plugins/kdb

    openldap_ldapconf = {
        db_library = kldap

        ldap_servers = ldapi:///

        ldap_kerberos_container_dn = cn=krbContainer,ou=kerberos,ou=Services,dc=example,dc=net

        ldap_conns_per_server = 5

        ldap_kdc_sasl_mech = EXTERNAL
        ldap_kadmind_sasl_mech = EXTERNAL

    }

[logging]
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmin.log
    default = FILE:/var/log/krb5lib.log
 
 
# Simple
kdb5_ldap_util stashsrvpw -f /var/db/krb5kdc/service.keyfile cn=kadmin,ou=kerberos,ou=Services,dc=example,dc=net
kdb5_ldap_util stashsrvpw -f /var/db/krb5kdc/service.keyfile cn=krbtgt,ou=kerberos,ou=Services,dc=example,dc=net


kdb5_ldap_util create -subtrees dc=example,dc=net -r EXAMPLE.NET -s

kdb5_util load -update kdb5_backup.txt

# kdb5_ldap_util -D cn=Manager,dc=example,dc=net -W -H ldapi:/// create -subtrees dc=example,dc=net -r EXAMPLE.NET -s
service kdc start
cat /var/log/krb5kdc.log
service kadmind start
cat /var/log/kadmin.log
kadmin.local
add_policy -minlength 15 -minclasses 3 default
cpw misiminger@EXAMPLE.NET
cpw -randkey host/server1.example.net@EXAMPLE.NET
cpw -randkey host/server2.example.net@EXAMPLE.NET
add_principal -randkey DNS/server1.example.net@EXAMPLE.NET
add_principal -randkey DNS/server2.example.net@EXAMPLE.NET
add_principal -randkey ldap/server1.example.net@EXAMPLE.NET
add_principal -randkey ldap/server2.example.net@EXAMPLE.NET
ktadd -k /etc/krb5.keytab host/server1.example.net@EXAMPLE.NET
ktadd -k /etc/dns.keytab DNS/server1.example.net@EXAMPLE.NET
ktadd -k /etc/dns.keytab DNS/server2.example.net@EXAMPLE.NET
ktadd -k /root/server2.example.net.keytab host/server2.example.net@EXAMPLE.NET
ktadd -k /etc/ldap.keytab ldap/server1.example.net@EXAMPLE.NET
ktadd -k /etc/ldap.keytab ldap/server2.example.net@EXAMPLE.NET
quit

kinit misiminger
klist
 

PREV HOME