Dovecot, Shared Folder und Shared Namespace

Für Benutzergruppen und TEAMs1) werden desöfteren gemeinsam genutzte Mailaccounts angefragt. Bei diesen Mailaccounts hat jeder der Beteiligten die Nutzerdaten, wie Anmeldenamen und Passworte. Natürlich müssen solceh Mailaccounts immer extra beantragt werden und ggf. nach Beendigung des Projektes wieder gelöscht werden - somit ist immer die Unterstützung eies Mail-Administrator gefordert.

Als Alternative zu diesen gemeinsam genutzten Mailkonten gibt es eine weitere Möglichkeit, Informationen mit anderen Gruppenmitgliedern teilen, nämlich gemeinsam genutzte Ordner aus einem bestehenden Mail-Account. Der Benutzer eines Mail-Postfaches kann selbst bestimmen, auf welche Ordner ein anderer Nutzer Zugriff hat, ob ein Nutzer eMails z. B. nur lesen oder auch löschen darf. Hierzu muss der Postfachinhaber einem bereits bestehenden Ordner die Benutzer und Rechte zuweisen. Diese Rechte können sowohl auf das gesamte Mailkonto als auch auf einzelne Unterordner angewendet werden. Diese gemeinsam genutzten Ordner werden dann im Posteingang des Nutzer angezeigt. Kleinere Teams können sich mittels dieser gemeinsam genutzter Ordner eine eMail-Adresse teilen, um so unter anderem die eMails zugänglich zu machen. Zusätzliche eMail-Adressen mit Mailverteilen sind somit meistens obsolete! Auch für Vertreterregelungen können vertrauenswürdige Personen Zugriff auf den eigenen Posteingang erhalten, die Nachrichten darin vorzusortieren, unwichtige eMails zu löschen, dringende direkt zu beantworten oder auch „nur“ als wichtig zu kennzeichnen.

Damit unsere Nutzer unseres Dovecot-Servers diese gemeinsam genutzten Ordner nutzen können, müssen wir die Funktion shared folders noch konfigurieren.

Dictionary

Die Information, welcher Nutzer einem anderen Nutzer einen shared-folder zur Verfügung stellt, muss sich unser Dovecot-Server merken; Dovecot benutzt hierzu ein sog. Dictionary. Dieses Dictionary lassen wir von Dovecot im Verzeichnis /srv/vmail anlegen. Das hat zwei Gründe:

  1. Rechte Der virtuelle User vmail hat bereits alle Rechte an dem Verzeichnis. Wir müssen also nicht extra Rechte an einem anderen bestehenden Verzeichnis „verbiegen“.
  2. Backup Da wir das Verzeichnis /srv/vmail sowieso extra sichern, werden die Informationen aus dem zentralen Dictionary zusammen mit den Postfächern und den darin enthaltenen dovecot-acl zusammen gesichert! In diesen dovecot-acl-Dateien vermerkt Dovecot, welcher User welche Rechte hat, also ob dieser z.B. nur lesen und schreiben darf, oder ob dieser z.B. auch löschen darf.

Wir verzichten daher auf die Einrichtungen eines separaten Verzeichnisses, wie z.B. /var/lib/dovecot/db/ sondern nutzen das bereits vorhandene Verzeichnis /srv/vmail !

Damit Dovecot nun weiß wo das zentrale Dictionary zu finden ist, tragen wir diese Information in der Konfigurationsdatei /etc/dovecot/conf.d/90-acl.conf ein.

 # vim /etc/dovecot/conf.d/90-acl.conf
##
## Mailbox access control lists.
##
 
# vfile backend reads ACLs from "dovecot-acl" file from mail directory.
# You can also optionally give a global ACL directory path where ACLs are
# applied to all users' mailboxes. The global ACL directory contains
# one file for each mailbox, eg. INBOX or sub.mailbox. cache_secs parameter
# specifies how many seconds to wait between stat()ing dovecot-acl file
# to see if it changed.
plugin {
  # Django : 2014-08-08
  # default: #acl = vfile:/etc/dovecot/global-acls:cache_secs=300
  acl = vfile
}
 
# To let users LIST mailboxes shared by other users, Dovecot needs a
# shared mailbox dictionary. For example:
plugin {
  # Django : 2014-08-08
  # default: #acl_shared_dict = file:/var/lib/dovecot/shared-mailboxes
  acl_shared_dict = file:/srv/vmail/shared-mailboxes
}

Socket für userdb Anfragen

