Назад | Перейти на главную страницу

Виртуальные пользователи Dovecot и сопоставление доменов пользователей

Я успешно скомпилировал, настроил и запустил Dovecot с функцией виртуальных пользователей.

Вот часть моего /etc/dovecot.conf Файл конфигурации:

mail_location = maildir:/home/%d/%n/Maildir

auth default {
    mechanisms = plain login

    userdb passwd-file {
        args = /home/%d/etc/passwd
    }
    passdb passwd-file {
        args = /home/%d/etc/shadow
    }

    socket listen {
        master {
            path = /var/run/dovecot/auth-worker
            mode = 0600
        }
    }
}

Я столкнулся с одной проблемой, которую не могу решить сам. Есть ли способ создать сопоставление доменов пользователей и указать имя пользователя в mail_location?

Примеры: 1. в настоящее время у меня есть /home/domain.com/user/Maildir 2. Я бы хотел иметь /home/USER/domain.com/user/Maildir

Могу я как-нибудь этого добиться?

Привет, Стойко

Задумайтесь на мгновение, о чем вы просите. Вы хотите включить домашний каталог пользователя в mail_location. На первый взгляд это кажется разумным запросом, но вы должны спросить - откуда Dovecot знает домашний каталог пользователя?

Системные пользователи хранятся в / etc / passwd - этот файл содержит

username:password:uid:gid:comment:home:shell

(Примечание: вместо пароля у вас может быть x с паролем, хранящимся в / etc / shadow; или * деактивировать аккаунт; комментарий на самом деле 'месторождение гекос')

Если Dovecot читает этот файл - он предоставляется вместе с домашним каталогом пользователя - как только он получит эту информацию, он сможет использовать ее в другом месте (то есть сможет использовать '~ /to signify the home directory, and will set% h` к тому же).

Однако, если вы используете виртуальных пользователей, а не пользователей системы, одна из фундаментальных идей состоит в том, что не каждый виртуальный пользователь должен быть пользователем системы. В этом случае Dovecot не имеет возможности узнать, является ли виртуальный пользователь с тем же именем, что и системный пользователь, на самом деле тем же пользователем или нет (он также не может использовать UID, поскольку можно сопоставить несколько виртуальных пользователей с тот же UID). Он не будет предполагать ничего, кроме того, что предусмотрено в вашей userdb.

А Userdb может предоставить Dovecot следующую информацию:

  • uid: UID пользователя (идентификатор пользователя UNIX), отменяет глобальную настройку mail_uid.
  • gid: GID пользователя (идентификатор группы UNIX), отменяет глобальную настройку mail_gid.
  • home: домашний каталог пользователя, отменяет глобальную настройку mail_home. Хотя это и не обязательно, но настоятельно рекомендуется даже для виртуальных пользователей.
  • mail: расположение почты, переопределяет глобальную настройку mail_location.
  • Необязательные дополнительные поля, которые передаются процессу IMAP / POP3 в переменных среды.

В вашей конфигурации вы используете файл passwd, то есть файл с тем же форматом, что и системный файл passwd, но который вы настроили для этой цели (т.е. это не системный файл passwd). Dovecot принимает следующие формат файла passwd (и игнорирует поля gecos и shell):

user:password:uid:gid:(gecos):home:(shell):extra_fields

Вы можете переопределить определенные значения по умолчанию для каждого пользователя, указав (с разделителями пробелами) key=value дополнительные поля (с ключами с префиксом userdb_ в большинстве случаев). Например, userdb_mail=Maildir:~/mail переопределит mail_location.

Повторюсь, используя виртуальных пользователей (а не используя системный файл passwd), вы сказали Dovecot, что эти пользователи могут не иметь никакого отношения к системным пользователям, и поэтому он будет использовать только предоставленную вами информацию, не предполагая что-нибудь еще.

Наконец, чтобы попытаться ответить на ваш вопрос:

  • Вы можете использовать несколько переменных в mail_location - они определены на Страница переменных Dovecot.
  • Переменная %h или, предпочтительно ~/ может использоваться для возврата домашнего каталога, который Dovecot извлек из своего запроса UserDB (и устанавливает mail_home)
  • Вы должны указать домашний каталог для всех пользователей в вашей UserDB
  • Вы можете переопределить mail_location вернув userdb_mail из вашего запроса userdb.

Итак, по сути, установите дом в своей userdb, если вы хотите использовать домашний каталог в Dovecot, потому что он не может знать, что вы ему не говорите.

В соответствии с эта ссылка Вы можете использовать "несколько переменных в настройке mail_location"

%u: Full username.
%n: User part in user@domain, same as %u if there's no domain.
%d: Domain part in user@domain, empty if there's no domain.

например.

mail_location = maildir:/home/%n/%d/%n/Maildir

должен указывать на / home / user / domain / user / Maildir