Zimbra Directory Service (LDAP): Difference between revisions

No edit summary
 
No edit summary
 
(8 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{BC|Community Sandbox}}
__FORCETOC__
<div class="col-md-12 ibox-content">
=Zimbra Directory Service (LDAP)=
{{KB|{{Unsupported}}|{{ZCS 7.0}}|{{ZCS 8.0}}|}}
{{Archive}}{{WIP}}(From Zimbra 4.0 docs)
The Zimbra LDAP service is a directory service running a version of the OpenLDAP software that has the Zimbra schema already installed. This chapter describe how the directory service is used for user authentication and account configuration and management.
The Zimbra LDAP service is a directory service running a version of the OpenLDAP software that has the Zimbra schema already installed. This chapter describe how the directory service is used for user authentication and account configuration and management.


Line 23: Line 30:
</div><div class="Body">
</div><div class="Body">


The following figure shows traffic between the Zimbra-LDAP directory server and the other servers in the Zimbra system. The Zimbra MTA and the Zimbra mailbox server read from, or write to, the LDAP database on the directory server. The edge MTA does not connect to the LDAP database; instead, it uses the DNS server’s MX entry to determine where to direct mail.
The figure below shows traffic between the Zimbra-LDAP directory server and the other servers in the Zimbra system. The Zimbra MTA and the Zimbra mailbox server read from, or write to, the LDAP database on the directory server. The edge MTA does not connect to the LDAP database; instead, it uses the DNS server’s MX entry to determine where to direct mail.


</div><div class="Body">
</div><div class="Body">
Line 29: Line 36:
The Zimbra clients connect through the Zimbra server, which in turn connects to LDAP<span class="Symbol">. </span>
The Zimbra clients connect through the Zimbra server, which in turn connects to LDAP<span class="Symbol">. </span>


</div><div class="FigureTitle">Figure 4: LDAP Directory Traffic</div><div class="Anchor">[[Image:5_Zimbra_LDAP.4.1.1.jpg]]</div><div class="Body">
</div><div class="FigureTitle">
 
Figure 4: LDAP Directory Traffic
 
</div><div class="Anchor">
 
[[Image:5_Zimbra_LDAP.4.1.1.jpg]]
 
</div><div class="Body">


At the core of every LDAP implementation is a database organized using a <span class="Emphasis">schema</span>. The schema specifies the types of objects that are stored in the database, and what types of attributes they have.
At the core of every LDAP implementation is a database organized using a <span class="Emphasis">schema</span>. The schema specifies the types of objects that are stored in the database, and what types of attributes they have.
Line 35: Line 50:
</div><div class="Body">
</div><div class="Body">


An LDAP directory entry consists of a collection of attributes and has a globally unique <span style="font-style: italic;">distinguished name</span> (DN). The attributes allowed for an entry are determined by the <span class="Emphasis">object classes</span> associated with that entry. The values of the object class attributes determine the schema rules the entry must follow.
An LDAP directory entry consists of a collection of attributes and has a globally unique ''distinguished name'' (DN). The attributes allowed for an entry are determined by the <span class="Emphasis">object classes</span> associated with that entry. The values of the object class attributes determine the schema rules the entry must follow.


</div><div class="Body">
</div><div class="Body">
Line 53: Line 68:
LDAP directories are arranged in an hierarchal tree-like structure. In the Zimbra system, the structure is arranged based on Internet domain names. LDAP entries typically include items such as user accounts, organizations, or servers.
LDAP directories are arranged in an hierarchal tree-like structure. In the Zimbra system, the structure is arranged based on Internet domain names. LDAP entries typically include items such as user accounts, organizations, or servers.


</div><div class="Body">
</div><div class="Body"> The figure below shows the Zimbra LDAP hierarchy. Each type of entry (object) has certain associated object classes.</div><div class="FigureTitle">
 
Figure 5: Zimbra LDAP Hierarchy
 
</div><div class="Anchor">


The following figure shows the Zimbra LDAP hierarchy. Each type of entry (object) has certain associated object classes.
[[Image:5_Zimbra_LDAP.4.1.2.jpg]]


</div><div class="FigureTitle">Figure 5: Zimbra LDAP Hierarchy</div><div class="Anchor">[[Image:5_Zimbra_LDAP.4.1.2.jpg]]</div><div class="Body">
</div><div class="Body">


For a complete listing of the Zimbra auxiliary object classes, see the Zimbra LDAP Schema.
For a complete listing of the Zimbra auxiliary object classes, see the Zimbra LDAP Schema.
Line 71: Line 90:
</div><div class="Body">
</div><div class="Body">


All attributes and object classes specifically created for Zimbra are prefaced by “zimbra”, as in <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraMailRecipient</span> object class or the <span class="attribute">zimbraAttachmentsBlocked</span> attribute.
All attributes and object classes specifically created for Zimbra are prefaced by “zimbra”, as in <span class="attributes">zimbraMailRecipient</span> object class or the <span class="attribute">zimbraAttachmentsBlocked</span> attribute.


</div><div class="Body">
</div><div class="Body">
Line 77: Line 96:
The Zimbra schema assumes a baseline schema. In the OpenLDAP installer package included with the Zimbra system, the following schema files are included in the OpenLDAP implementation:
The Zimbra schema assumes a baseline schema. In the OpenLDAP installer package included with the Zimbra system, the following schema files are included in the OpenLDAP implementation:


</div><div class="Bulleted1_outer" style="margin-left: 0pt;vertical-align: baseline;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt; vertical-align: baseline">


