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

Рецепт Procmail, почта принадлежит root

Я использую комбинацию Postfix и Procmail для обработки входящей почты на одном из моих серверов. У каждого пользователя есть локальная учетная запись, и я использовал следующие /usr/local/etc/procmailrc успешно в течение многих лет:

DEFAULT=$HOME/mail/
LOGFILE=/var/log/procmail

Недавно я добавил рецепт, чтобы отправлять сообщения, помеченные как спам, в отдельную папку:

:0
* ^X-Spam-Flag: YES
$HOME/mail/.Junk/

Однако в некоторых случаях кажется, что сообщения, попадающие в эту папку, принадлежат пользователю root, а не правильному пользователю. У меня никогда не было этой проблемы с почтовым ящиком, и, похоже, она затрагивает только определенных пользователей.

Мне удалось поймать один из процессов Procmail в ps и, похоже, он работает как правильный пользователь. (Этот пользователь также имеет почту, принадлежащую пользователю root, в папке нежелательной почты)

# ps axu | grep procmail
{correct-local-username}   7402   0.0  0.2  12140   1780 ??  Ss   11:37AM      0:00.01 /usr/local/bin/procmail -a

Кто-нибудь знает, почему сообщения, обрабатываемые по рецепту, в конечном итоге принадлежат пользователю root, а сообщения, идущие в папку по умолчанию, получают правильного владельца?

Могу ли я что-нибудь сделать (даже если это взломано, например, вызвать chown из рецепта Procmail), чтобы убедиться, что сообщения всегда принадлежат правильному пользователю?

Если это важно, Procmail настраивается в Postix следующим образом:

mailbox_command = /usr/local/bin/procmail -a "$EXTENSION"

Убедитесь, что права доступа к папке нежелательной почты верны, но не могли бы вы также добавить следующее в свой procmail.cf:

DROPPRIVS=yes

Я не специалист по procmail, но согласно запись этого человека, он должен отбросить все привилегии, которые были у procmail, а у получателя - нет (выделено мной).

 DROPPRIVS            If  set  to  `yes'  procmail   will   drop   all
                      privileges  it  might  have  had (suid or sgid).
                      This is only useful if  you  want  to  guarantee
                      that the bottom half of the /etc/procmailrc file
                      is executed on behalf of the recipient.

Часть ключа; исполняется от имени получателя.

Объяснение того, почему это работает, от пользователя @Tripleee:

Доставка DEFAULT происходит после неявного DROPPRIVS, но если вы явно доставляете что-то в привилегированном режиме, вам также необходимо явно отказаться от своих привилегий.