Inhaltsverzeichnis
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:
- Benutzer meldet sich an –> Dovecot schaut in einem Dictionary nach, ob andere Benutzer dem sich gerade angemeldeten Benutzer - Rechte erteilt haben.
- Über eine
userdb
-Abfrage ermittelt der IMAP-Prozess des sich gerade angemeldeten Benutzer, diehome
-Verzeichnisse der anderen Benutzer. - Dovecot durchsucht bei den andere Benutzer die
home
-Verzeichnisse nach der Konfigurationsdateidovecot-acl-list
, in der verzeichnet ist, welche Ordner überhaupt ACL's besitzen. - 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.18: /etc/dovecot/dovecot.conf # OS: Linux 3.10.0-229.7.2.el7.x86_64 x86_64 CentOS Linux release 7.1.1503 (Core) auth_debug = yes auth_debug_passwords = yes auth_master_user_separator = * auth_mechanisms = plain digest-md5 cram-md5 login auth_verbose = yes listen = * 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 unix_listener quota-warning { user = vmail } 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_max_userip_connections = 10 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 ]
bzw.
# systemctl restart dovecot
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
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|srv)/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|srv)/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|srv)/vmail/tachtler.net/klaus
In diesem Verzeichnis ist eine neues Verzeichnis mit dem Namen shared
entstanden, in dem nachfolgender Inhalt zu sehen ist, was ebenfalls mit nachfolgendem Befehl aufgelistet werden kann:
# ls -la /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
bzw.
# ls -l /srv/vmail/tachtler.net/klaus/ total 0 drwx------ 5 vmail vmail 101 Jul 9 17:07 Maildir drwx------ 3 vmail vmail 31 Jul 9 17:33 shared
Der Inhalt des neuen Ordners - shared
, kann mit nachfolgendem Befehl aufgelistet werden:
# ls -l /var/spool/vmail/tachtler.net/klaus/shared/ total 4 drwx------ 3 vmail vmail 4096 Mar 31 17:09 petra@tachtler.net
bzw.
# ls -l /srv/vmail/tachtler.net/klaus/shared/ total 0 drwx------ 3 vmail vmail 80 Jul 9 17:33 petra@tachtler.net
Dort ist ein weiterer Unterordner mit dem Benutzernamen des Freigebenden enthalten, dessen Inhalt mit nachfolgendem Befehl aufgelistet werden kann:
ls -l /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
bzw.
# ls -l /srv/vmail/tachtler.net/klaus/shared/petra\@tachtler.net/ total 4 -rw------- 1 vmail vmail 8 Jul 9 17:33 dovecot-uidvalidity -r--r--r-- 1 vmail vmail 0 Jul 9 17:33 dovecot-uidvalidity.559e9456
HINWEIS - Diese beiden Dateien dienen der internen Verwaltung der jeweiligen Shares oder Shared Folder.