Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:dovecot_shares

Dies ist eine alte Version des Dokuments!


Dovecot Shares

Diese Dokumentation ist nach dem Kurs: Dovecot bei www.heinlein-support.de - Peer Heinlein entstanden. Hier noch einmal meinen Dank für die Informationen und das ☛ Buch: Dovecot

:!: HINWEIS - Die Nachfolgende Konfiguration von Dovecot setzt eine lauffähige Installation von Dovecot voraus, wie unter nachfolgendem internen Link beschrieben !!!

Dovecot ist ein Open-Source-IMAP-und POP3-E-Mail-Server für Linux bzw. UNIX-ähnlichen Systeme, entwickelt mit dem Hauptaugenmerk auf Sicherheit. Dovecot ist eine ausgezeichnete Wahl für kleine und große Installationen. Dovecot ist schnell und einfach zu installieren, erfordert keine besonderen Voraussetzungen und ist Ressourcenschonend.

Dovecot wird von Timo Sirainen entwickelt.

Beschreibung Externer Link
Homepage http://dovecot.org
Dokumentation http://dovecot.org/documentation.html
Wiki Dovecot2 http://wiki2.dovecot.org/

Ab hier werden root-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um root zu werden geben Sie bitte folgenden Befehl ein:

$ su -
Password: 

Vorbereitung

Unter der Bezeichnung Shares oder Shared Folder ist das Teilen von eigenen Ordnern innerhalb des Postfaches des Benutzers zu verstehen. Dazu ist es nicht erforderlich zusätzliche Ordner anzulegen, es können einfach über die Vergabe von Zugriffsrechten über sogenannte ACL's auf Ordner im Postfach des Benutzers andere/weitere Benutzer berechtigt werden.

Nachfolgend ein Beispiel zu Shares oder Shared Folder anhand von einem Postfach eines Benutzers:

- INBOX/
  |
  +----- Drafts
  +----- Sent
  +----- Trash
  +...
  +----- ProjectX/
  +...

Dabei könnte nun auf den Ordner ProjectX mittels ACL's einem weiteren Benutzers Zugriff auf diesen Ordner gestattet werden.

Welche Rechte es gibt, soll nachfolgend dargestellte Tabelle zeigen:

Abkürzung Recht Beschreibung
a admin Auf diesen Ordner können ACL's vergeben werden (Administratorenrechte)
e expunge In diesen Ordner können Nachrichten zum löschen markiert werden
i insert In diesen Ordner können Nachrichten geschrieben oder kopiert werden
k create Es können Unterordner angelegt/umbenannt werden.
Eine Umbenennung benötigt zusätzlich das delete-Recht!
l lookup Der Ordner ist sichtbar und kann abonniert werden
p post In diesen Ordner können Nachrichten über dovecot-lda oder lmtp
eingeliefert werden, z.B. durch einen sieve-Filter.
r read Der Ordner kann zum lesen ausgewählt werden
s write-seen Das „Nachrichten-Flag“ \Seen kann gesetzt/geändert werden
t write-delete Das „Nachrichten-Flag“ \Delete kann gesetzt/geändert werden
w write Es können „Nachrichten-Falgs“ und „keywords“ gespeichert/geändert werden
ohne \Seen und \Delete
x delete Der Ordner kann gelöscht werden

:!: HINWEIS - Die in der Tabelle beschriebenen Rechte, können ohne die Hilfe eines Administrators durch den jeweiligen Benutzers/Eigentümer des Postfachs vergeben werden!

:!: HINWEIS - Bei der Vergabe der Rechte muss der Benutzer/Eigentümer des Postfachs nur die Benutzerkennung desjenigen kennen, der die Rechte bekommen soll. Wenn dies z.B. die e-Mail-Adresse ist, ist dies sehr einfach!

Damit Dovecot die Verwaltung von ACL's bewerkstelligen kann, durchgeht Dovecot folgenden Ablauf um die Rechte zu ermitteln:

  1. Benutzer meldet sich an –> Dovecot schaut in einem Dictionary nach, ob andere Benutzer dem sich gerade angemeldeten Benutzer - Rechte erteilt haben.
  2. Über eine userdb-Abfrage ermittelt der IMAP-Prozess des sich gerade angemeldeten Benutzer, die home-Verzeichnisse der anderen Benutzer.
  3. Dovecot durchsucht bei den andere Benutzer die home-Verzeichnisse nach der Konfigurationsdatei dovecot-acl-list, in der verzeichnet ist, welche Ordner überhaupt ACL's besitzen.
  4. Dovecot wertet nun innerhalb der Order mit ACL's die Konfigurationsdatei dovecot-acl aus, die die eigentliche Liste der ACL's enthält.

