Я пытаюсь перенести нашу почтовую систему на основе пользователей Linux на виртуальных пользователей.
у меня есть
Sendmail обрабатывает всю доставку почты в почтовые ящики пользователей, dovecot обрабатывает взаимодействие pop3 и imap с пользователями, все работает как шарм
Теперь мы начинаем внедрять активный каталог в глобальном масштабе, и я хочу отказаться от пользователей электронной почты системы Linux до пользователей виртуальных ldap.
Я включил sendmail ldap_routing
define(`confLDAP_DEFAULT_SPEC', `-h "10.1.0.1" -b "ou=portal,dc=univ,dc=priv" -d "cn=portal admin,ou=portal,dc=univ,dc=priv" -MLDAP_AUTH_SIMPLE -P/etc/mail/ldap_pass')dnl
LDAPROUTE_DOMAIN_FILE(`/etc/mail/ldap_route_domains')dnl
FEATURE(`ldap_routing', `null', `ldap -1 -T -v sAMAccountName -k (&(|(objectclass=user)(objectclass=group))(|(mail=%0)(proxyAddresses=smtp:%0)))',`passthru')dnl
создал простой файл псевдонимов для пользователей ldap через perl-скрипт. Файл изначально выглядел так
sAMAccountName1: vmail
sAMAccountName2: vmail
....
sAMAccountNameN: vmail
включил dovecot-lda с помощью этого как
К сожалению, sendmail передает реальное системное имя пользователя (в моем случае "vmail") как аргумент -d, а не sAMAccountName виртуального пользователя с этой конфигурацией.
После этого я изменяю свой файл псевдонима примерно так (вдохновленный этим тема)
sAMAccountName1: "|/usr/libexec/dovecot/dovecot-lda -d sAMAccountName1"
sAMAccountName2: "|/usr/libexec/dovecot/dovecot-lda -d sAMAccountName1"
....
sAMAccountNameN: "|/usr/libexec/dovecot/dovecot-lda -d sAMAccountName1"
Это решение не работает из-за проблемы с правильной системой, которую я не могу решить. Вот сообщения журнала
Неустранимая ошибка: setgid (5000 (vmail) из поиска userdb) завершился неудачно с euid = 8 (mail), gid = 12 (mail), egid = 12 (mail): Operation not allowed (этот двоичный файл, вероятно, следует вызывать с группой процессов, установленной на 5000 (vmail) вместо 12 (mail))
агент доставки dovecot, определенный в sendmail.cf с U = vmail: vmail
Mdovecot, P=/usr/libexec/dovecot/dovecot-lda,
F=l59DFMPhnu,
S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
M=51200000,
U=vmail:vmail,
T=DNS/RFC822/X-Unix,
A=/usr/libexec/dovecot/dovecot-lda -d $u
У dovecot-lda тот же владелец и группа
-rwxr-x--- 1 vmail vmail 28512 апр. 5 2013 /usr/libexec/dovecot/dovecot-lda
Если я использую системную почту пользователя вместо vmail, все начинает работать нормально. Но эта конфигурация кажется мне менее безопасной, и я хочу использовать vmail пользователя с uid> 100 вместо почты пользователя.
Итак, доставка почты не удалась. Я ценю любую помощь в решении этой проблемы.
Я пытался настроить это сам и находил здесь и там фрагменты, но не полный рецепт. Вот как я это сделал.
Я использую FreeBSD 10.3-RELEASE, sendmail 8.15.2 и dovecot 2.2.29.
Вам нужен пользователь для файлов виртуальных пользователей:
# passwd
vmail:*:2025:2025:Dovecot Virtual Mail:/var/empty:/usr/sbin/nologin
# group
vmail:*:2025:
Голубятня проста, так что давайте сделаем это в первую очередь. Предполагая, что конфигурация dovecot работает, у вас уже будет хотя бы одна настройка userdb. Добавьте новый для виртуальных пользователей:
# Virtual users
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/vmail/%u
}
Если у вас его еще нет, добавьте параметр passdb для статических учетных данных:
passdb {
args = scheme=plain-md5 username_format=%u /usr/local/etc/dovecot/imap-passwd
driver = passwd-file
}
Создайте / var / vmail:
mkdir /var/vmail
chown vmail:vmail /var/vmail
и если вы не хотите вручную создавать каталоги для каждого нового виртуального пользователя, добавьте:
# Virtual users config
lda_mailbox_autocreate = yes
в dovecot.conf (признак того, что lda_mailbox_autocreate не включен и каталоги не существуют, - это ошибки EX_TEMPFAIL и сообщения, застрявшие в локальной очереди sendmail).
Используйте doveadm pw -s PLAIN-MD5 и добавьте строку для нового виртуального пользователя:
vfred:{PLAIN-MD5}912ec803b2ce49e4a541068d495ab570
Перезапустите dovecot, чтобы получить новую конфигурацию:
service dovecot restart
Теперь перейдем к sendmail. Если у вас нет почтовой таблицы, вам нужно добавить ее:
FEATURE(`mailertable')dnl
в sendmail.mc и:
vmail dovecot:dummy
в mailertable. Это говорит sendmail использовать локального агента доставки dovecot для * @ vmail.
В конце вашего sendmail.mc у вас, вероятно, будет что-то вроде:
MAILER(local)dnl
MAILER(smtp)dnl
Добавьте что-нибудь вроде:
dnl
dnl Dovecot virtual user delivery agent
dnl
LOCAL_CONFIG
Mdovecot,
P=/usr/local/libexec/dovecot/dovecot-lda,
F=l59DFMPhnu,
S=EnvFromL/HdrFromL,
R=EnvToL/HdrToL,
M=51200000,
U=vmail:vmail,
T=DNS/RFC822/X-Unix,
A=/usr/local/libexec/dovecot/dovecot-lda -d $u
сгенерируйте новый sendmail.cf и перезапустите sendmail:
service sendmail stop ; sleep 1 ; service sendmail start
("перезапуск службы sendmail" под FreeBSD немного забавен)
Наконец, добавьте своего виртуального пользователя в файл псевдонимов:
vfred: vfred@vmail
Запустите newaliases и test.
Пропустите чтение, если не решились :-)
Сделайте vmail особенным для sendmail (без поиска DNS для пункта назначения)
LOCAL_CONFIG
CPvmail
Используйте FEATURE (ldap_routing), чтобы выбрать mailHost, а не mailRoutingAddress
Используйте FEATURE (mailertable), чтобы выбрать способ доставки (mailer)
почтовая таблица
vmail dovecot:dummy
Не делайте dovecot локальной почтовой программой - FEATURE (local_procmail, ...)
В определении почтовой программы dovecot используйте правила xSMTP, а не правила xL (локальные)