Meldet sich ein Nutzer bei unserem Dovecot-Server an, muss der IMAP-Prozess dieses Nutzers über eine userdb-Anfrage das Homeverzeichnis desjenigen Nutzers in Erfahrung bringen, der eines seiner Verzeichnisse teilt. Hierzu tragen wir die nötigen Informationen in der Konfigurationsdatei /etc/dovecot/conf.d/10-master.conf ein.

 # vim /etc/dovecot/conf.d/10-master.conf
... 
 
service auth {
  # auth_socket_path points to this userdb socket by default. It's typically
  # used by dovecot-lda, doveadm, possibly imap process, etc. Users that have
  # full permissions to this socket are able to get a list of all usernames and
  # get the results of everyone's userdb lookups.
  #
  # The default 0666 mode allows anyone to connect to the socket, but the
  # userdb lookups will succeed only if the userdb returns an "uid" field that
  # matches the caller process's UID. Also if caller's uid or gid matches the
  # socket's uid or gid the lookup succeeds. Anything else causes a failure.
  #
  # To give the caller full permissions to lookup all users, set the mode to
  # something else than 0666 and Dovecot lets the kernel enforce the
  # permissions (e.g. 0777 allows everyone full permissions).
  unix_listener auth-userdb {
    # Django : 2014-08-08
    # Authentication Socket für userdb-Anfragen bei Nutzung von shared folders
    # default: #mode = 0666
    #          #user = 
    #          #group =
    user = vmail
    group = vmail
  }
 
  # Postfix smtp-auth
  #unix_listener /var/spool/postfix/private/auth {
  #  mode = 0666
  #}
 
  # Auth process is run as this user.
  #user = $default_internal_user
 
  # Django : 2014-05-23
  # default: unset
  # Port 3659 für Postfix-Authentifizierung definiert
    inet_listener {
     address = 10.0.0.170
     port = 3659
  }
 
}
 
...

Mailplugin und Shared Namespace

Damit das Plugin acl in allen Modulen geladen werden kann, tragen wir es in der Konfigurationsdatei /etc/dovecot/conf.d/10-mail.conf als zusätzliches Plugin nach.

 # vim /etc/dovecot/conf.d/10-mail.conf
...
 
# Space separated list of plugins to load for all services. Plugins specific to
# IMAP, LDA, etc. are added to this list in their own .conf files.
# Django : 2014-08-05
# default: #mail_plugins =
#mail_plugins = zlib
# Django : 2014-08-06 - Quotaregelung aktiviert
# last   : mail_plugins = zlib
mail_plugins = zlib quota
# Django : 2014-08-08 - ACL-Plugin für Shared Folders
mail_plugins = zlib quota acl
 
...

Damit die geteilten Verzeischnisse beim Mailclient unserer Kunden eingebunden und angezeigt werden benötigen wir noch einen eigenen Namensraum, der bereits in der Konfigurationsdatei /etc/dovecot/conf.d/10-mail.conf vordefiniert wurde. Dieses Konfigurationsbeispiel passen wir nun unseren Bedürfnissen nach an.

 # vim /etc/dovecot/conf.d/10-mail.conf
...
 
# Django : 2014-08-08
# default: unset
# Example shared namespace configuration
#namespace {
  #type = shared
  #separator = /
 
  # Mailboxes are visible under "shared/user@domain/"
  # %%n, %%d and %%u are expanded to the destination user.
  #prefix = shared/%%u/
 
  # Mail location for other users' mailboxes. Note that %variables and ~/
  # expands to the logged in user's data. %%n, %%d, %%u and %%h expand to the
  # destination user's data.
  #location = maildir:%%h/Maildir:INDEX=~/Maildir/shared/%%u
 
  # Use the default namespace for saving subscriptions.
  #subscriptions = no
 
  # List the shared/ namespace only if there are visible shared mailboxes.
  #list = children
#}
# Should shared INBOX be visible as "shared/user" or "shared/user/INBOX"?
#mail_shared_explicit_inbox = no
 
namespace {
  type = shared
  separator = /
  prefix = shared/%%u/
  location = maildir:%%h/Maildir:INDEX=%h/shared/%%u:CONTROL=%h/shared/%%u
  inbox = no
  hidden = no
  list = children
  subscriptions = yes
  ignore_on_failure = no
}
 
...

Somit werden geteilte Ordner im Namensraum shared eingeblendet.

Bild: Bildschirmhardcopy des Mailclient Thunderbird

IMAP_ACL Plugin

Damit die Nutzer unseres Dovecot-Servers Verzeichnisse teilen und die dazu nötigen Berechtigungen über das IMAP-Protokoll setzen können, müssen wir das imap_acl Plugin beim Protokoll IMAP natürlich noch aktivieren. Dazu tragen wir es in der Konfigurationsdatei /etc/dovecot/conf.d/20-imap.conf als zusätzliches Plugin nach.

 # vim /etc/dovecot/conf.d/20-imap.conf
...
 
protocol imap {
  # Space separated list of plugins to load (default is global mail_plugins).
  #mail_plugins = $mail_plugins
  # Django : 2014-08-06 Quota-Informationen via IMAP zur Verfügung stellen
  #mail_plugins = $mail_plugins imap_quota
  # Django : 2014-08-08 ACL-Verwaltung via IMAP zur Verfügung stellen
  mail_plugins = $mail_plugins imap_quota imap_acl
 
  # Maximum number of IMAP connections allowed for a user from each IP address.
  # NOTE: The username is compared case-sensitively.
  #mail_max_userip_connections = 10
}
 
...

Damit unsere Konfigurationsänderungen auch aktiv werden, bedarf es noch eines Reload unseres Dovecot-Daemon.

 # systemctl reload dovecot

Beim Setzen der ACLs stellt uns IMAP folgende Rechte zur Verfügung.

Kürzel Recht Beschreibung
a admin Auf diesen Ordner können durch den Nutzer ACLs gesetzt werden (Adminrechte).
e expunge Nachrichten können in dem gewählten Ordner zum Löschen markiert werden.
i insert In diesen Ordner können Nachrichten geschrieben, eingefügt bzw. kopiert werden.
k create Unterordner können angegelegt werden. Der Ordner kann umbenannt werden, sofern die delete-rechte gesetzt sind.
l lookup Der Ordner ist sichtbar und kann abonniert werden.
p post In dem Ordner kann Dovecot (via lda oder LMTP) Nachrichten ablegen.
r read Der Ordner kann zum Lesen ausgewählt werden.
s write-seen Das Flag \Seen kann gesetzt oder auch gelöscht werden.
t write-deleted Das Flag \Deleted kann gesetzt oder auch gelöscht werden.
w write Außer den beiden Flags \Deleted und \Seen können die Flags der eMails durch den Nutzer gesetzt und gelöscht werden.
x delete Der Ordner kann durch den Nutzer gelöscht werden.

Wir brauchen uns aber nicht groß beim Setzen und Ändern unserer Ordnerfreigaben auf den Konsole beschäftigen, denn die gängigsten eMailclients bieten hierzu entweder direkt oder über Erweiterungen/Plugins menügeführte ACL-Unterstützungen mit.

kMail

Die Verwaltung von ACLs geht bei kMail „out of the box“.

Ordner freigeben / ACL definieren

Zum Freigeben eines Ordners klicken wir mit der Rechten Maustaste auf den freizugebenden Ordner und wählen dann den Menüpunkt [Ordnereigenschaften] an .

Bild: Bildschirmhardcopy kMail ACL-Bearbeitung

Zum Neuanlegen einer Zugriffsregelung wählen wir den Menüpunkt [Eintrag hinzufügen] aus. Zum ändern vorhandener ACLs wählen wir die Schaltfläche [Eintrag bearbeiten] aus.

Bild: Bildschirmhardcopy kMail ACL-Bearbeitung

Über fest vorgegebene Nutzerrechte wird bei kMail der Zugriuff auf freizugebende Ordner realisiert. Die definierten Rollen wurden folgenden Rechten zugeordnet.

ACL-Recht Keine Lesen Anhängen Schreiben Alle
Nachschlagen x x x x
Lesen x x x x
Gelesen speichern x x x x
Einfügen x x x
Posten x x x
Flag „schreiben“ x x
Anlegen x x
Löschen x x
Verwalten x

Haben wir unsere Auswahl getroffen und die Rechte gesetzt, speichern wir unsere Auswahl mit einem Klick auf die Schaltfläche [OK].

Bild: Bildschirmhardcopy kMail ACL-Bearbeitung

Mit Anwahl der Schaltfläche [OK] verlassen wir den Dialog zum Setzen der ACLs.

Bild: Bildschirmhardcopy kMail ACL-Bearbeitung

Ordner / Shared Folder einbinden

Zum Einbinden eines shared folders klicken wir mit der rechten Maustaste auf den Posteingangskorb und wählen den Menüpunkt [Serverseitige Abonnements] aus.

Bild: Bildschirmhardcopy kMail Shared Folder

Anschließend wählen wir den gewünschten freigegebenen Ordner aus, setzen das Häkchen [✔] und klicken auf die Schaltflöche [OK].

