krb5/ldap troubles
    Berthold Cogel 
    cogel at uni-koeln.de
       
    Thu Jun 13 09:28:04 EDT 2013
    
    
  
Hello!
I've some problems with a krb5/ldap setup and I'm still trying to
understand what I'm dealing with..
System: RHEL5
Kerberos: 1.6.1-70.el5 (MIT/RHEL)
LDAP: openldap-ltb-2.4.28-1.el5
Kerberos is talking to the local LDAP via LDAPI.
Now we've migrated our users from our old identity management
system to a new system and pushed the accounts into the
kerberos (kadmin is called remote from the IDM). Now I've run into some
problems:
- kadmind slowed down during the process. Starting with an almost empty
database I was able to do about 3 'addprinc' jobs per second. And I
ended up with about 8 seconds per principal after about 68000 users.
- The host is a virtual host. I started with 2 cores and upgraded the
system to 4 cores during the process with almost no effect. Load is not
very high but about 50% system...
These problems do hit me only during the initial setup, but...
- When kadmind is being called, we see about 80000 to 100000 context
switches (cs, vmstat 1 ) per second (no kadmin action: about 100 - 1000 cs).
- Password changes are slow too (8 seconds).
- Simple kinit causes a 140000 cs spike for password prompt and another
130000 cs spike for authentication. This is a lot...
- ldapsearch for the complete tree takes about 15 seconds (about 250000
cs for the request)
- ldapsearch for one principal ... almost no impact
This doesn't look like an LDAP problem to me. But there is an old system
(VM, 2 cores, RHEL3, MIT-Krb 1.4.3, no LDAP-Backend) that doesn't show
these effects.
This is what I have in the kdc.conf:
[kdcdefaults]
 kdc_ports = 750,88
 kdc_tcp_ports = 88
 v4_mode = nopreauth
[realms]
  RRZ.UNI-KOELN.DE = {
    database_name = /var/kerberos/krb5kdc/principal
    acl_file = /var/kerberos/krb5kdc/kadm5.acl
    dict_file = /usr/share/dict/words
    key_stash_file = /var/security/kerberos/.k5.RRZ.UNI-KOELN.DE
    max_life = 10h 0m 0s
    max_renewable_life = 7d 0h 0m 0s
    master_key_type = aes256-cts
    supported_enctypes = aes256-cts-hmac-sha1-96:normal
des-cbc-crc:normal des:afs3
    supported_keytypes = aes256-cts-hmac-sha1-96:normal
des-cbc-crc:normal des:afs3
    default_principal_flags = +preauth
    database_module = openldap_ldapconf
  }
[logging]
	admin_server = SYSLOG:INFO:LOCAL0
	kdc = SYSLOG:INFO:LOCAL0
[dbdefaults]
    ldap_kerberos_container_dn = "ou=Kerberos,dc=uni-koeln,dc=de"
[dbmodules]
  openldap_ldapconf = {
    db_library = kldap
    ldap_kerberos_container_dn = "ou=Kerberos,dc=uni-koeln,dc=de"
    ldap_kdc_dn = "cn=kdc,ou=Kerberos,dc=uni-koeln,dc=de"
    ldap_kadmind_dn = "cn=kadmind,ou=Kerberos,dc=uni-koeln,dc=de"
    ldap_service_password_file = "/var/kerberos/krb5kdc/service.keyfile"
    ldap_servers = "ldapi://%2Fvar%2Frun%2Fldapi"
    ldap_cons_per_server = 10
  }
krb5.conf...
[libdefaults]
  default_realm = RRZ.UNI-KOELN.DE
  # these numbers are in seconds:
  # 2592000 is 30 days (the maximum AFS token lifetime)
  #
  ticket_lifetime = 2592000
  default_lifetime = 2592000
  renew_lifetime = 2592000
  kdc_timesync = 0
  forwardable = true
  renewable = true
  allow_weak_crypto=true
[realms]
  RRZ.UNI-KOELN.DE = {
    kdc = <a>.rrz.uni-koeln.de:88
    kdc = <b>.rrz.uni-koeln.de:88
    kdc = <c>.rrz.uni-koeln.de:88
    admin_server = <a>.rrz.uni-koeln.de:749
    default_domain = rrz.uni-koeln.de
  }
[domain_realm]
  .rrz.uni-koeln.de = RRZ.UNI-KOELN.DE
  .uni-koeln.de = RRZ.UNI-KOELN.DE
[logging]
  admin_server = SYSLOG:INFO:LOCAL0
  kdc = SYSLOG:INFO:LOCAL0
slapd.conf...
include		/etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/eduperson.schema
include         /etc/openldap/schema/dfneduperson.schema
include         /etc/openldap/schema/schac.schema
include         /etc/openldap/schema/edumember.schema
include         /etc/openldap/schema/UniColognePerson.schema
include         /etc/openldap/schema/kerberos.schema
pidfile		/usr/local/openldap/var/run/slapd.pid
argsfile	/usr/local/openldap/var/run/slapd.args
modulepath	/usr/local/openldap/libexec/openldap
# TLS definitions
TLSCertificateFile xxxxxx
TLSCertificateKeyFile xxxxxx
TLSCACertificatePath /etc/pki/tls/certs
security ssf=64 update_ssf=112 simple_bind=64
localSSF 256
include         /etc/openldap/acl.inc
sizelimit unlimited
idletimeout 20
loglevel none
database	hdb
suffix		"dc=uni-koeln,dc=de"
rootdn		"cn=xxxxx
rootpw         xxxxxx
cachesize 100000
idlcachesize 300000
checkpoint 4096 10
directory	/var/lib/ldap
index mail eq
index cn eq,sub
index sn eq,sub
index givenname eq,sub
index uid eq
index objectclass eq
index entryCSN eq
index entryUUID eq
index UniCologneMailPolicy eq
index description sub
index krbPrincipalName eq,pres,sub
index krbPwdPolicyReference eq
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
overlay auditlog
auditlog /tmp/openldapaudit.log
database monitor
What causes these huge amounts of context switches and how can I reduce
them. Help would be appreciated.
Berthold Cogel
    
    
More information about the Kerberos
mailing list