{| id="SummaryNotRequired_np1036842"
{| id="SummaryNotRequired_np1036842"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;color: #000000; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-transform: normal;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap; font-style: normal; font-variant: normal; text-transform: none">'''<font color="#000000"><span class="BulletSymbol">• </span></font>'''</div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner" style="color: #000000; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-transform: normal;"><span class="Strong">core.schema</span></div>
<div class="Bulleted1_inner" style="font-style: normal; font-variant: normal; text-transform: none">'''<font color="#000000"><span class="Strong">core.schema</span></font>'''</div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;vertical-align: baseline;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt; vertical-align: baseline">


{| id="SummaryNotRequired_np1036843"
{| id="SummaryNotRequired_np1036843"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;color: #000000; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-transform: normal;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap; font-style: normal; font-variant: normal; text-transform: none">'''<font color="#000000"><span class="BulletSymbol">• </span></font>'''</div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner" style="color: #000000; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-transform: normal;"><span class="Strong">cosine.schema</span></div>
<div class="Bulleted1_inner" style="font-style: normal; font-variant: normal; text-transform: none">'''<font color="#000000"><span class="Strong">cosine.schema</span></font>'''</div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;vertical-align: baseline;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt; vertical-align: baseline">


{| id="SummaryNotRequired_np1036844"
{| id="SummaryNotRequired_np1036844"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;color: #000000; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-transform: normal;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap; font-style: normal; font-variant: normal; text-transform: none">'''<font color="#000000"><span class="BulletSymbol">• </span></font>'''</div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner" style="color: #000000; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-transform: normal;"><span class="Strong">inetorgperson.schema</span></div>
<div class="Bulleted1_inner" style="font-style: normal; font-variant: normal; text-transform: none">'''<font color="#000000"><span class="Strong">inetorgperson.schema</span></font>'''</div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;vertical-align: baseline;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt; vertical-align: baseline">


{| id="SummaryNotRequired_np1036845"
{| id="SummaryNotRequired_np1036845"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;color: #000000; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-transform: normal;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap; font-style: normal; font-variant: normal; text-transform: none">'''<font color="#000000"><span class="BulletSymbol">• </span></font>'''</div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner" style="color: #000000; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-transform: normal;"><span class="Strong">zimbra.schema</span></div>
<div class="Bulleted1_inner" style="font-style: normal; font-variant: normal; text-transform: none">'''<font color="#000000"><span class="Strong">zimbra.schema</span></font>'''</div>
|}
|}


Line 125: Line 144:
==Account Authentication==
==Account Authentication==


</div><div class="BodyAfterHead">This section describes the account authentication mechanisms and formatting directives supported:</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="BodyAfterHead">
 
This section describes the account authentication mechanisms and formatting directives supported:
 
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1036771"
{| id="SummaryNotRequired_np1036771"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner"><span class="attribute">Internal</span></div>
<div class="Bulleted1_inner"><span class="attribute">Internal</span></div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1036772"
{| id="SummaryNotRequired_np1036772"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner"><span class="attribute">External LDAP</span></div>
<div class="Bulleted1_inner"><span class="attribute">External LDAP</span></div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;vertical-align: baseline;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt; margin-bottom: 2.0pt; margin-top: 5.0pt; vertical-align: baseline">


{| id="SummaryNotRequired_np1038793"
{| id="SummaryNotRequired_np1038793"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;color: #000000; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: bold; text-transform: normal;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap; font-style: normal; font-variant: normal; text-transform: none">'''<font color="#000000"><span class="BulletSymbol">• </span></font>'''</div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner" style="color: #000000; font-family: Arial; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: bold; text-transform: normal;"><span class="attribute">External Active Directory</span></div>
<div class="Bulleted1_inner" style="font-style: normal; font-variant: normal; text-transform: none">'''<font color="#000000"><span class="attribute">External Active Directory</span></font>'''</div>
|}
|}


</div><div class="Body">
</div><div class="Body">


The <span style="font-weight: bold;">Internal</span> authentication method assumes the Zimbra schema running on the OpenLDAP directory server.
The '''Internal''' authentication method assumes the Zimbra schema running on the OpenLDAP directory server.


</div><div class="Body">
</div><div class="Body">


The <span style="font-weight: bold;">External LDAP</span> and <span style="font-weight: bold;">External Active Directory </span>authentication methods attempt to bind to the specified LDAP server, using the supplied user name and password. These method can be used if the email environment uses Microsoft Active Directory directory services for authentication and the Zimbra-LDAP directory services for all other Zimbra-related transactions. This requires that users exist in both OpenLDAP and in the Active Directory servers.
The '''External LDAP''' and '''External Active Directory '''authentication methods attempt to bind to the specified LDAP server, using the supplied user name and password. These method can be used if the email environment uses Microsoft Active Directory directory services for authentication and the Zimbra-LDAP directory services for all other Zimbra-related transactions. This requires that users exist in both OpenLDAP and in the Active Directory servers.


</div><div class="Body">
</div><div class="Body">


The method type is set on a per-domain basis, using the <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraAuthMech</span> attribute, with other information also coming from the domain. If this attribute is not set, the default is to use the internal method as the authentication.
The method type is set on a per-domain basis, using the <span class="attributes">zimbraAuthMech</span> attribute, with other information also coming from the domain. If this attribute is not set, the default is to use the internal method as the authentication.


</div><div class="a_0032Heading">
</div><div class="a_0032Heading">
Line 173: Line 196:
</div><div class="Body">
</div><div class="Body">


For accounts stored in the OpenLDAP server, the <span class="attributes" style="font-size: 10pt; font-weight: bold;">userPassword</span> attribute stores a salted-SHA1 (SSHA) digest of the user’s password. This information is not used to connect to the directory server; it is only used to compare with the information on the OpenLDAP server, using a pool of re-usable administrator LDAP connections.
For accounts stored in the OpenLDAP server, the <span class="attributes">userPassword</span> attribute stores a salted-SHA1 (SSHA) digest of the user’s password. This information is not used to connect to the directory server; it is only used to compare with the information on the OpenLDAP server, using a pool of re-usable administrator LDAP connections.


</div><div class="a_0032Heading">
</div><div class="a_0032Heading">
Line 185: Line 208:
</div><div class="Body">
</div><div class="Body">


Two additional domain attributes are required for the external mechanism:<span class="attributes" style="font-size: 10pt; font-weight: bold;"> </span><span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraAuthLdapURL</span> and <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraAuthLdapBindDn</span>.
Two additional domain attributes are required for the external mechanism:<span class="attributes">zimbraAuthLdapURL</span> and <span class="attributes">zimbraAuthLdapBindDn</span>.


</div><div class="a_0033Heading">
</div><div class="a_0033Heading">


=====zimbraAuthLdapURL Attribute and SSL=====
====zimbraAuthLdapURL Attribute and SSL====


</div><div class="Body">
</div><div class="Body">


The <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraAuthLdapURL</span> attribute contains the URL of the Active Directory server to bind to. This should be in the form:
The <span class="attributes">zimbraAuthLdapURL</span> attribute contains the URL of the Active Directory server to bind to. This should be in the form:


</div><div class="Body">
</div><div class="Body">


<span class="Code">ldap://</span> <span class="Emphasis" style="font-family: Arial; font-size: 11pt; font-weight: normal;">ldapserver</span> <span class="Code"><nowiki>:</nowiki></span> <span class="Emphasis" style="font-family: Arial; font-size: 11pt; font-weight: normal;">port</span> <span class="Code">/</span>
'''ldap://ldapserver:port/'''


</div><div class="Body">
</div><div class="Body">


where <span class="Emphasis" style="font-family: "Courier New";">ldapserver</span> is the IP address or host name of the Active Directory server, and <span class="Emphasis" style="font-family: "Courier New";">port</span> is the port number. You can also use the fully qualified host name instead of the port number.
where <span class="Emphasis"><font face="&quot;Courier New&quot;">ldapserver</font></span> is the IP address or host name of the Active Directory server, and <span class="Emphasis"><font face="&quot;Courier New&quot;">port</font></span> is the port number. You can also use the fully qualified host name instead of the port number.


</div><div class="Body">
</div><div class="Body">
Line 207: Line 230:
Examples include:
Examples include:


</div><div class="Body" style="color: #000000; font-family: "Times New Roman"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: bold; text-transform: normal; vertical-align: baseline;">
</div><div class="Body" style="font-style: normal; font-variant: normal; margin-bottom: 6.0pt; margin-top: 6.0pt; text-transform: none; vertical-align: baseline">'''<font color="#000000"> <span class="Code">ldap://server1:389 </span><span class="Code"><br /></span><span class="Code">ldap://exch1.acme.com</span> </font>'''</div><div class="Body">
 
<span class="Code">ldap://server1:389 </span> <span class="Code"><br /></span> <span class="Code">ldap://exch1.acme.com</span>
 
</div><div class="Body">


For SSL connection, use <span class="attribute">ldaps</span><span class="Code"><nowiki>:</nowiki></span> instead of <span class="attribute">ldap:</span>. If the SSL version is used, the SSL certificate used by the server must be configured as a trusted certificate.
For SSL connection, use <span class="attribute">ldaps</span><span class="Code"><nowiki>:</nowiki></span> instead of <span class="attribute">ldap:</span>. If the SSL version is used, the SSL certificate used by the server must be configured as a trusted certificate.
Line 217: Line 236:
</div><div class="a_0033Heading">
</div><div class="a_0033Heading">


=====zimbraAuthLdapBindDn Attribute=====
====zimbraAuthLdapBindDn Attribute====


</div><div class="Body">
</div><div class="Body">


The <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraAuthLdapBindDn</span> attribute is a format string used to determine which user name to use when binding to the Active Directory server.
The <span class="attributes">zimbraAuthLdapBindDn</span> attribute is a format string used to determine which user name to use when binding to the Active Directory server.


</div><div class="Body">
</div><div class="Body">
Line 227: Line 246:
During the authentication process, the user name starts out in the format:
During the authentication process, the user name starts out in the format:


</div><div class="Body">
'''user@domain.com'''
 
<span class="Emphasis">user</span> <span class="Code">@</span> <span class="Emphasis" style="font-family: Arial; font-size: 11pt; font-weight: normal;">domain</span> <span class="Code">.</span> <span class="Emphasis" style="font-family: Arial; font-size: 11pt; font-weight: normal;">com</span>
 
</div><div class="Body">


The user name may need to be transformed into a valid LDAP bind dn (distinguished name). In the case of Active Directory, that bind dn might be in a different domain
The user name may need to be transformed into a valid LDAP bind dn (distinguished name). In the case of Active Directory, that bind dn might be in a different domain
Line 243: Line 258:
Zimbra uses auxiliary object classes to add Zimbra-specific attributes to existing objects such as an account. The LDAP objects used in Zimbra include the following:
Zimbra uses auxiliary object classes to add Zimbra-specific attributes to existing objects such as an account. The LDAP objects used in Zimbra include the following:


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1035418"
{| id="SummaryNotRequired_np1035418"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner">Accounts</div>
<div class="Bulleted1_inner">Accounts</div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1035419"
{| id="SummaryNotRequired_np1035419"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner">Class of Service (COS)</div>
<div class="Bulleted1_inner">Class of Service (COS)</div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1035420"
{| id="SummaryNotRequired_np1035420"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner">Domains</div>
<div class="Bulleted1_inner">Domains</div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1035422"
{| id="SummaryNotRequired_np1035422"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner">Distribution Lists</div>
<div class="Bulleted1_inner">Distribution Lists</div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1035423"
{| id="SummaryNotRequired_np1035423"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner">Recipients</div>
<div class="Bulleted1_inner">Recipients</div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1035424"
{| id="SummaryNotRequired_np1035424"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner">Servers</div>
<div class="Bulleted1_inner">Servers</div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1035425"
{| id="SummaryNotRequired_np1035425"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner">Global Configurations</div>
<div class="Bulleted1_inner">Global Configurations</div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1035426"
{| id="SummaryNotRequired_np1035426"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner">Aliases</div>
<div class="Bulleted1_inner">Aliases</div>
|}
</div><div class="Bulleted1_outer" style="margin-left: 0pt">
{| id="SummaryNotRequired_np1058267"
|- style="vertical-align: baseline"
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
<div class="Bulleted1_inner">TimeZone</div>
|}
</div><div class="Bulleted1_outer" style="margin-left: 0pt">
{| id="SummaryNotRequired_np1058268"
|- style="vertical-align: baseline"
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
<div class="Bulleted1_inner">Zimlet</div>
|}
</div><div class="Bulleted1_outer" style="margin-left: 0pt">
{| id="SummaryNotRequired_np1058269"
|- style="vertical-align: baseline"
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
<div class="Bulleted1_inner">CalendarResource</div>
|}
|}


</div><div class="a_0033Heading">
</div><div class="a_0033Heading">


===Accounts Object===
====Accounts Object====


</div><div class="BodyAfterHead">
</div><div class="BodyAfterHead">


An account object represents an account on the Zimbra mailbox server that can be logged into. Account entrees are either administrators or user accounts that can be logged into. The object class name is <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraAccount</span>. This object class extends the <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraMailRecipient </span>object class.
An account object represents an account on the Zimbra mailbox server that can be logged into. Account entrees are either administrators or user accounts that can be logged into. The object class name is <span class="attributes">zimbraAccount</span>. This object class extends the <span class="attributes">zimbraMailRecipient </span>object class.


</div><div class="Body">
</div><div class="Body">


The object class <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraMailRecipient</span> is a directory entry that represents an entity that can receives mail. This is a visible external mail address that is expanded through aliases or forwarding into one or more internal/external addresses.
The object class <span class="attributes">zimbraMailRecipient</span> is a directory entry that represents an entity that can receives mail. This is a visible external mail address that is expanded through aliases or forwarding into one or more internal/external addresses.


</div><div class="Body">
</div><div class="Body">
Line 339: Line 384:
All accounts have the following properties:
All accounts have the following properties:


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1040634"
{| id="SummaryNotRequired_np1040634"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner">A name in the format of user@some.domain</div>
<div class="Bulleted1_inner">A name in the format of user@some.domain</div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1040638"
{| id="SummaryNotRequired_np1040638"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner">A unique ID that never changes and is never reused</div>
<div class="Bulleted1_inner">A unique ID that never changes and is never reused</div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1040639"
{| id="SummaryNotRequired_np1040639"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner">A set of attributes, some of which are user-modifiable (options) and others that are only configurable by the system administrator </div>
<div class="Bulleted1_inner">A set of attributes, some of which are user-modifiable (options) and others that are only configurable by the system administrator </div>
Line 375: Line 420:
</div><div class="Body">
</div><div class="Body">


For more about account provisioning, see the <span class="WebJump">[../managing_zcs.7.1.html#1038197 Managing User Accounts ]</span><span class="WebJump">[../managing_zcs.7.1.html#1038197 section, Chapter]</span><span class="WebJump">[../managing_zcs.7.1.html#1038197  ]</span><span class="WebJump">[../managing_zcs.7.1.html#1038197 7]</span><span class="WebJump">.</span>
For more about account provisioning, see [[Managing ZCS Configuration]].


</div><div class="a_0033Heading">
</div><div class="a_0033Heading">


===Class of Service (COS) Object===
====Class of Service (COS) Object====


</div><div class="Body">
</div><div class="Body">


Class of Service is a Zimbra-specific object that defines the default attributes an email account has and what features are added or denied. The COS controls features, default preference settings, mailbox quotas, message lifetime, password restrictions, attachment blocking and server pools for creation of new accounts. The object class name is <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraCOS.</span>
Class of Service is a Zimbra-specific object that defines the default attributes an email account has and what features are added or denied. The COS controls features, default preference settings, mailbox quotas, message lifetime, password restrictions, attachment blocking and server pools for creation of new accounts. The object class name is <span class="attributes">zimbraCOS.</span>


</div><div class="Body">
</div><div class="Body">
Line 399: Line 444:
</div><div class="a_0033Heading">
</div><div class="a_0033Heading">


===<span class="attributes">Domains </span>Object===
====Domains Object====


</div><div class="Body">
</div><div class="Body">


A Domains object represents an email domain such as <span style="font-style: italic;">ace.</span><span style="font-style: italic; font-weight: bold;">com</span> or <span style="font-style: italic;">zink.</span><span style="font-style: italic; font-weight: bold;">org</span><span style="font-style: italic;">. </span>A domain must exist before email addressed to users in that domain can be delivered. The object class name is <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraDomain</span>.
A Domains object represents an email domain such as ''ace.'''''''com''''' or ''zink.'''''''org'''''''. ''A domain must exist before email addressed to users in that domain can be delivered. The object class name is <span class="attributes">zimbraDomain</span>.


</div><div class="a_0033Heading">
</div><div class="a_0033Heading">


===Distribution Lists<span class="attributes"> </span>Object===
====Distribution Lists Object====


</div><div class="BodyAfterHead">
</div><div class="BodyAfterHead">


Distribution Lists, also known as mailing lists, are used to send mail to all members of a list by sending a single email to the list address. The object class name is <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraDistributionList</span>.
Distribution Lists, also known as mailing lists, are used to send mail to all members of a list by sending a single email to the list address. The object class name is <span class="attributes">zimbraDistributionList</span>.


</div><div class="a_0033Heading">
</div><div class="a_0033Heading">


===Recipient<span class="attributes"> </span>Object===
====Recipient Object====


</div><div class="BodyAfterHead">
</div><div class="BodyAfterHead">


<span class="attributes" style="font-size: 10pt; font-weight: bold;">Recipient </span>object represents an entity that can receive mail. An external email address exists, and the recipient can be expanded through aliases or forwarding into one or more internal/external addresses. The object class name is <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraMailRecipient</span>. This object class name is only used in conjunction with <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraAccount</span> and <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraDistributionlist</span> classes.
<span class="attributes">Recipient </span>object represents an entity that can receive mail. An external email address exists, and the recipient can be expanded through aliases or forwarding into one or more internal/external addresses. The object class name is <span class="attributes">zimbraMailRecipient</span>. This object class name is only used in conjunction with <span class="attributes">zimbraAccount</span> and <span class="attributes">zimbraDistributionlist</span> classes.
 
</div><div class="a_0033Heading">


</div><div class="a_0033Heading">Servers<span class="attributes"> </span>Object</div><div class="BodyAfterHead">
====Servers Object====


The servers object represents a particular server in the Zimbra system that has one or more of the Zimbra software packages installed. During the installation, the software is automatically registered on the OpenLDAP server. The object class name is <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraServer</span>. Attributes describe server configuration information, such as which services are running on the server.
</div><div class="BodyAfterHead">
 
The servers object represents a particular server in the Zimbra system that has one or more of the Zimbra software packages installed. During the installation, the software is automatically registered on the OpenLDAP server. The object class name is <span class="attributes">zimbraServer</span>. Attributes describe server configuration information, such as which services are running on the server.


</div><div class="Body">
</div><div class="Body">
Line 431: Line 480:
</div><div class="a_0033Heading">
</div><div class="a_0033Heading">


===Global Configuration<span class="attributes"> </span>Object===
====Global Configuration Object====


</div><div class="BodyAfterHead">
</div><div class="BodyAfterHead">


The Global Configuration object specifies default values for the following objects: server, account, COS, and domain. If the attributes are not set for other objects, the values are inherited from the global settings. The object class name is <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraGlobalConfig</span>.
The Global Configuration object specifies default values for the following objects: server, account, COS, and domain. If the attributes are not set for other objects, the values are inherited from the global settings. The object class name is <span class="attributes">zimbraGlobalConfig</span>.


</div><div class="Body">
</div><div class="Body">
Line 443: Line 492:
</div><div class="a_0033Heading">
</div><div class="a_0033Heading">


===Alias<span class="attributes"> </span>Object===
====Alias Object====
 
</div><div class="BodyAfterHead">
 
Alias object is a placeholders in the directory to reserve a name. The object class name is <span class="attributes">zimbraAlias</span>. The attribute points to another entry.
 
</div><div class="a_0033Heading">
 
====TimeZone Object====
 
</div><div class="BodyAfterHead">
 
TimeZone object is a list of well-known time zones used by the web client. The object class name is zimbraTimeZone.
 
</div><div class="a_0033Heading">
 
====Zimlet Object====
 
</div><div class="BodyAfterHead">
 
Zimlet Object defines Zimlets that are installed and configured in ZCS. The object class name is zimbraZimletEntry. See the Working with Zimlets chapter for more information about Zimlets.
 
</div><div class="a_0033Heading">
 
====CalendarResource Object====


</div><div class="BodyAfterHead">
</div><div class="BodyAfterHead">


Alias object is a placeholders in the directory to reserve a name. The object class name is <span class="attributes" style="font-size: 10pt; font-weight: bold;">zimbraAlias</span>. The attribute points to another entry.
CalendarResource object defines a calendar resource such as conference rooms or equipment that can be selected for a meeting. The object class name is zimbraCalendarResource.


</div><div class="a_0031Heading">
</div><div class="a_0031Heading">
Line 461: Line 534:
For each domain used in Zimbra, you can choose from the following GAL search options:
For each domain used in Zimbra, you can choose from the following GAL search options:


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1035531"
{| id="SummaryNotRequired_np1035531"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner">Use an external LDAP server for the GAL</div>
<div class="Bulleted1_inner">Use an external LDAP server for the GAL</div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1035535"
{| id="SummaryNotRequired_np1035535"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner">Use the Zimbra implementation in OpenLDAP</div>
<div class="Bulleted1_inner">Use the Zimbra implementation in OpenLDAP</div>
|}
|}


</div><div class="Bulleted1_outer" style="margin-left: 0pt;">
</div><div class="Bulleted1_outer" style="margin-left: 0pt">


{| id="SummaryNotRequired_np1035536"
{| id="SummaryNotRequired_np1035536"
|- style="vertical-align: baseline;"
|- style="vertical-align: baseline"
|
|
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap;"><span class="BulletSymbol">• </span></div>
<div class="Bulleted1_inner" style="width: 14.4pt; white-space: nowrap"><span class="BulletSymbol">• </span></div>
| width="100%" |
| width="100%" |
<div class="Bulleted1_inner">Include both external LDAP server and OpenLDAP in GAL searches</div>
<div class="Bulleted1_inner">Include both external LDAP server and OpenLDAP in GAL searches</div>
Line 493: Line 566:
</div><div class="a_0033Heading">
</div><div class="a_0033Heading">


===GAL Searches in Zimbra Client===
====GAL Searches in Zimbra Client====


</div><div class="Body">
</div><div class="Body">


The Zimbra client can search the GAL. The GAL se arch returns a list of directory entries that match the user’s search.
The Zimbra client can search the GAL. The GAL search returns a list of directory entries that match the user’s search.


</div><div class="Body">
</div><div class="Body">
Line 503: Line 576:
When the user supplies a name to search for, that name is turned into an LDAP search filter similar to the following example:
When the user supplies a name to search for, that name is turned into an LDAP search filter similar to the following example:


</div><div class="Code" style="color: #000000; font-family: "Courier New"; font-size: 9pt; font-style: normal; font-variant: normal; font-weight: normal; text-transform: normal; vertical-align: baseline;">'''(|(cn = %s*)(sn=%s*)(gn=%s*)(mail=%s*)) <br /> (zimbraMailDeliveryAddress = %s*) <br /> (zimbraMailAlias=%s*) <br /> (zimbraMailAddress = %s*)'''</div><div class="Body">
</div><div class="Code">
 
(|(cn = %s*)(sn=%s*)(gn=%s*)(mail=%s*))
 
</div><div class="Code">
 
(zimbraMailDeliveryAddress = %s*)
 
</div><div class="Code">
 
(zimbraMailAlias=%s*)
 
</div><div class="Code">
 
(zimbraMailAddress = %s*)
 
</div><div class="Body">


The string “%s” is replaced with the name the user is searching for.
The string “%s” is replaced with the name the user is searching for.
Line 509: Line 598:
</div><div class="a_0033Heading">
</div><div class="a_0033Heading">


===GAL Attributes in Zimbra===
====GAL Attributes in Zimbra====


</div><div class="Body">
<div class="Body">


Two possible sources for GAL information are the Zimbra server and the Active Directory server. The relevant LDAP/Active Directory fields are referenced in the Zimbra schema under the same names as listed in the Active Directory schema.
Two possible sources for GAL information are the Zimbra server and the Active Directory server. The relevant LDAP/Active Directory fields are referenced in the Zimbra schema under the same names as listed in the Active Directory schema.


</div><div class="Body">[#1035577 Table][#1035577  ][#1035577 2] maps generic GAL search attributes to their Zimbra contact fields.</div><div class="Anchor"><div> </div></div><div>
</div><div class="Body">


[[LDAP Mapped Attributes]] table maps generic GAL search attributes to their Zimbra contact fields.


 
====Zimbra GAL Search Parameters====
</div><div class="a_0033Heading">
 
===Zimbra GAL Search Parameters===


</div><div class="Body">
</div><div class="Body">
Line 529: Line 616:
</div><div class="a_0033Heading">
</div><div class="a_0033Heading">


===Modifying Attributes===
====Modifying Attributes====


</div><div class="Body">
</div><div class="Body">
Line 546: Line 633:


<span class="Bold">Important: </span>Do not use any LDAP browsers to change the Zimbra LDAP content.
<span class="Bold">Important: </span>Do not use any LDAP browsers to change the Zimbra LDAP content.
</div>
{{Article Footer|Zimbra Collaboration 7.0, 6.0|04/16/2014}}
[[Category:Architecture and Components]]
[[Category:LDAP]]

Latest revision as of 14:11, 13 July 2015

Zimbra Directory Service (LDAP)

   KB 1450        Last updated on 2015-07-13  




0.00
(0 votes)

(From Zimbra 4.0 docs)

The Zimbra LDAP service is a directory service running a version of the OpenLDAP software that has the Zimbra schema already installed. This chapter describe how the directory service is used for user authentication and account configuration and management.

Note: Zimbra also supports integration with Microsoft’s Active Directory Server. Contact Zimbra support for more detailed information on specific directory implementation scenarios.

The LDAP server is identified when the Zimbra software is installed. Each server has its own LDAP entry that includes attributes specifying operating parameters. In addition, there is a global configuration object that sets defaults for any server whose entry does not specify every attribute.

A selected subset of these attributes can be modified through the Zimbra administration console; others can be changed through the CLI utility.

Directory Services Overview

LDAP directory services provide a centralized repository for information about users and devices that are authorized to use your network. The central repository used for Zimbra’s LDAP data is the OpenLDAP directory server.

The figure below shows traffic between the Zimbra-LDAP directory server and the other servers in the Zimbra system. The Zimbra MTA and the Zimbra mailbox server read from, or write to, the LDAP database on the directory server. The edge MTA does not connect to the LDAP database; instead, it uses the DNS server’s MX entry to determine where to direct mail.

The Zimbra clients connect through the Zimbra server, which in turn connects to LDAP.

Figure 4: LDAP Directory Traffic

5 Zimbra LDAP.4.1.1.jpg

At the core of every LDAP implementation is a database organized using a schema. The schema specifies the types of objects that are stored in the database, and what types of attributes they have.

An LDAP directory entry consists of a collection of attributes and has a globally unique distinguished name (DN). The attributes allowed for an entry are determined by the object classes associated with that entry. The values of the object class attributes determine the schema rules the entry must follow.

The object classes determine what type of object the entry refers to and what type of data can be stored for that entry. An entry’s object classes that determines what kind of entry it is, is called a structural object class and cannot be changed. Other object classes are called auxiliary and may be added to or deleted from the entry.

Use of auxiliary object classes in LDAP allows for an object class to be combined with an existing object class. For example, an entry with structural object class inetOrgPerson, and auxiliary object class zimbraAccount, would be an account, either administrator or end-user. An entry with the object class zimbraServer would be a server in the Zimbra system that has one or more Zimbra software packages installed.

LDAP Hierarchy

LDAP directories are arranged in an hierarchal tree-like structure. In the Zimbra system, the structure is arranged based on Internet domain names. LDAP entries typically include items such as user accounts, organizations, or servers.

The figure below shows the Zimbra LDAP hierarchy. Each type of entry (object) has certain associated object classes.

Figure 5: Zimbra LDAP Hierarchy

5 Zimbra LDAP.4.1.2.jpg

For a complete listing of the Zimbra auxiliary object classes, see the Zimbra LDAP Schema.

Zimbra Schema

Every LDAP implementation has a schema that defines its domain structure, account attributes, and other data structures in use by the organization. Zimbra includes a custom LDAP schema that extends the generic schema included with OpenLDAP software and is designed to potentially coexist with existing directory installations. The Zimbra server, the Zimbra administration console, the command-line account provisioning, and the management utilities require the Zimbra schema.

All attributes and object classes specifically created for Zimbra are prefaced by “zimbra”, as in zimbraMailRecipient object class or the zimbraAttachmentsBlocked attribute.

The Zimbra schema assumes a baseline schema. In the OpenLDAP installer package included with the Zimbra system, the following schema files are included in the OpenLDAP implementation:

core.schema
cosine.schema
inetorgperson.schema
zimbra.schema

Note: You cannot modify the Zimbra schema.

Account Authentication

This section describes the account authentication mechanisms and formatting directives supported:

Internal
External LDAP
External Active Directory

The Internal authentication method assumes the Zimbra schema running on the OpenLDAP directory server.

The External LDAP and External Active Directory authentication methods attempt to bind to the specified LDAP server, using the supplied user name and password. These method can be used if the email environment uses Microsoft Active Directory directory services for authentication and the Zimbra-LDAP directory services for all other Zimbra-related transactions. This requires that users exist in both OpenLDAP and in the Active Directory servers.

The method type is set on a per-domain basis, using the zimbraAuthMech attribute, with other information also coming from the domain. If this attribute is not set, the default is to use the internal method as the authentication.

The Internal Authentication Mechanism

For accounts stored in the OpenLDAP server, the userPassword attribute stores a salted-SHA1 (SSHA) digest of the user’s password. This information is not used to connect to the directory server; it is only used to compare with the information on the OpenLDAP server, using a pool of re-usable administrator LDAP connections.

External LDAP and External Active Directory Authentication Mechanism

Unlike the internal authentication mechanism, the external authentication mechanism attempts to bind to the directory server using the supplied user name and password. If this bind succeeds, the connection is closed and the password is considered valid.

Two additional domain attributes are required for the external mechanism:zimbraAuthLdapURL and zimbraAuthLdapBindDn.

zimbraAuthLdapURL Attribute and SSL

The zimbraAuthLdapURL attribute contains the URL of the Active Directory server to bind to. This should be in the form:

ldap://ldapserver:port/

where ldapserver is the IP address or host name of the Active Directory server, and port is the port number. You can also use the fully qualified host name instead of the port number.

Examples include:

ldap://server1:389
ldap://exch1.acme.com

For SSL connection, use ldaps: instead of ldap:. If the SSL version is used, the SSL certificate used by the server must be configured as a trusted certificate.

zimbraAuthLdapBindDn Attribute

The zimbraAuthLdapBindDn attribute is a format string used to determine which user name to use when binding to the Active Directory server.

During the authentication process, the user name starts out in the format:

user@domain.com

The user name may need to be transformed into a valid LDAP bind dn (distinguished name). In the case of Active Directory, that bind dn might be in a different domain

Zimbra Objects

Zimbra uses auxiliary object classes to add Zimbra-specific attributes to existing objects such as an account. The LDAP objects used in Zimbra include the following:

Accounts
Class of Service (COS)
Domains
Distribution Lists
Recipients
Servers
Global Configurations
Aliases
TimeZone
Zimlet
CalendarResource

Accounts Object

An account object represents an account on the Zimbra mailbox server that can be logged into. Account entrees are either administrators or user accounts that can be logged into. The object class name is zimbraAccount. This object class extends the zimbraMailRecipient object class.

The object class zimbraMailRecipient is a directory entry that represents an entity that can receives mail. This is a visible external mail address that is expanded through aliases or forwarding into one or more internal/external addresses.

All accounts have the following properties:

A name in the format of user@some.domain
A unique ID that never changes and is never reused
A set of attributes, some of which are user-modifiable (options) and others that are only configurable by the system administrator

All user accounts are associated with a domain, so a domain must be created before creating any accounts.

For more about account provisioning, see Managing ZCS Configuration.

Class of Service (COS) Object

Class of Service is a Zimbra-specific object that defines the default attributes an email account has and what features are added or denied. The COS controls features, default preference settings, mailbox quotas, message lifetime, password restrictions, attachment blocking and server pools for creation of new accounts. The object class name is zimbraCOS.

Each account is assigned a class of service. COS is used to group accounts and define the feature levels for those accounts. For example, executives can be assigned to a COS that allows the Calendar application. By grouping accounts into specific type of COS, account features can be updated in block.

If the COS is not explicitly set, or if the COS assigned to the user no longer exists, values come from a pre-defined COS called “default”.

A COS is not restricted to a particular domain or set of domains.

Domains Object

A Domains object represents an email domain such as ace.''com or zink.''org''. A domain must exist before email addressed to users in that domain can be delivered. The object class name is zimbraDomain.

Distribution Lists Object

Distribution Lists, also known as mailing lists, are used to send mail to all members of a list by sending a single email to the list address. The object class name is zimbraDistributionList.

Recipient Object

Recipient object represents an entity that can receive mail. An external email address exists, and the recipient can be expanded through aliases or forwarding into one or more internal/external addresses. The object class name is zimbraMailRecipient. This object class name is only used in conjunction with zimbraAccount and zimbraDistributionlist classes.

Servers Object

The servers object represents a particular server in the Zimbra system that has one or more of the Zimbra software packages installed. During the installation, the software is automatically registered on the OpenLDAP server. The object class name is zimbraServer. Attributes describe server configuration information, such as which services are running on the server.

The server name is used by the Zimbra system to make a request for the server object in the directory. The server requested gets its configuration information and picks up any changes that might have been made by the administrator through the Zimbra Administrator Console.

Global Configuration Object

The Global Configuration object specifies default values for the following objects: server, account, COS, and domain. If the attributes are not set for other objects, the values are inherited from the global settings. The object class name is zimbraGlobalConfig.

Global configuration values are required and are set during installation as part of the Zimbra core package. These become the default values for the system.

Alias Object

Alias object is a placeholders in the directory to reserve a name. The object class name is zimbraAlias. The attribute points to another entry.

TimeZone Object

TimeZone object is a list of well-known time zones used by the web client. The object class name is zimbraTimeZone.

Zimlet Object

Zimlet Object defines Zimlets that are installed and configured in ZCS. The object class name is zimbraZimletEntry. See the Working with Zimlets chapter for more information about Zimlets.

CalendarResource Object

CalendarResource object defines a calendar resource such as conference rooms or equipment that can be selected for a meeting. The object class name is zimbraCalendarResource.

Company Directory/GAL

A company directory is a company-wide listing of users, usually within the organization itself, that is available to all users of the email system. Sometimes called “white pages” or global address list (GAL), Zimbra uses the company directory to look up user addresses from within the company.

For each domain used in Zimbra, you can choose from the following GAL search options:

Use an external LDAP server for the GAL
Use the Zimbra implementation in OpenLDAP
Include both external LDAP server and OpenLDAP in GAL searches

GAL Searches in Zimbra Client

The Zimbra client can search the GAL. The GAL search returns a list of directory entries that match the user’s search.

When the user supplies a name to search for, that name is turned into an LDAP search filter similar to the following example:

(|(cn = %s*)(sn=%s*)(gn=%s*)(mail=%s*))

(zimbraMailDeliveryAddress = %s*)

(zimbraMailAlias=%s*)

(zimbraMailAddress = %s*)

The string “%s” is replaced with the name the user is searching for.

GAL Attributes in Zimbra

Two possible sources for GAL information are the Zimbra server and the Active Directory server. The relevant LDAP/Active Directory fields are referenced in the Zimbra schema under the same names as listed in the Active Directory schema.

LDAP Mapped Attributes table maps generic GAL search attributes to their Zimbra contact fields.

Zimbra GAL Search Parameters

Like authentication, GAL is configured on a per-domain basis. From the administration console, you can run the GAL Configuration Wizard to configure the domain’s attributes.

Modifying Attributes

The OpenLDAP directory should not be modified directly. Any additions, changes and deletions are made through the Zimbra administration console or from the CLI utility for provisioning, zmprov.

Users modify attributes for their entry (accounts) in the OpenLDAP directory when they change their options from the Zimbra Web Client.

Administrators can also modify LDAP attributes using the command-line tools described in Appendix A: Command-Line Utilities.

Important: Do not use any LDAP browsers to change the Zimbra LDAP content.

Verified Against: Zimbra Collaboration 7.0, 6.0 Date Created: 04/16/2014
Article ID: https://wiki.zimbra.com/index.php?title=Zimbra_Directory_Service_(LDAP) Date Modified: 2015-07-13



Try Zimbra

Try Zimbra Collaboration with a 60-day free trial.
Get it now »

Want to get involved?

You can contribute in the Community, Wiki, Code, or development of Zimlets.
Find out more. »

Looking for a Video?

Visit our YouTube channel to get the latest webinars, technology news, product overviews, and so much more.
Go to the YouTube channel »

Jump to: navigation, search