Page tree
Skip to end of metadata
Go to start of metadata




Introduction

A quick guide to get you up to speed regarding the (open)LDAP backend for Kopano Groupware Core

Tested

This guide has been tested on Debian 7, 8 and Ubuntu 14.04 LTS

Installation

Please note : slapd uses the hostname to "guess" the organisation name for the LDAP.

In this howto we use the hostname kopano.example.local, which results in dc=example,dc=local in LDAP.

For your setup you probably want to change this to something more useful.

Install OpenLDAP


$ sudo apt-get install slapd ldap-utils


Enter LDAP administrator password twice and write it down. 

Use slapcat to verify that the install took the defaults from your hostname for your organisation correctly, if that's not the case run dpkg-reconfigure -plow slapd and set it up manually

$ sudo slapcat
dn: dc=example,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: example.local
dc: example
structuralObjectClass: organization
entryUUID: 907f25dc-91f2-1032-97fa-b34646bf14f6
creatorsName: cn=admin,dc=example,dc=local
createTimestamp: 20130805081250Z
entryCSN: 20130805081250.289774Z#000000#000#000000
modifiersName: cn=admin,dc=example,dc=local
modifyTimestamp: 20130805081250Z
 
dn: cn=admin,dc=example,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9dm1rV21GdmVPbVBXTnI4blhSbE5oeVVmTTVSWm4vV2U=
structuralObjectClass: organizationalRole
entryUUID: 907fc91a-91f2-1032-97fb-b34646bf14f6
creatorsName: cn=admin,dc=example,dc=local
createTimestamp: 20130805081250Z
entryCSN: 20130805081250.293957Z#000000#000#000000
modifiersName: cn=admin,dc=example,dc=local
modifyTimestamp: 20130805081250Z



Create the placeholder for our users.

Create a file called org.ldif containing:

dn: ou=People,dc=example,dc=local
objectClass: organizationalUnit
objectClass: top
ou: People


Import the ldif file into ldap.

$ sudo ldapadd -x -D cn=admin,dc=example,dc=local -W -f org.ldif

Check if it was added with a simple search.

$ sudo ldapsearch -x -D cn=admin,dc=example,dc=local -W -b dc=example,dc=local


Download and install Kopano

Install Kopano Groupware Core using the Install How-to: Kopano Groupware Installation 


Add the kopano schema to our ldap

$ sudo zcat /usr/share/doc/kopano/kopano.ldif.gz | ldapadd -H ldapi:/// -Y EXTERNAL


Add an kopano user to our ldap

Create a new ldif file called user.ldif containing the following. This user will have kopano admin rights:

dn: uid=john,ou=People,dc=example,dc=local
objectClass: posixAccount
objectClass: top
objectClass: kopano-user
objectClass: inetOrgPerson
gidNumber: 1000
cn: John Doe
homeDirectory: /home/john
mail: john@example.local
uidNumber: 1000
kopanoAliases: j.doe@example.local
kopanoUserServer: kopano
uid: john
kopanoAccount: 1
kopanoAdmin: 1
sn: Doe
userPassword: john
kopanoQuotaOverride: 1
kopanoEnabledFeatures: imap
kopanoDisabledFeatures: pop3
kopanoQuotaWarn: 1000000000
kopanoQuotaSoft: 1100000000
kopanoQuotaHard: 1200000000


Verify the user anonymously.
$ sudo ldapsearch -xLLL -b dc=example,dc=local uid=john


Changing the kopano configuration

Edit /etc/kopano/server.cfg

Change the line user_plugin into the following.

user_plugin             = ldap


|

Setup the ldap.cfg

Depending on the Kopano version (8.2.0 and higher) :

$ sudo cd /etc/kopano/
$ sudo cp /usr/share/doc/kopano/example-config/ldap.cfg ldap.cfg


And include the correct ldap template and change the other required fields.

!include /usr/share/kopano/ldap.openldap.cfg
#!include /usr/share/kopano/ldap.active-directory.cfg



Or on Kopano versions < 8.2:

$ sudo cd /etc/kopano/
$ sudo cp ldap.openldap.cfg ldap.cfg





For this howto to we will be using anonymous binding

Edit /etc/kopano/ldap.cfg

Add your LDAP bind user and password if you do not use anonymous bind;

ldap_bind_user =
ldap_bind_passwd = 
Change the search base so it matches our organisation
ldap_search_base = dc=example,dc=local
Restart the kopano-server
$ sudo /etc/init.d/kopano-server restart 
Check if kopano can get the user from LDAP
$ sudo kopano-admin -l

