Получение разрешения отклонено ошибка lmtp/sieve

Вопрос или проблема

Я впервые настроил sieve на машине с Debian, работающей под управлением postfix/dovecot/lmtp. Это работает, однако я хочу прояснить ошибку, которую я получал:

lmtp(joeblow)<17980><GG5KL91cf188RgAAajKqBA>: Ошибка: sieve: сохранение двоичного файла: не удалось создать временный файл: open(/var/lib/dovecot/sieve/default.svbin.) не удалось: Доступ запрещен (euid=1008(joeblow) egid=1009(joeblow) отсутствует +w разрешение: /var/lib/dovecot/sieve, папка принадлежит 0:0 режим=0755)

lmtp(joeblow)<17980><GG5KL91cf188RgAAajKqBA>: Ошибка: sieve: Плагин LDA Sieve не имеет разрешения на сохранение глобальных двоичных файлов сценартов Sieve; глобальные сценарты Sieve, такие как '/var/lib/dovecot/sieve/default.sieve', нужно предварительно компилировать с помощью инструмента sievec

Насколько я могу судить, это происходит, когда приходит электронное письмо. Я не совсем уверен, нужен ли мне lda, если у меня есть lmtp, но я на самом деле не знаю, что делаю, поэтому не знаю, что делать вообще. Мне потребовалось некоторое время, чтобы разобраться с этой конфигурацией, и я сделал это несколько дней назад.

Мой файл 90-sieve.conf:

plugin {
  sieve = file:~/sieve;active=~/.dovecot.sieve
  sieve_default = /var/lib/dovecot/sieve/default.sieve
  sieve_default_name = Defaults
  sieve_global = /var/lib/dovecot/sieve
  sieve_user_log = ~/.dovecot.sieve.log
}
# 2.3.4.1 (f79e8e7e4): /etc/dovecot/dovecot.conf
# Версия Pigeonhole 0.5.4 ()
# ОС: Linux 4.19.0-11-cloud-amd64 x86_64 Debian 10.6
auth_debug = yes
auth_debug_passwords = yes
auth_mechanisms = plain login
auth_username_format = %Ln
auth_verbose = yes
mail_debug = yes
mail_location = maildir:~/Maildir
mail_privileged_group = mail
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 mime foreverypart extracttext
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    auto = subscribe
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
}
passdb {
  driver = pam
}
plugin {
  sieve = file:~/sieve;active=~/.dovecot.sieve
  sieve_default = /var/lib/dovecot/sieve/default.sieve
  sieve_default_name = Defaults
  sieve_global = /var/lib/dovecot/sieve
  sieve_user_log = ~/.dovecot.sieve.log
}
protocols = " imap lmtp sieve pop3 sieve"
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0666
    user = postfix
  }
  unix_listener auth-userdb {
    mode = 0666
  }
}
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
  service_count = 1
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0600
    user = postfix
  }
}
service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
  process_min_avail = 1
}
service pop3-login {
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}
service pop3 {
  process_limit = 1024
}
service submission {
  process_limit = 1024
}
ssl_cert = </opt/bitnami/letsencrypt/certificates/email.example.org.crt
ssl_client_ca_dir = /etc/ssl/certs
ssl_dh = # скрыто, используйте -P, чтобы показать его
ssl_key = # скрыто, используйте -P, чтобы показать его
userdb {
  driver = passwd
}
protocol lmtp {
  mail_plugins = " sieve"
}
protocol lda {
  mail_plugins = " sieve"

Давайте разберем это сообщение об ошибке

lmtp(joeblow)<17980>:

Это сервис LMTP, который обращается к вам

ошибка: sieve: Плагин LDA Sieve не имеет разрешения на сохранение глобальных двоичных файлов сценартов Sieve;

Вы применяете некоторую фильтрацию sieve глобально, и сервис LMTP (более конкретно, часть доставки, отсюда и термин LDA) настроен на вызов фильтрации sieve, которая в свою очередь в данный момент не может записать двоичные кеши глобальных сценартов.

глобальные сценарты Sieve, такие как ‘/var/lib/dovecot/sieve/default.sieve’, нужно предварительно компилировать с помощью инструмента sievec

Это именно то, что вы можете сделать, чтобы решить эту проблему – скомпилировать ваш файл:

sievec /var/lib/dovecot/sieve/default.sieve

Это создаст двоичный кеш этого файла в /var/lib/dovecot/sieve/default.svbin, который может использоваться плагином sieve.

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

Спасибо, это решило мою проблему.
Я получал ошибки “Только для чтения файловая система” от dovecot lmtp, которые на самом деле означали “ваш глобальный сценарий sieve не был скомпилирован” – даже несмотря на то, что процесс dovecot имел права на запись в файловую систему…

Ответ или решение

Ошибка "Permission Denied" при использовании Sieve в Dovecot: Подробный Анализ и Решение

При настройке системы фильтрации писем с использованием Sieve на платформе Debian с Postfix и Dovecot может возникнуть ошибка, связанная с правами доступа. Это может вызвать неудобства, особенно если вы только начали работать с этой технологией. В этой статье мы подробно рассмотрим проблему, связанную с ошибкой "Permission Denied", и предложим шаги для ее устранения.

Контекст Проблемы

Согласно предоставленному описанию, проблема возникает при попытке Dovecot сохранить бинарный кэш глобального Sieve-скрипта во время обработки входящего письма. В частности, вы видите ошибку:

Error: sieve: binary save: failed to create temporary file: open(/var/lib/dovecot/sieve/default.svbin) failed: Permission denied

Это указывает на то, что процесс, от имени которого выполняется Dovecot, не имеет необходимых прав для записи в директорию /var/lib/dovecot/sieve.

Анализ Ошибки

Согласно сообщению об ошибке:

