Dovecot + Sieve

Dovecot-Sieve muss vor Postfix installiert werden, sonst wird Dovecot ohne Sieve-Unterstützung als Abhängigkeit automatisch installiert!

portinstall -prO mail/dovecot-sieve

This port assumes you are familiar with Dovecot and have it installed and running on the system you have installed this plugin on.

You can enable the plugin with this directive in your dovecot.conf:

   protocol lda {
     # Support for dynamically loadable plugins. mail_plugins is
     # a space separated list of plugins to load.
     mail_plugins = sieve # ... other plugins like quota
   }

Further information on configuration can be found at:

http://Wiki.Dovecot.org/LDA/Sieve


Diese Informationen finden Sie in der aktuellen Version in FreeBSD unter /usr/local/share/doc/dovecot/wiki

Dovecots User-Modell

Eine sehr häufige Fehlerquelle, bei der Einrichtung von Dovecot + Postfix wobei Dovecot-SASL zur Authentifizierung verwendet wird, ist das User-Modell von Dovecot. Zumindest, wenn man mit mehr als einem User arbeiten möchte. Hier werden drei verschiedenen User benötigt.

  1. root: Dovecot wird als root gestartet.
  2. dovecot: Dovecot verwendet einen unpreviligierten dovecot-User für interne Aufgaben, wie z.B. dem Loggin-Prozess
  3. mail-user: eingegangene Mails werden unter einem anderen Mail-User bewegt, das ist NICHT der dovecot-User.

Dovecot - User

dovecot wird für interne Aufgaben verwendet. Er sollte keinen Zugriff auf Dateien oder irgend etwas anderes haben. Dieser User sollte komplett isoliert sein. Er sollte nur zu seiner dovecot-Gruppe gehören, zu der niemand sonst gehören sollte. Diese Gruppe sollte keinen Zugriff auf Dateien oder irgend etwas anderes haben, außer zu den internen Dingen, die Dovecot selber erstellt.

dovecot wird für keinerlei Mailprozess verwendet - speichere niemals die User-Mails unter dem User dovecot und fühge den dovecot-User zu keiner keiner anderen Gruppe hinzu, auch nicht zur Gruppe „mail“.

Mail - User

Du kannst einen oder mehrere Systemuser für den Zugriff auf die User-Mails verwenden. Die gebräuchlichen Konfigurationen können in zwei Kategorien unterteilt werden:

  1. Dovecot-System-User (siehe SystemUsers.txt) in diesem Fall hat jeder Dovecot-User seinen eigenen System-User in der “/etc/passwd“. Bei dieser Konfigurationsvariante muss man sich keine Gedanken um UIDs und GIDs machen.
  2. Dovecot-Virtual-User (siehe VirtualUsers.txt) in diesem Fall hat laufen alle System-User unter einem einzigen System-User, meistens wird hierfür „vmail“ verwendet.

Wie auch immer, es ist auch möglich jede Konfiguration zu fahren, die zwischen diesen beiden Kategorien liegt. Zum Beispiel ist es auch möglich für jede Domain einen eigenen System-User zu verwenden.

UIDs

Dovecot's user-Datenbank (siehe UserDatabase.txt) konfiguriert die Aufrufe der UIDs von den System-Usern. Hierüber gibt es noch einige wissenswerte Dinge:

  • Obwohl man mit UID normalerweise eine nummerische ID meint (wie sie einem User in der “/etc/passwd“ zugewiesen wird), ist es auch immer möglich den entsprechenden Namen der nummerischen ID als UID in der Dovecot-Konfiguration zu verwenden.
  • Die UID muss nicht in der “/etc/passwd“ stehen. Allerdings muss man beim anlegen neuer User dann vorsichtig sein und darf diese UIDs nicht verwenden.
  • Zu bedenken hierbei ist, dass wenn die IMAP- oder POP3-Implementation ein Sicherheitsloch aufweist, dann kann der Angreifer alle Mails lesen, die von dem User mit der selben UID sind. Also ist der saubere Weg, das jeder User eine eigene UID bekommt. Schlimm ist es bei Betriebssystemen, die nicht immer mehr als 65536 UIDs unterstützen.
  • Standardmäßig erlaubt Dovecot nur Usern das einloggen ab der UID 1000 aufwärts. Diese Kontrolle soll sicher stellen, dass niemand sich als Daemon oder anderer System-User einloggen kann. Verwendest Du eine UID, die kleiner als 1000 ist, dann musst Du den Wert der Variable „first_valid_uid“ ändern.

GIDs

System-Gruppen (GIDs) arbeiten sehr ähnlich zu dem, wie es bei den UIDs beschrieben wurde: Du kannst Namen an Stelle von nummerischen IDs verwenden und die verwendete GID muss nicht in der “/etc/group“ stehen.