User list for Default(2):
	Username	Fullname	Homeserver	
	------------------------------------------
	SYSTEM		SYSTEM		kopano	
	john		John Doe	

Lets show the details of our user john.

$ sudo kopano-admin --details john

Username:		john
Fullname:		John Doe
Emailaddress:		john@example.local
Active:			yes
Administrator:		yes
Address book:		Visible
Auto-accept meeting req:no
Mapped properties:
	PR_SURNAME		Doe	
	PR_EC_ENABLED_FEATURES	imap	
	PR_EC_DISABLED_FEATURES	pop3	
Current user store quota settings:
 Quota overrides:	yes
 Warning level:		953.67 MB
 Soft level:		1049.04 MB
 Hard level:		1144.41 MB
Current store size:	0.00 MB
Groups (1):
	Everyone



Ldap optimization

Create a file called optimize-index.ldif containing:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: cn eq,sub
olcDbIndex: gidNumber eq
olcDbIndex: mail eq
olcDbIndex: memberUid eq
olcDbIndex: ou eq
olcDbIndex: uid eq
olcDbIndex: uidNumber eq
olcDbIndex: uniqueMember eq
olcDbIndex: kopanoAccount eq,pres
olcDbIndex: kopanoAliases eq
olcDbIndex: kopanoViewPrivilege eq
olcDbIndex: sn eq,sub
olcDbIndex: givenName eq,sub

*note depending on your choice during installation the hdb could be mdb,


Add the ldif to add the new indexes.

$ sudo cat optimize-index.ldif | ldapmodify -Y EXTERNAL -H ldapi:///


Check if our new olcDbIndex keys have been added.

$ sudo slapcat -b cn=config | grep olcDbIndex:
olcDbIndex: cn eq,sub
olcDbIndex: gidNumber eq
olcDbIndex: mail eq
olcDbIndex: memberUid eq
olcDbIndex: ou eq
olcDbIndex: uid eq
olcDbIndex: uidNumber eq
olcDbIndex: uniqueMember eq
olcDbIndex: kopanoAccount eq,pres
olcDbIndex: kopanoAliases eq
olcDbIndex: kopanoViewPrivilege eq
olcDbIndex: sn eq,sub
olcDbIndex: givenName eq,sub


You could check your slapd logging for suggestion of additional candidates for indexation.

$ sudo cat /var/log/syslog |grep bdb_equality_candidates


Ldap backup and restore using slapcat / slapadd

Backup

For the configuration use the the 0 since it is the first database.

$ sudo slapcat -n 0 -l config.ldif

For the organisation use the the 1 since it is the second database.

$ sudo slapcat -n 1 -l example.local.ldif


Restore

Make sure you have stopped slapd before doing this.

You can use slapadd -n 0/1 to restore the respective databases.

$ sudo slapadd -n 0 -l config.ldif
$ sudo slapadd -n 1 -l example.local.ldif

Be careful to check if your restored databases end up in /var/lib/ldap with the correct permissions.

The owner should be openldap:openldap and the permissions 0600

Disable anonymous binding

If required you can disable anonymous binding.

Taken from http://serverfault.com/questions/325912/disallow-global-anonymous-bind-with-cn-config

Changing the default behaviour

Create a file disable_anon_backend.ldif

dn: olcDatabase={1}hdb,cn=config
add: olcRequires
olcRequires: authc

*note depending on your choice during installation the hdb could be mdb.

Create a file disable_anon_frontend.ldif

dn: olcDatabase={-1}frontend,cn=config
add: olcRequires
olcRequires: authc

Use ldapmodify to commit these changes.

$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f disable_anon_frontend.ldif
$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f disable_anon_backend.ldif

Testing if it works

After this the following should not be possible anymore.

$ sudo ldapsearch -xLLL -b dc=example,dc=local uid=john

The following should work.

$ sudo ldapsearch -x -D cn=admin,dc=example,dc=local -W -b dc=example,dc=local


Modify kopano ldap.cfg
ldap_bind_user = cn=admin,dc=example,dc=local
ldap_bind_passwd = writtendownearlier

Restart the kopano server

$ sudo service kopano-server restart


Check kopano users list
$ sudo kopano-admin -l


Related articles

$ sudo ldapadd -x -D cn=admin,dc=example,dc=local -W -f user.ldif