  1. Проблема с правами доступа: Dovecot пытается создать файл default.svbin, но из-за недостатка прав для пользователя (в вашем случае joeblow, который имеет euid=1008 и egid=1009) возникает ошибка.

  2. Отсутствие предкомпиляции: Сообщение ясно указывает, что глобальные скрипты Sieve, такие как /var/lib/dovecot/sieve/default.sieve, должны быть предварительно скомпилированы с помощью утилиты sievec. Это означает, что вам необходимо выполнить эту команду вручную, поскольку Dovecot не может сделать это автоматически из-за ограничений прав.

Решение Проблемы

Для устранения ошибки выполните следующие шаги:

  1. Предварительная компиляция Sieve-скрипта:
    Откройте терминал и выполните следующую команду:

    sievec /var/lib/dovecot/sieve/default.sieve

    Эта команда скомпилирует скрипт и создаст бинарный файл default.svbin в директории /var/lib/dovecot/sieve, что позволит Dovecot использовать его при фильтрации.

  2. Проверка прав доступа:
    Убедитесь, что каталог /var/lib/dovecot/sieve имеет правильные права доступа. Ваша текущая конфигурация показывает, что каталог принадлежит пользователю root и группе root с правами 0755. Также вы можете изменить владельца каталога на пользователя Dovecot (или к группе mail), например:

    sudo chown -R dovecot:mail /var/lib/dovecot/sieve

    Либо вы можете предоставить необходимые права группам, добавив +w для группы:

    sudo chmod g+w /var/lib/dovecot/sieve

Завершение Настройки

После выполнения указанных шагов перезапустите Dovecot, чтобы убедиться, что изменения вступили в силу:

sudo systemctl restart dovecot

Теперь вы должны быть в состоянии использовать Sieve без возникновения ошибок, связанных с правами доступа.

Заключение

Решение проблемы с "Permission Denied" при использовании Sieve в Dovecot включает в себя предварительную компиляцию скриптов и правильную настройку прав доступа. Четкое понимание конфигурации и порядка выполнения действий поможет вам избежать подобных проблем в будущем и обеспечит бесперебойную работу почтового сервера. Научившись управлять этими аспектами, вы значительно улучшите стабильность и функциональность ваших почтовых решений.

Оцените материал
Добавить комментарий

Капча загружается...