System-Gruppen sind nützlich, denn wenn sich mehrere User eine Mailbox teilen wollen, dann brauchen sie nur der selben Gruppe anzugehören. Zur Zeit stellt Dovecot nichts besonderes mit den GIDs an, also kannst Du alle User in eine einzige Gruppe packen oder auch jedem seine eigene Gruppe geben

Benutzt Du viele UIDs und möchtest eine gemeinsame Mailbox erstellen (siehe SharedMailboxes.txt), dann setze die Gruppen sauber auf um die Konfiguration sicherer zu gestallten. Zum Beispiel hast Du zwei Gruppen und jede dieser Gruppen teilt ihre Mailbox nur mit ihren Mitgliedern, dann sollte jede dieser Gruppen eine eigene GID bekommen. Die jeweilige Mailbox muss dann der entsprechenden Gruppe gehören und die Rechte „0660“ haben. So kann kein Gruppenmitglied in die Mailbox der anderen Gruppe rein sehen.

Zur Zeit unterstützt Dovecot nur das festlegen der primären Gruppe, aber wenn Deine „userdb“ folgendes zurück gibt System-User <Extrafeld> (siehe UserDatabase.ExtraFields.txt), dann werden die nicht-primären Gruppe aus der “/etc/group“ für den User gelesen. In einer zukünftigen Version wird es möglich sein, alle GIDs in der Konfiguration festzulegen.

Authentifikation des Prozess-Users

auth default {
  ...
  user = root
}

Der „auth user“ legt den System-User fest, unter dem der Prozess „dovecot-auth“ läuft. Dieser User muss Zugriff zur Passwortdatenbank (PasswordDatabase.txt) und Benutzerdatenbank (UserDatabase.txt) haben. Dieser Benutzer wird für nichts anderes verwendet. Normalerweise verwendet man root, da er garantiert Zugriff auf alle Passwortdatenbanken hat.

Verwendest Du eine „Virtual-User“-Konfiguration, dann gibt es wirklich keinen Grund hier root zu verwenden. Stattdessen kannst Du einen neuen „auth user“ erstellen (z.B. doveauth). Wenn Du SQL oder LDAP verwendest, dann muss dieser „auth user“ keinen Zugriff auf irgendwelche Konfigurationsdateien von Dovecot haben, denn Dovecot selbst läuft als root.

„PAM“ (siehe PasswordDatabase.PAM.txt) und „shadow“ (siehe PasswordDatabase.txt) - passdb's sind gewöhnlich so konfiguriert, dass sie die Datei “/etc/shadow“ lesen. Selbst das verlangt keinen root-Zugriff, wenn man den „auth user“ zur Gruppe shadow hinzufügt und die Datei “/etc/shadow“ für die Gruppe lesbar ist.


weitere Links

Beispiel aus Ubuntu 09.10

dovecot -n
# 1.1.11: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.31-14-server x86_64 Ubuntu 9.10 
log_timestamp: %Y-%m-%d %H:%M:%S 
protocols: imap imaps pop3 pop3s
login_dir: /var/run/dovecot/login
login_executable(default): /usr/lib/dovecot/imap-login
login_executable(imap): /usr/lib/dovecot/imap-login
login_executable(pop3): /usr/lib/dovecot/pop3-login
mail_privileged_group: mail
mail_executable(default): /usr/lib/dovecot/imap
mail_executable(imap): /usr/lib/dovecot/imap
mail_executable(pop3): /usr/lib/dovecot/pop3
mail_plugin_dir(default): /usr/lib/dovecot/modules/imap
mail_plugin_dir(imap): /usr/lib/dovecot/modules/imap
mail_plugin_dir(pop3): /usr/lib/dovecot/modules/pop3
auth default:
  passdb:
    driver: pam
  userdb:
    driver: passwd

