[Dovecot] stat() failed with mbox /var/mail/%u

Jungshik Shin jshin at i18nl10n.com
Thu Jul 7 20:58:18 EEST 2005


Hello,

Over the last 12 hours or so, I've been wrestling with a mysterious
dovecot issue. After upgrading a mail server I'm helping my friend with
maintaining  from Fedora Core1 to Fedora Core4, I realized that I
couldn't use UW-IMAP4 anymore (well, I can compile it myself, but it
turned out that UW-IMAP was the main cause of the server's having load
average as high as 30 from time to time so that I decided to move onto
dovecot).

Although I loved to migrate to maildir,  I didn't dare to tackle the
migration (I have a lot more important things to do :-)) to maildir.
Instead, I thought that dovecot's indexing of mbox files should make the
performance of the server a lot better than UW-IMAP. (in addition, we
upgraded the HW from P3 800MHz single to P4 dual 3GHz).  Last night, I
experimented with several mboxes of one user's account (INBOX in
/var/mail/<userid> and others in ~/mail/) and it worked perfectly well.
So, I moved mboxes of other users and launched 'dovecot' informing users
that the mail server is back up again. However, it didn't work with
inbox (for IMAP) and POP3. There's no problem accessing mail folders in
'~/mail', but accessing /var/mail/%u (inbox for IMAP) and using the same
folder with POP3 didn't work.


The error I got in the log file is:

Jul  8 01:17:24 biosoft dovecot: pop3-login: Login: xyz123
[::ffff:1xx.2yy.zz.178]
Jul  8 01:17:24 biosoft dovecot: POP3(xyz123): stat() failed with mbox
file /var/mail/xyz123: Permission denied

Jul  8 00:34:45 biosoft dovecot: imap-login: Login: xyz123
[::ffff:1xx.2yy.zz.178]
Jul  8 00:34:45 biosoft dovecot: auth(default): Error sending status
request (Operation not permitted)
Jul  8 00:34:45 biosoft dovecot: imap-login: Login: xyz123
[::ffff:1xx.2yy.zz.178]
Jul  8 00:34:45 biosoft dovecot: IMAP(xyz123): stat() failed with mbox
file /var/mail/xyz123: Permission denied

ls -ld / /var /var/mail/ /var/mail/xyz123
drwxr-xr-x  23 root  root      4096 Jul  7 19:28 /
drwxr-xr-x  26 root  root      4096 Jul  7 23:35 /var
drwxrwxrwt   2 root  mail      4096 Jul  8 00:36 /var/mail/
-rw-rw----   1 xyz123 mail 130751237 Jul  7 23:37 /var/mail/xyz123



I tried various combinations of permissions and ownerships for /var/mail
(1777, 2775) and /var/mail/<userid>, but nothing made any difference.  I
also tweaked mbox locking methods ('dotlock fcntl' or 'fcntl' alone)
When I came across this problem with the latest stable (2005-07-06), I
went back to FC4's default package (0.99??), but with a slightly
different error message in the log file, basically I had the same problem.

I kept the default values for most configuration parameters. What I
changed are listed below:

mail_extra_groups = mail
 pop3_uidl_format = %08Xv%08Xu
protocols = imap imaps pop3s
default_mail_env = mbox:~/mail/:INBOX=/var/mail/%u

Also attached is the entire /etc/dovecot.conf

I'm really desperate to get some enlightening answers on this problem,
for which I'll really appreciate you.

Thanks tons in advance,

Jungshik









-------------- next part --------------
## Dovecot 1.0 configuration file

# '#' character and everything after it is treated as comments. Extra spaces
# and tabs are ignored. If you want to use either of these explicitly, put the
# value inside quotes, eg.: key = "# char and trailing whitespace  "

# Default values are shown after each value, it's not required to uncomment
# any of the lines. Exception to this are paths, they're just examples
# with real defaults being based on configure options. The paths listed here
# are for configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
# --with-ssldir=/usr/share/ssl

# Base directory where to store runtime data.
#base_dir = /var/run/dovecot/

# Protocols we want to be serving:
#  imap imaps pop3 pop3s
protocols = imap imaps pop3s

# IP or host address where to listen in for connections. It's not currently
# possible to specify multiple addresses. "*" listens in all IPv4 interfaces.
# "[::]" listens in all IPv6 interfaces, but may also listen in all IPv4
# interfaces depending on the operating system. You can specify ports with
# "host:port", although with multiple protocols you probably want to move this
# setting inside protocol imap/pop3 { ... } section, so you can specify
# different ports for IMAP/POP3.
listen = [::]

# IP or host address where to listen in for SSL connections. Defaults
# to above if not specified.
#ssl_listen =

# Disable SSL/TLS support.
#ssl_disable = no

# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
#ssl_cert_file = /usr/share/ssl/certs/dovecot.pem
#ssl_key_file = /usr/share/ssl/private/dovecot.pem

# File containing trusted SSL certificate authorities. Usually not needed.
#ssl_ca_file = 

# Request client to send a certificate.
#ssl_verify_client_cert = no

# SSL parameter file. Master process generates this file for login processes.
# It contains Diffie Hellman and RSA parameters.
#ssl_parameters_file = /var/run/dovecot/ssl-parameters.dat

# How often to regenerate the SSL parameters file. Generation is quite CPU
# intensive operation. The value is in hours, 0 disables regeneration
# entirely.
#ssl_parameters_regenerate = 24

# SSL ciphers to use
#ssl_cipher_list = all:!low

# Disable LOGIN command and all other plaintext authentications unless
# SSL/TLS is used (LOGINDISABLED capability). Note that 127.*.*.* and
# IPv6 ::1 addresses are considered secure, this setting has no effect if
# you connect from those addresses.
#disable_plaintext_auth = yes

# Use this logfile instead of syslog(). /dev/stderr can be used if you want to
# use stderr for logging (ONLY /dev/stderr - otherwise it is closed).
#log_path = 

# For informational messages, use this logfile instead of the default
#info_log_path = 

# Prefix for each line written to log file. % codes are in strftime(3)
# format.
#log_timestamp = "%b %d %H:%M:%S "

##
## Login processes
##

# Directory where authentication process places authentication UNIX sockets
# which login needs to be able to connect to. The sockets are created when
# running as root, so you don't have to worry about permissions. Note that
# everything in this directory is deleted when Dovecot is started.
login_dir = /var/run/dovecot-login

# chroot login process to the login_dir. Only reason not to do this is if you
# wish to run the whole Dovecot without roots.
# http://wiki.dovecot.org/Rootless
#login_chroot = yes

# User to use for the login process. Create a completely new user for this,
# and don't use it anywhere else. The user must also belong to a group where
# only it has access, it's used to control access for authentication process.
# Note that this user is NOT used to access mails.
# http://wiki.dovecot.org/UserIds
#login_user = dovecot

# Set max. process size in megabytes. If you don't use
# login_process_per_connection you might need to grow this.
#login_process_size = 32

# Should each login be processed in it's own process (yes), or should one
# login process be allowed to process multiple connections (no)? Yes is more
# secure, espcially with SSL/TLS enabled. No is faster since there's no need
# to create processes all the time.
#login_process_per_connection = yes

# Number of login processes to create. If login_process_per_user is
# yes, this is the number of extra processes waiting for users to log in.
#login_processes_count = 3

# Maximum number of extra login processes to create. The extra process count
# usually stays at login_processes_count, but when multiple users start logging
# in at the same time more extra processes are created. To prevent fork-bombing
# we check only once in a second if new processes should be created - if all
# of them are used at the time, we double their amount until limit set by this
# setting is reached. This setting is used only if login_process_per_use is yes.
#login_max_processes_count = 128

# Maximum number of connections allowed in login state. When this limit is
# reached, the oldest connections are dropped. If login_process_per_user
# is no, this is a per-process value, so the absolute maximum number of users
# logging in actually login_processes_count * max_logging_users.
#login_max_logging_users = 256

# Greeting message for clients.
#login_greeting = Dovecot ready.

##
## Mail processes
##

# Maximum number of running mail processes. When this limit is reached,
# new users aren't allowed to log in.
#max_mail_processes = 1024

# Show more verbose process titles (in ps). Currently shows user name and
# IP address. Useful for seeing who are actually using the IMAP processes
# (eg. shared mailboxes or if same uid is used for multiple accounts).
#verbose_proctitle = no

# Show protocol level SSL errors.
#verbose_ssl = no

# Valid UID range for users, defaults to 500 and above. This is mostly
# to make sure that users can't log in as daemons or other system users.
# Note that denying root logins is hardcoded to dovecot binary and can't
# be done even if first_valid_uid is set to 0.
#first_valid_uid = 500
#last_valid_uid = 0

# Valid GID range for users, defaults to non-root/wheel. Users having
# non-valid GID as primary group ID aren't allowed to log in. If user
# belongs to supplementary groups with non-valid GIDs, those groups are
# not set.
#first_valid_gid = 1
#last_valid_gid = 0

# Grant access to these extra groups for mail processes. Typical use would be
# to give "mail" group write access to /var/mail to be able to create dotlocks.
#mail_extra_groups =
mail_extra_groups = mail

# ':' separated list of directories under which chrooting is allowed for mail
# processes (ie. /var/mail will allow chrooting to /var/mail/foo/bar too).
# This setting doesn't affect login_chroot or auth_chroot variables.
# WARNING: Never add directories here which local users can modify, that
# may lead to root exploit. Usually this should be done only if you don't
# allow shell access for users. See doc/configuration.txt for more information.
#valid_chroot_dirs = 

# Default chroot directory for mail processes. This can be overridden for
# specific users in user database by giving /./ in user's home directory
# (eg. /home/./user chroots into /home). Note that usually there is no real
# need to do chrooting, Dovecot doesn't allow users to access files outside
# their mail directory anyway.
#mail_chroot = 

# Default MAIL environment to use when it's not set. By leaving this empty
# dovecot tries to do some automatic detection as described in
# doc/mail-storages.txt. There's a few special variables you can use, eg.:
#
#   %u - username
#   %n - user part in user at domain, same as %u if there's no domain
#   %d - domain part in user at domain, empty if there's no domain
#   %h - home directory
#
# See doc/variables.txt for full list. Some examples:
#
#   default_mail_env = maildir:/var/mail/%1u/%u/Maildir
#   default_mail_env = mbox:~/mail/:INBOX=/var/mail/%u
#   default_mail_env = mbox:/var/mail/%d/%n/:INDEX=/var/indexes/%d/%n
#
#default_mail_env = 
default_mail_env = mbox:~/mail/:INBOX=/var/mail/%u

# If you need to set multiple mailbox locations or want to change default
# namespace settings, you can do it by defining namespace sections:
#
# You can have private, shared and public namespaces. The only difference
# between them is how Dovecot announces them to client via NAMESPACE
# extension. Shared namespaces are meant for user-owned mailboxes which are
# shared to other users, while public namespaces are for more globally
# accessible mailboxes.
#
# REMEMBER: If you add any namespaces, the default namespace must be added
# explicitly, ie. default_mail_env does nothing unless you have a namespace
# without a location setting. Default namespace is simply done by having a
# namespace with empty prefix.
#namespace private {
   # Hierarchy separator to use. You should use the same separator for all
   # namespaces or some clients get confused. '/' is usually a good one.
   #separator = /

   # Prefix required to access this namespace. This needs to be different for
   # all namespaces. For example "Public/".
   #prefix = 

   # Physical location of the mailbox. This is in same format as
   # default_mail_env, which is also the default for it.
   #location =

   # There can be only one INBOX, and this setting defines which namespace
   # has it.
   #inbox = yes

   # If namespace is hidden, it's not advertised to clients via NAMESPACE
   # extension or shown in LIST replies. This is mostly useful when converting
   # from another server with different namespaces which you want to depricate
   # but still keep working. For example you can create hidden namespaces with
   # prefixes "~/mail/", "~%u/mail/" and "mail/".
   #hidden = yes
#}

# Space-separated list of fields to initially save into cache file. Currently
# these fields are allowed:
#
#  flags, date.sent, date.received, size.virtual, size.physical
#  mime.parts, imap.body, imap.bodystructure
#
# Different IMAP clients work in different ways, so they benefit from
# different cached fields. Some do not benefit from them at all. Caching more
# than necessary generates useless disk I/O, so you don't want to do that
# either.
#
# Dovecot attempts to automatically figure out what client wants and it keeps
# only that. However the first few times a mailbox is opened, Dovecot hasn't
# yet figured out what client needs, so it may not perform optimally. If you
# know what fields the majority of your clients need, it may be useful to set
# these fields by hand. If client doesn't actually use them, Dovecot will
# eventually drop them.
#
# Usually you should just leave this field alone. The potential benefits are
# typically unnoticeable.
#mail_cache_fields = 

# Space-separated list of fields that Dovecot should never save to cache file.
# Useful if you want to save disk space at the cost of more I/O when the fields
# needed.
#mail_never_cache_fields = 

# Like mailbox_check_interval, but used for IDLE command.
#mailbox_idle_check_interval = 30

# Allow full filesystem access to clients. There's no access checks other than
# what the operating system does for the active UID/GID. It works with both
# maildir and mboxes, allowing you to prefix mailboxes names with eg. /path/
# or ~user/.
#mail_full_filesystem_access = no

# Maximum allowed length for mail keyword name. It's only forced when trying
# to create new keywords.
#mail_max_keyword_length = 50

# Save mails with CR+LF instead of plain LF. This makes sending those mails
# take less CPU, especially with sendfile() syscall with Linux and FreeBSD.
# But it also creates a bit more disk I/O which may just make it slower.
#mail_save_crlf = no

# Use mmap() instead of read() to read mail files. read() seems to be a bit
# faster with my Linux/x86 and it's better with NFS, so that's the default.
# Note that OpenBSD 3.3 and older don't work right with mail_read_mmaped = yes.
#mail_read_mmaped = no

# Don't use mmap() at all. This is required if you store indexes in remote
# filesystems (NFS or clustered filesystem).
#mmap_disable = no

# Don't write() to mmaped files. This is required for some operating systems
# which use separate caches for them, such as OpenBSD.
#mmap_no_write = no

# Locking method for index files. Alternatives are fcntl, flock and dotlock.
# Dotlocking uses some tricks which may create more disk I/O than other locking
# methods.
#lock_method = fcntl

# By default LIST command returns all entries in maildir beginning with dot.
# Enabling this option makes Dovecot return only entries which are directories.
# This is done by stat()ing each entry, so it causes more disk I/O.
# (For systems setting struct dirent->d_type, this check is free and it's
# done always regardless of this setting)
#maildir_stat_dirs = no

# Copy mail to another folders using hard links. This is much faster than
# actually copying the file. This is problematic only if something modifies
# the mail in one folder but doesn't want it modified in the others. I don't
# know any MUA which would modify mail files directly. IMAP protocol also
# requires that the mails don't change, so it would be problematic in any case.
# If you care about performance, enable it.
#maildir_copy_with_hardlinks = no

# Which locking methods to use for locking mbox. There's four available:
#  dotlock: Create <mailbox>.lock file. This is the oldest and most NFS-safe
#           solution. If you want to use /var/mail/ like directory, the users
#           will need write access to that directory.
#  fcntl  : Use this if possible. Works with NFS too if lockd is used.
#  flock  : May not exist in all systems. Doesn't work with NFS.
#  lockf  : May not exist in all systems. Doesn't work with NFS.
#
# You can use multiple locking methods; if you do the order they're declared
# in is important to avoid deadlocks if other MTAs/MUAs are using multiple
# locking methods as well. Some operating systems don't allow using some of
# them simultaneously.
#mbox_read_locks = fcntl
#mbox_write_locks = dotlock fcntl
mbox_read_locks = fcntl
mbox_write_locks = fcntl

# Maximum time in seconds to wait for lock (all of them) before aborting.
#mbox_lock_timeout = 300

# If dotlock exists but the mailbox isn't modified in any way, override the
# lock file after this many seconds.
#mbox_dotlock_change_timeout = 30

# When mbox changes unexpectedly we have to fully read it to find out what
# changed. If the mbox is large this can take a long time. Since the change
# is usually just a newly appended mail, it'd be faster to simply read the
# new mails. If this setting is enabled, Dovecot does this but still safely
# fallbacks to re-reading the whole mbox file whenever something in mbox isn't
# how it's expected to be. The only real downside to this setting is that if
# some other MUA changes message flags, Dovecot doesn't notice it immediately.
# Note that a full sync is done with SELECT, EXAMINE, EXPUNGE and CHECK 
# commands.
#mbox_dirty_syncs = yes

# Like mbox_dirty_syncs, but don't do full syncs even with SELECT, EXAMINE,
# EXPUNGE or CHECK commands. If this is set, mbox_dirty_syncs is ignored.
#mbox_very_dirty_syncs = no

# Delay writing mbox headers until doing a full write sync (EXPUNGE and CHECK
# commands and when closing the mailbox). This is especially useful for POP3
# where clients often delete all mails. The downside is that our changes
# aren't immediately visible to other MUAs.
#mbox_lazy_writes = yes

# umask to use for mail files and directories
#umask = 0077

# Drop all privileges before exec()ing the mail process. This is mostly
# meant for debugging, otherwise you don't get core dumps. It could be a small
# security risk if you use single UID for multiple users, as the users could
# ptrace() each others processes then.
#mail_drop_priv_before_exec = no

# Set max. process size in megabytes. Most of the memory goes to mmap()ing
# files, so it shouldn't harm much even if this limit is set pretty high.
#mail_process_size = 256

# Log prefix for mail processes. See doc/variables.txt for list of possible
# variables you can use.
#mail_log_prefix = "%Us(%u): "

##
## IMAP specific settings
##

protocol imap {
  # Login executable location.
  login_executable = /usr/libexec/dovecot/imap-login

  # IMAP executable location
  #mail_executable = /usr/libexec/dovecot/imap
  # This would write rawlogs into ~/dovecot.rawlog/ directory:
  mail_executable = /usr/libexec/dovecot/rawlog /usr/libexec/dovecot/imap

  # Maximum IMAP command line length in bytes. Some clients generate very long
  # command lines with huge mailboxes, so you may need to raise this if you get
  # "Too long argument" or "IMAP command line too large" errors often.
  #imap_max_line_length = 65536

  # Support for dynamically loadable modules.
  #mail_use_modules = no
  #mail_modules = /usr/lib/dovecot/imap

  # Send IMAP capabilities in greeting message. This makes it unnecessary for
  # clients to request it with CAPABILITY command, so it saves one round-trip.
  # Many clients however don't understand it and ask the CAPABILITY anyway.
  #login_greeting_capability = no

  # Workarounds for various client bugs:
  #   oe6-fetch-no-newmail:
  #     Never send EXISTS/RECENT when replying to FETCH command. Outlook Express
  #     seems to think they are FETCH replies and gives user "Message no longer
  #     in server" error. Note that OE6 still breaks even with this workaround
  #     if synchronization is set to "Headers Only".
  #   outlook-idle:
  #     Outlook and Outlook Express never abort IDLE command, so if no mail
  #     arrives in half a hour, Dovecot closes the connection. This is still
  #     fine, except Outlook doesn't connect back so you don't see if new mail
  #     arrives.
  #   netscape-eoh:
  #     Netscape 4.x breaks if message headers don't end with the empty "end of
  #     headers" line. Normally all messages have this, but setting this
  #     workaround makes sure that Netscape never breaks by adding the line if
  #     it doesn't exist. This is done only for FETCH BODY[HEADER.FIELDS..]
  #     commands. Note that RFC says this shouldn't be done.
  #   tb-negative-fetch:
  #     Thunderbird sometimes messed up some calculations and wants to read
  #     the message past it's end, giving negative size to FETCH BODY[]<..>
  #     command. This workaround just hides the error message.
  #imap_client_workarounds = outlook-idle
}
  
##
## POP3 specific settings
##

protocol pop3 {
  # Login executable location.
  #login_executable = /usr/libexec/dovecot/pop3-login

  # POP3 executable location
  #mail_executable = /usr/libexec/dovecot/pop3

  # Don't try to set mails non-recent or seen with POP3 sessions. This is
  # mostly intended to reduce disk I/O. With maildir it doesn't move files
  # from new/ to cur/, with mbox it doesn't write Status-header.
  #pop3_no_flag_updates = no

  # Support LAST command which exists in old POP3 specs, but has been removed
  # from new ones. Some clients still wish to use this though. Enabling this
  # makes RSET command clear all \Seen flags from messages.
  #pop3_enable_last = no
  
  # POP3 UIDL format to use. You can use following variables:
  #
  #  %v - Mailbox UIDVALIDITY
  #  %u - Mail UID
  #  %m - MD5 sum of the mailbox headers in hex (mbox only)
  #  %f - filename (maildir only)
  #
  # If you want UIDL compatibility with other POP3 servers, use:
  #  UW's ipop3d         : %08Xv%08Xu
  #  Courier version 0   : %f
  #  Courier version 1   : %u
  #  Courier version 2   : %v-%u
  #  Cyrus (<= 2.1.3)    : %u
  #  Cyrus (>= 2.1.4)    : %v.%u
  #
  # Note that Outlook 2003 seems to have problems with %v.%u format which is
  # Dovecot's default, so if you're building a new server it would be a good
  # idea to change this. %08Xu%08Xv should be pretty fail-safe.
   pop3_uidl_format = %08Xv%08Xu

  # Support for dynamically loadable modules.
  #mail_use_modules = no
  #mail_modules = /usr/lib/dovecot/pop3

  # Workarounds for various client bugs:
  #   outlook-no-nuls:
  #     Outlook and Outlook Express hang if mails contain NUL characters.
  #     This setting replaces them with 0x80 character.
  #   oe-ns-eoh:
  #     Outlook Express and Netscape Mail breaks if end of headers-line is
  #     missing. This option simply sends it if it's missing.
  #pop3_client_workarounds = 
}

##
## Authentication processes
##

# You can have multiple authentication processes. With plaintext authentication
# the password is checked against each process, the first one which succeeds is
# used. This is useful if you want to allow both system users (/etc/passwd)
# and virtual users to login without duplicating the system users into virtual
# database.

# Executable location
#auth_executable = /usr/libexec/dovecot/dovecot-auth

# Set max. process size in megabytes.
#auth_process_size = 256

# Authentication cache size in kilobytes.
#auth_cache_size = 0
# Time to live in seconds for cached data. After this many seconds a cached
# record is forced out of cache.
#auth_cache_ttl = 3600

# Space separated list of realms for SASL authentication mechanisms that need
# them. You can leave it empty if you don't want to support multiple realms.
# Many clients simply use the first one listed here, so keep the default realm
# first.
#auth_realms =

# Default realm/domain to use if none was specified. This is used for both
# SASL realms and appending @domain to username in plaintext logins.
#auth_default_realm = 

# List of allowed characters in username. If the user-given username contains
# a character not listed in here, the login automatically fails. This is just
# an extra check to make sure user can't exploit any potential quote escaping
# vulnerabilities with SQL/LDAP databases. If you want to allow all characters,
# set this value to empty.
#auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

# Username character translations before it's looked up from databases. The
# value contains series of from -> to characters. For example "#@/@" means
# that '#' and '/' characters are translated to '@'.
#auth_username_translation =

# Username to use for users logging in with ANONYMOUS SASL mechanism
#auth_anonymous_username = anonymous

# More verbose logging. Useful for figuring out why authentication isn't
# working.
#auth_verbose = no

# Even more verbose logging for debugging purposes. Shows for example SQL
# queries.
#auth_debug = no

auth default {
  # Space separated list of wanted authentication mechanisms:
  #   plain digest-md5 cram-md5 apop anonymous
  mechanisms = plain

  # Password database specifies only the passwords for users.
  # http://wiki.dovecot.org/Authentication
  #   passwd: /etc/passwd or similiar, using getpwnam()
  #   shadow: /etc/shadow or similiar, using getspnam()
  #   pam [<service> | *]: PAM authentication
  #   checkpassword <path>: checkpassword executable authentication
  #   passwd-file <path>: passwd-like file with specified location
  #   vpopmail: vpopmail authentication
  #   ldap <config path>: LDAP, see doc/dovecot-ldap.conf
  #   sql <config path>: SQL database, see doc/dovecot-sql.conf
  passdb = pam

  # User database specifies where mails are located and what user/group IDs
  # own them. For single-UID configuration use "static".
  # http://wiki.dovecot.org/Authentication
  # http://wiki.dovecot.org/VirtualUsers
  #   passwd: /etc/passwd or similiar, using getpwnam()
  #   passwd-file <path>: passwd-like file with specified location
  #   static uid=<uid> gid=<gid> home=<dir template>: static settings
  #   vpopmail: vpopmail library
  #   ldap <config path>: LDAP, see doc/dovecot-ldap.conf
  #   sql <config path>: SQL database, see doc/dovecot-sql.conf
  userdb = passwd

  # User to use for the process. This user needs access to only user and
  # password databases, nothing else. Only shadow and pam authentication
  # requires roots, so use something else if possible. Note that passwd
  # authentication with BSDs internally accesses shadow files, which also
  # requires roots. Note that this user is NOT used to access mails.
  # That user is specified by userdb above.
  user = root

  # Directory where to chroot the process. Most authentication backends don't
  # work if this is set, and there's no point chrooting if auth_user is root.
  #chroot = 

  # Number of authentication processes to create
  #count = 1

  # Require a valid SSL client certificate or the authentication fails.
  #ssl_require_client_cert = no
}

# PAM doesn't provide a way to get uid, gid or home directory. If you don't
# want to use a separate user database (passwd usually), you can use static
# userdb.

#auth onlypam {
#  mechanisms = plain
#  userdb = static uid=500 gid=500 home=/var/mail/%u
#  passdb = pam
#  user = dovecot-auth
#}

#auth ldap {
#  mechanisms = plain
#  userdb = ldap /etc/dovecot-ldap.conf
#  passdb = ldap /etc/dovecot-ldap.conf
#  user = dovecot-auth
#}

#auth virtualfile {
#  mechanisms = plain digest-md5
#  userdb = passwd-file /etc/passwd.imap
#  passdb = passwd-file /etc/passwd.imap
#  user = dovecot-auth
#}

# It's possible to export the authentication interface to other programs,
# for example SMTP server which supports talking to Dovecot. Client socket
# handles the actual authentication - you give it a username and password
# and it returns OK or failure. So it's pretty safe to allow anyone access to
# it. Master socket is used to a) query if given client was successfully
# authenticated, b) userdb lookups.

# listener sockets will be created by Dovecot's master process using the
# settings given inside the auth section
#auth default_with_listener {
#  mechanisms = plain
#  passdb = passwd
#  userdb = pam
#  socket listen {
#    master {
#      path = /var/run/dovecot/auth-master
#      #mode = 0600
#      # Default user/group is the one who started dovecot-auth (root)
#      #user = 
#      #group = 
#    }
#    client {
#      path = /var/run/dovecot-auth-client
#      mode = 0660
#    }
#  }
#}

# connect sockets are assumed to be already running, Dovecot's master
# process only tries to connect to them. They don't need any other settings
# than path for the master socket, as the configuration is done elsewhere.
# Note that the client sockets must exist in login_dir.
#auth external {
#  socket connect {
#    master {
#      path = /var/run/dovecot/auth-master
#    }
#  }
#}


More information about the dovecot mailing list