Bild: Bildschirmhardcopy kMail Shared Folder

Der freigegebene Ordner des anderen Users wird uns ab sofort unter dem Namensraum shared angezeigt.

Bild: Bildschirmhardcopy kMail Shared Folder

Thunderbird

Um mit Thunderbird ACLs definieren und bearbeiten zu können, benötigt man das Plugin Imap-ACL-Extension.

Bild: Thunderbird Imap-ACL-Extension Plugin

Ordner freigeben / ACL definieren

Zum Freigeben eines Ordners klicken wir mit der rechten Maustaste auf den entsprechenden Ordner und wählen den Menüpunkt Eigenschaften aus.

Bild: Bildschirmhardcopy ACL-Definition unter Thunderbird

Auf dem Reiter Freigabe klicken wir dann auf die Schaltfläche [Rechte setzen].

Bild: Bildschirmhardcopy ACL-Definition unter Thunderbird

Zum Setzen von neuen Benutzerrechten klicken wir auf die Schaltfläche [Neu]. Möchten wir bestehende ACLs bearbeiten, wählen wir die Schaltfläche [Ändern] an.

Bild: Bildschirmhardcopy ACL-Definition unter Thunderbird

Hier können wir jedes einzelne Recht durch Setzen eines Häkchens [✔] setzen.

Bild: Bildschirmhardcopy ACL-Definition unter Thunderbird

Ordner / Shared Folder einbinden

Zum Einbinden eines shared folders klicken wir mit der rechten Maustaste auf den Posteingangskorb und wählen den Menüpunkt [Abonnieren] aus.

Bild : Bildschirmhardcopy Thunderbird Einbinden eines shared folders

Anschließend wählen wir den freigegebenen Ordner des anderen Mailboxusers aus, setzen das Häkchen [✔] in der betreffenden Checkbox aus und klicken aif die Schaltfläche [Abonnieren].

Bild : Bildschirmhardcopy Thunderbird Einbinden eines shared folders

Ab jetzt wird der freigegeben Ordner im Namensraum shared angezeigt.

Bild : Bildschirmhardcopy Thunderbird Einbinden eines shared folders

Horde Framework / Webmailer

Das Freigeben von Ordnern ist beim Webmailer IMP des Horde Projektes denkbar intuitiv und einfach gestaltet.

Ordner freigeben / ACL definieren

Möchte man einen Ordner freigeben, so klickt man mit der rechten Mausztaste auf das betreffende Ordnersymbol. Es erscheint dann ein Auswahlfenster mit den möglichen Aktionen. Dort wählen wir dann den Punkt ACL bearbeiten aus.

Bild: Bildschirmhardcopy Horde 5 IMP ACL-Menü

In das Feld Benutzer tragen wir nun den Ameldenamen/eMail-Adresse ein, dem wir Rechte auf den Ordner einräumen wollen.

Bild: Bildschirmhardcopy Horde 5 IMP ACL-Menü

Wir können dann jedes der möglichen Rechte einfach durch Anwahl der Checkboxen bzw. durch Setzen eines Häkchens auswählen. Fährt man mit der Maus über eins der Rechte, erscheint eine kurze Beschreibung des jeweiligen Rechtes.

Bild: Bildschirmhardcopy Horde 5 IMP ACL-Menü

Alternativ kann man natürlich auch durch Auswahl der vorbereiteten Vorlagen, die benötigten Rechte zu einer Aktion auswählen.

Bild: Bildschirmhardcopy Horde 5 IMP ACL-Menü

Haben wir alle Einstellungen vorgenommen, klicken wir auf die Schaltfläche [Speichern] um unsere definierten Zugriffsregeln/ACLs auf dem IMAP-Server zu speichern.

Bild: Bildschirmhardcopy Horde 5 IMP ACL-Speichern

Ordner / Shared Folder einbinden

Um einen freigegebenen Ordner eines anderen Nutzers einzubinden, klicken wir auf den Menüpunkt Ordneraktionen auf der linken Seite und wählen dort den Untermenüpunkt alle Ordner anzeigen aus.

Bild: Bildschirmhardcopy Horde 5 IMP shared folder

Wir sehen nun den Namensraum shared und können diesen nun auswählen.

Bild: Bildschirmhardcopy Horde 5 IMP shared folder

Dazu klicken wir auf das Icon bis der benötigte Ordner des anderen Mailboxnutzers erscheint.

Bild: Bildschirmhardcopy Horde 5 IMP shared folder

Links

1)
Toll Ein Anderer Machts
Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information