sdiff /etc/dovecot/dovecot.conf /etc/dovecot/dovecot-postfix.conf
...
protocols = imap imaps pop3 pop3s                             | protocols = imap pop3 imaps pop3s managesieve
...
#disable_plaintext_auth = yes                                 | disable_plaintext_auth = yes
...
#ssl_disable = no                                             | ssl_disable = no
...
#ssl_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem         | ssl_cert_file = /etc/ssl/certs/ssl-mail.pem
#ssl_key_file = /etc/ssl/private/ssl-cert-snakeoil.key        | ssl_key_file = /etc/ssl/private/ssl-mail.key
...
#ssl_cipher_list = ALL:!LOW:!SSLv2                            | ssl_cipher_list = ALL:!LOW:!SSLv2:ALL:!aNULL:!ADH:!eNULL:!EXP
...
#mail_location =                                              | mail_location = maildir:~/Maildir
...
protocol imap {                                                 protocol imap {
  ...
  #mail_max_userip_connections = 10                           |   mail_max_userip_connections = 10
  ...
  #login_greeting_capability = no                             |   login_greeting_capability = yes
  ...
  #imap_client_workarounds =                                  |   imap_client_workarounds = outlook-idle delay-newmail
}                                                               }
...
protocol pop3 {                                                 protocol pop3 {
  ...
  #mail_max_userip_connections = 3                            |   mail_max_userip_connections = 3
  ...
  #pop3_client_workarounds =                                  |   pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}                                                               }
...
#protocol lda {                                               | protocol lda {
  # Address to use when sending rejection mails.                # Address to use when sending rejection mails.
  #postmaster_address = postmaster@example.com                | postmaster_address = postmaster
  # Hostname to use in various parts of sent mails, eg. in Me   # Hostname to use in various parts of sent mails, eg. in Me
  # Default is the system's real hostname.                      # Default is the system's real hostname.
  #hostname =                                                   #hostname = 
  # Support for dynamically loadable plugins. mail_plugins is   # Support for dynamically loadable plugins. mail_plugins is
  # list of plugins to load.                                    # list of plugins to load.
  #mail_plugins =                                             | mail_plugins = cmusieve
  #mail_plugin_dir = /usr/lib/dovecot/modules/lda               #mail_plugin_dir = /usr/lib/dovecot/modules/lda
  # If user is over quota, return with temporary failure inst   # If user is over quota, return with temporary failure inst
  # bouncing the mail.                                          # bouncing the mail.
  #quota_full_tempfail = no                                   | quota_full_tempfail = yes
  # Format to use for logging mail deliveries. You can use va   # Format to use for logging mail deliveries. You can use va
  #  %$ - Delivery status message (e.g. "saved to INBOX")       #  %$ - Delivery status message (e.g. "saved to INBOX")
  #  %m - Message-ID                                            #  %m - Message-ID
  #  %s - Subject                                               #  %s - Subject
  #  %f - From address                                                  #  %f - From address
  #deliver_log_format = msgid=%m: %$                          | deliver_log_format = msgid=%m: %$
  # Binary to use for sending mails.                            # Binary to use for sending mails.
  #sendmail_path = /usr/lib/sendmail                            #sendmail_path = /usr/lib/sendmail
  # Subject: header to use for rejection mails. You can use t   # Subject: header to use for rejection mails. You can use t
  # as for rejection_reason below.                              # as for rejection_reason below.
  #rejection_subject = Automatically rejected mail              #rejection_subject = Automatically rejected mail
  # Human readable error message for rejection mails. You can   # Human readable error message for rejection mails. You can
  #  %n = CRLF, %r = reason, %s = original subject, %t = reci   #  %n = CRLF, %r = reason, %s = original subject, %t = reci
  #rejection_reason = Your message to <%t> was automatically  | rejection_reason = Your message to <%t> was automatically r
  # UNIX socket path to master authentication server to find    # UNIX socket path to master authentication server to find 
  #auth_socket_path = /var/run/dovecot/auth-master              #auth_socket_path = /var/run/dovecot/auth-master
#}                                                            | }
...
#auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL | auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLM
...
auth default {                                                  auth default {
  ...
  mechanisms = plain                                          |   mechanisms = plain login
  ...
  #socket listen {                                            |   socket listen {
    #master {                                                       #master {
      # Master socket provides access to userdb information.          # Master socket provides access to userdb information. 
      # used to give Dovecot's local delivery agent access to         # used to give Dovecot's local delivery agent access to
      # can find mailbox locations.                                   # can find mailbox locations.
      #path = /var/run/dovecot/auth-master                            #path = /var/run/dovecot/auth-master
      #mode = 0600                                                    #mode = 0600
      # Default user/group is the one who started dovecot-aut         # Default user/group is the one who started dovecot-aut
      #user =                                                         #user = 
      #group =                                                        #group = 
    #}                                                              #}
    #client {                                                 |     client {
      # The client socket is generally safe to export to ever       # The client socket is generally safe to export to ever
      # is to export it to your SMTP server so it can do SMTP       # is to export it to your SMTP server so it can do SMTP
      # using it.                                                   # using it.
      #path = /var/run/dovecot/auth-client                    |       path = /var/spool/postfix/private/dovecot-auth
      #mode = 0660                                            |       mode = 0660
    #}                                                        |       user = postfix
  #}                                                          |       group = postfix
                                                              >     }
                                                              >   }
}                                                               }
 
/home/http/wiki/data/pages/dovecot_sieve.txt · Zuletzt geändert: 2010-05-22 19:03:58 (Externe Bearbeitung)
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:GNU Free Documentation License 1.2
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki