doveadm search -A problem with dropped privileges

Sebastian Kricner sebastian.kricner at tuxwave.net
Tue Jul 14 03:53:18 UTC 2015


Hello,

if you want to answer to this mail, please send it directly to me.

I have found a big issue with the following command "doveadm -search -A". It
whatsoever works by setting doveadm_worker_count = 0 in the dovecot.conf
configuration file.

The problem is that doveadm-server or something similar uses privileges of
"nobody" and so it fails searching e-mails. Instead also the process tries to
create a maildir for "nobody":

Debug: Namespace : /var/mail/nobody doesn't exist yet, using default permissions
Debug: Namespace : Using permissions from /var/mail/nobody: mode=0700 gid=default
Error: User initialization failed: Namespace '': mkdir(/var/mail/nobody) failed: Permission denied (euid=65534(nobody) egid=65534(nobody) missing +w perm: /var/mail, we're not in group 12(mail), dir owned by 0:12 mode=0775)
Error: search: User init failed
Error: userdb lookup: connect(/var/run/dovecot//auth-userdb) failed: Permission denied (euid=65534(nobody) egid=65534(nobody) missing +r perm: /var/run/dovecot//auth-userdb, we're not in group 12(mail), dir owned by 0:0 mode=0755)
Error: search: User lookup failed: Internal error occurred. Refer to server log for more information.

Even after setting permissions, so that the process can create a maildir for
"nobody" in the /var/mail location, it fails to "setresgid" to the particular
user to be scanned.

It can´t work because it is not possible to gain other user privileges from
another user.


# 2.2.16: /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.7
# OS: Linux Gentoo Base System release 2.2

auth_cache_negative_ttl = xx mins
auth_cache_size = xx M
auth_cache_ttl = xx mins
auth_mechanisms = xx xx
auth_worker_max_count = xx
base_dir = /var/run/dovecot/
default_process_limit = xx
dict {
  expire = sqlite:/xx
}
doveadm_worker_count = 1
first_valid_gid = xx
first_valid_uid = xx
login_greeting = xx.xx
mail_location = maildir:/xx/xx/%u
mail_privileged_group = xx
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate

passdb {
  args = scheme=SHA512 /xx/xx/xx.xx
  driver = passwd-file
}

plugin {
  expire = xx
  expire2 = xx
  expire_dict = proxy::expire
  sieve = ~/.xx.xx
  sieve_dir = ~/.xx
}
protocols = imap sieve
service auth {
  unix_listener auth-client {
    group = xx
    mode = 0660
  }
  unix_listener auth-userdb {
    group = xx
    mode = 0660
  }
}
service dict {
  unix_listener dict {
    mode = 0666
  }
}
service imap-login {
  inet_listener imap {
    port = 0
  }
  process_limit = 6
  service_count = 1
}
ssl_cert = </xx/xx/xx/xx.xx.xx
ssl_key = </xx/xx/xx/xx.xx.xx
ssl_parameters_regenerate = xx days
userdb {
  driver = passwd
}
protocol lda {
  mail_plugins = sieve expire
}
protocol imap {
  imap_idle_notify_interval = xx mins
  mail_max_userip_connections = xx
  mail_plugins = expire
}

Regards

Sebastian Kricner


-- 
http://tuxwave.net -- the difference to think makes it real!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://dovecot.org/pipermail/dovecot/attachments/20150714/c69b85f0/attachment.sig>


More information about the dovecot mailing list