Konfiguration

Nachfolgende Konfigurationsschritte sind notwendig um Shares oder Shared Folder und ACL's nutzen zu können.

/var/lib/dovecot/db

Zunächst ist es erforderlich ein zentrales Verzeichnis anzulegen, in dem Dovecot die Informationen speichern kann, welcher Benutzer welchem anderen Benutzer überhaupt Rechte erteilt hat.

Dies kann als neues Verzeichnis innerhalb dem Verzeichnis

  • /var/lib/dovecot/

und mit nachfolgend benannten Namen durch ebenfalls nachfolgendem Befehl durchgeführt werden:

# mkdir /var/lib/dovecot/db

Anschließend müssen noch die Besitzrechte richtig gesetzt werden. Nachfolgendes Beispiel setzt voraus, dass ein Authentifizierungsbenutzer wie unter nachfolgendem internen Link beschrieben

verwendet wird.

Mit nachfolgendem Befehl, werden die Besitzrechte auf den Dummy-Benutzer gesetzt:

# chown vmail:vmail /var/lib/dovecot/db

:!: WICHTIG - Auch für das übergeordnete Verzeichnis ist dies erforderlich !

Mit nachfolgendem Befehl, werden die Besitzrechte, auch für das übergeordnete Verzeichnis

  • /var/lib/dovecot

auf den Dummy-Benutzer gesetzt:

# chown vmail:vmail /var/lib/dovecot

Abschließend kann mit nachfolgendem Befehl, die korrekte Erstellung und Rechtevergabe überprüft werden, welche eine Ausgabe wie die nachfolgende zurückgeben sollte:

# ll /var/lib/dovecot/
total 16
drwxr-xr-x 2 vmail vmail 4096 Mar 31 14:50 db
-rw-r--r-- 1 root  root    62 Mar 31 14:50 instances
-rw-r--r-- 1 root  root    75 Mar 27 23:44 mounts
-rw-r--r-- 1 root  root   230 Mar 13 17:43 ssl-parameters.dat

/etc/dovecot/conf.d/10-master.conf

Damit der IMAP-Prozess des sich gerade angemeldeten Benutzer, die home-Verzeichnisse der anderen Benutzer ermitteln kann, muss eine weiterer auth-Socket mit entsprechenden Zugriffsrechten für den Dummy-Benutzer eingerichtet werden.

Dazu müssen nachfolgende Anpassungen an der Konfigurationsdatei

  • /etc/dovecot/conf.d/10-master.conf

wie nachfolgend dargestellt, durchgeführt werden. (Nur relevanter Ausschnitt)

...
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 {
    #mode = 0666
    # Tachtler
    # default: #user = 
    user = vmail
    # Tachtler
    # default: #group = 
    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
}
...

/etc/dovecot/conf.d/10-mail.conf

In der Konfigurationsdatei wird festgelegt, welche Art von „Ablagesystem“ Mailbox-Format verwendet werden soll und wo die e-Mail (Postfächer) im Dateisystem abgelegt werden sollen und welche plugins verwendet werden.

mail_plugins

Deshalb muss zusätzlich noch das Plugin - acl geladen werden, was durch nachfolgende Ergänzung in der Konfigurationsdatei

  • /etc/dovecot/conf.d/10-mail.conf

erreicht werden kann. (Nur relevanter Ausschnitt)

...
# 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.
# Tachtler
# default: #mail_plugins = 
mail_plugins = $mail_plugins quota acl
...

:!: HINWEIS - Hinzugekommen ist hier bei mail_plugins = $mail_plugins […] acl !

namespace

Zusätzlich zu den Plugin Konfiguration, wird hier auch noch die Definition des/der Shares oder Shared Folder durchgeführt.

Dies dient dazu zu bestimmen, wie die freigegeben Ordner des Benutzer, den anderen Benutzern angezeigt werden.

Folgende Anpassungen sind dazu notwendig: (Nur relevanter Ausschnitt)

...
# Example shared namespace configuration
# Tachtler - enabled -
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.
  # Tachtler
  # default: #location = maildir:%%h/Maildir:INDEX=~/Maildir/shared/%%u
  location = maildir:%%h/Maildir:INDEX=%h/shared/%%u:CONTROL=%h/shared/%%u
 
  # Use the default namespace for saving subscriptions.
  # Tachtler
  # default: #subscriptions = no
  subscriptions = yes
 
  # List the shared/ namespace only if there are visible shared mailboxes.
  list = children
}
...

:!: HINWEIS - Angaben mit doppelten Prozentzeichen, verweisen immer auf Angaben des anderen Benutzers!

Erklärungen:

type

Der Typ des namespace

  type = shared
separator

Das Trennzeichen zwischen den einzelnen Ordnern, das verwendet werden soll, hier (/):

  separator = /
prefix

Der Präfix unter dem die freigegebenen Ordner der anderen Benutzer angezeigt werden sollen:

  prefix = shared/%%u/

Beispiel:

- INBOX/
  |
  +----- Drafts
  +----- Sent
  +----- Trash
  - shared/Benutzername@doamin.tld
  |
  +----- ProjectX/
location

Die Lokalisation des Postfaches des anderen Benutzers im Dateisystem:

  location = maildir:%%h/Maildir:INDEX=%h/shared/%%u:CONTROL=%h/shared/%%u

:!: HINWEIS - Die Speicherung der Informationen über den INDEX und der CONTROL/ACL's erfolgt unter dem freigebenden Benutzer in dessen Ordnerstruktur !

subscription

Informationen, welche Ordern der Benutzer abonniert hat, sollen im Standard Ordner des Benutzer verbleiben:

  subscriptions = yes
list

Listet nur Unterordner des Benutzers auf, wenn dieser mindestens eine Freigabe hat:

  list = children

/etc/dovecot/conf.d/20-imap.conf

In der Konfigurationsdatei werden spezifische Einstellungen für das Protokoll: imap eingestellt.

mail_plugins

Die nachfolgende Einstellung fügt dem Parameter mail_plugins das plugin - imap_acl hinzu. (Nur relevanter Ausschnitt)

...
protocol imap {
  # Space separated list of plugins to load (default is global mail_plugins).
  # Tachtler
  # default: #mail_plugins = $mail_plugins
  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
}
...

:!: HINWEIS - $mail_plugins fügt bestehende plugins, aus evtl. anderen Konfigurationen und den Wert imap_quota imap_acl gemeinsam, dem Parameter mail_plugins hinzu!

:!: HINWEIS - Dies ist notwendig, damit der Benutzer über das imap-Protokoll, seine ACL's selbständig verwalten kann!

/etc/dovecot/conf.d/90-acl.conf

Zusätzlich ist es noch notwendig Dovecot mitzuteilen, wo das Verzeichnis zu finden ist und in welchem Format das Dictionary angelegt ist, in dem die Informationen abgelegt sind, ob andere Benutzer dem sich gerade angemeldeten Benutzer - Rechte erteilt haben. (Komplette Konfigurationsdatei)

##
## 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 {
  #acl = vfile:/etc/dovecot/global-acls:cache_secs=300
}
 
# To let users LIST mailboxes shared by other users, Dovecot needs a
# shared mailbox dictionary. For example:
plugin {
  # Tachtler - new -
  acl = vfile
  # Tachtler
  # default: #acl_shared_dict = file:/var/lib/dovecot/shared-mailboxes
  acl_shared_dict = file:/var/lib/dovecot/db/shared-mailboxes.db
}

Neustart

Bevor der der dovecot-Daemon/Dienst neu gestartet werden soll, ist eine Überprüfung der korrekten Konfiguration durch nachfolgenden Befehl, zu empfehlen

# doveconf -n
# 2.2.10: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-431.11.2.el6.x86_64 x86_64 CentOS release 6.5 (Final) 
auth_debug = yes
auth_master_user_separator = *
auth_mechanisms = plain digest-md5 cram-md5 login
auth_verbose = yes
mail_debug = yes
mail_location = maildir:~/Maildir
mail_plugins = " quota acl"
mbox_write_locks = fcntl
namespace {
  list = children
  location = maildir:%%h/Maildir:INDEX=%h/shared/%%u:CONTROL=%h/shared/%%u
  prefix = shared/%%u/
  separator = /
  subscriptions = yes
  type = shared
}
namespace inbox {
  inbox = yes
  location = 
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix = INBOX/
  separator = /
}
passdb {
  args = /etc/dovecot/master-users
  driver = passwd-file
  master = yes
  pass = yes
}
passdb {
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
  driver = passwd-file
}
plugin {
  acl = vfile
  acl_shared_dict = file:/var/lib/dovecot/db/shared-mailboxes.db
  quota = maildir:User quota
  quota_grace = 10%%
  quota_rule = *:storage=1G
  quota_rule2 = INBOX/Trash:storage=+100M
  quota_status_nouser = DUNNO
  quota_status_overquota = 552 5.2.2 Mailbox is over quota
  quota_status_success = DUNNO
  quota_warning = storage=95%% quota-warning 95 %u
  quota_warning2 = storage=80%% quota-warning 80 %u
}
protocols = imap lmtp
service auth {
  unix_listener auth-userdb {
    group = vmail
    user = vmail
  }
}
service lmtp {
  inet_listener lmtp {
    address = 192.168.0.80
    port = 24
  }
}
service quota-status {
  client_limit = 1
  executable = quota-status -p postfix
  inet_listener {
    address = 192.168.0.80
    port = 12340
  }
}
service quota-warning {
  executable = script /usr/local/bin/quota-warning.sh
  user = vmail
}
ssl_cert = </etc/pki/dovecot/certs/CAcert-class3-wildcard_all_in_one.crt
ssl_cipher_list = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
ssl_dh_parameters_length = 2048
ssl_key = </etc/pki/dovecot/private/tachtler.net.key
ssl_prefer_server_ciphers = yes

ssl_protocols = !SSLv2 !SSLv3
userdb {
  args = username_format=%u /etc/dovecot/users
  driver = passwd-file
}
verbose_proctitle = yes
protocol imap {
  mail_plugins = " quota acl imap_quota imap_acl"
}

:!: HINWEIS - die Konfiguration des dovecot-Daemon/Dienst konnte korrekt gelesen werden, wenn die Konfiguration erscheint, was letztendlich zwar nicht bedeutet, das Sie auch korrekt ist, aber syntaktische Fehler ausschließt !!!

Danach kann der dovecot-Server mit nachfolgendem Befehle neu gestartet werden:

# service dovecot restart
Stopping Dovecot Imap:                                     [  OK  ]
Starting Dovecot Imap:                                     [  OK  ]

Ausgabe Ordner

Mit nachfolgendem Befehl können alle Ordner eines Benutzers aufgelistet werden, auf die dieser Zugriff hat:

# doveadm mailbox list -u klaus@tachtler.net
INBOX
shared
shared/petra@tachtler.net

doveadm acl

Nachfolgend ein Überblick über die aktuellen Möglichkeiten des Befehls doveadm acl:

# doveadm acl
usage: doveadm [-Dv] [-f <formatter>] acl <command> [<args>]
  add          [-u <user>|-A] [-S <socket_path>] <mailbox> <id> <right> [<right> ...]
  debug        [-u <user>|-A] [-S <socket_path>] <mailbox>
  delete       [-u <user>|-A] [-S <socket_path>] <mailbox> <id>
  get          [-u <user>|-A] [-S <socket_path>] [-m] <mailbox>
  recalc       [-u <user>|-A] [-S <socket_path>]
  remove       [-u <user>|-A] [-S <socket_path>] <mailbox> <id> <right> [<right> ...]
  rights       [-u <user>|-A] [-S <socket_path>] <mailbox>
  set          [-u <user>|-A] [-S <socket_path>] <mailbox> <id> <right> [<right> ...]

Rechte setzen

Mit nachfolgendem Befehl können Rechte gesetzt werden. Hier

  • Freigabe empfangener Benutzer: klaus@tachtler.net
  • Freigabe erteilender Benutzer: petra@tachtler.net
# doveadm acl set -u petra@tachtler.net INBOX user=klaus@tachtler.net admin create delete expunge insert lookup post read write write-deleted write-seen

Rechte ausgeben

Mit nachfolgendem Befehl können alle Rechte aufgelistet werden, die dieser Benutzer vergeben hat:

# doveadm -f table acl get -u petra@tachtler.net INBOX
ID                     Global Rights
user=klaus@tachtler.net       admin create delete expunge insert lookup post read write write-deleted write-seen

Mit nachfolgendem Befehl können alle Rechte aufgelistet werden, die dieser Benutzer einem bestimmten anderen Benutzer gegeben hat:

# doveadm -f table acl rights -u petra@tachtler.net INBOX user=klaus@tachtler.net
Rights
lookup read write write-seen write-deleted insert post expunge create delete admin

Rechte wegnehmen

Mit nachfolgendem Befehl können einzelne Berechtigungen weggenommen werden, nachfolgend soll nur das Recht: admin weggenommen werden:

doveadm acl remove -u petra@tachtler.net INBOX user=klaus@tachtler.net admin

Rechte löschen

Mit nachfolgendem können alle Rechte entzogen werden:

doveadm acl delete -u petra@tachtler.net INBOX user=klaus@tachtler.net

Beispiel

In nachfolgendem Beispiel wurde nachfolgende Freigaben erstellt.

  • Freigabe empfangener Benutzer: klaus@tachtler.net
  • Freigabe erteilender Benutzer: petra@tachtler.net

/var/lib/dovecot/db/var/lib/dovecot/

In der Konfigurationsdatei, werden alle Freigaben verwaltet. Diese Konfigurationsdatei ist von rechts nach links zu lesen und hat in diesem Beispiel nachfolgenden Inhalt, der mit nachfolgendem Befehl zur Ansicht gebracht werden kann:

# cat /var/lib/dovecot/db/shared-mailboxes.db 
shared/shared-boxes/user/klaus@tachtler.net/petra@tachtler.net
1

/var/spool/vmail/tachtler.net/petra/Maildir/dovecot-acl-list

In dieser Konfigurationsdatei sind alle freigegebenen Ordner enthalten. Der Inhalt dieser Konfigurationsdatei ist in diesem Beispiel mit nachfolgendem Befehl aufzulisten:

# cat dovecot-acl-list
1396278388 INBOX

/var/spool/vmail/tachtler.net/petra/Maildir/dovecot-acl

In dieser Konfigurationsdatei sind alle freigegebenen Benutzer und deren Rechte enthalten. Der Inhalt dieser Konfigurationsdatei ist in diesem Beispiel mit nachfolgendem Befehl aufzulisten:

# cat dovecot-acl
user=klaus@tachtler.net akxeilprwts

/var/spool/vmail/tachtler.net/klaus

In diesem Verzeichnis sind ist eine neues Verzeichnis mit dem Namen shared entstanden, in dem nachfolgender Inhalt zu sehen ist, was ebenfalls mit nachfolgendem Befehl aufgelistet werden kann:

# ll /var/spool/vmail/tachtler.net/klaus/
total 8
drwx------ 5 vmail vmail 4096 Mar 31 16:54 Maildir
drwx------ 3 vmail vmail 4096 Mar 31 17:09 shared

Der Inhalt des neuen Ordners - shared, kann mit nachfolgendem Befehl aufgelistet werden:

# ll /var/spool/vmail/tachtler.net/klaus/shared/
total 4
drwx------ 3 vmail vmail 4096 Mar 31 17:09 petra@tachtler.net

Dort ist ein weiterer Unterordner mit dem Benutzernamen des Freigebenden enthalten, dessen Inhalt mit nachfolgendem Befehl aufgelistet werden kann:

ll /var/spool/vmail/tachtler.net/klaus/shared/petra\@tachtler.net/
total 4
-rw------- 1 vmail vmail 8 Mar 31 17:09 dovecot-uidvalidity
-r--r--r-- 1 vmail vmail 0 Mar 31 17:09 dovecot-uidvalidity.5339851d

:!: HINWEIS - Diese beiden Dateien dienen der internen Verwaltung der jeweiligen Shares oder Shared Folder.

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/dovecot_shares.1436452030.txt.gz · Zuletzt geändert: 2015/07/09 16:27 von klaus