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

Как заставить maildrop запускаться от имени указанного пользователя и группы из Postfix

Я заменил Postfix LDA на maildrop. Сценарий maildroprc, который я использую, также создает папки почтового ящика, если они не существуют.

В моем /etc/postfix/master.cf я определил службу maildrop

maildrop  unix  -       n       n       -       -       pipe
   flags=ODRhu user=vmail:daemon argv=/usr/bin/maildrop -w 90 -d ${user}@${nexthop}
   ${extension} ${recipient} ${user} ${nexthop}

Когда этот сценарий создает папку для учетной записи, папка и файлы внутри нее принадлежат группе «демон», и Courier IMAP не хочет читать содержимое папки, так как ожидает, что username: group будет vmail: vmail.

Если я изменю определение службы для maildrop в master.cf на «vmail: vmail», я получаю сообщение об ошибке от maildrop.

ERR: authdaemon: s_connect() failed: Permission denied Invalid user specified.

и почта не может быть доставлена. Я предполагаю, что это связано с тем, что maildrop нуждается в доступе к / var / run / courier / authdaemon, который принадлежит группе "daemon". Но я действительно не понимаю, зачем maildrop нужен доступ к папке authdaemon.

Часть скрипта maildrop, создающая папку:

`test -e $HOME_DIR/$HOST/$USER`
#log "Testing for $HOME_DIR/$HOST subdirectory: result=$RETURNCODE"
# Only continue if directory does NOT exist
if ($RETURNCODE != 0)
{
        log "MailDir $HOME_DIR/$HOST/$USER does NOT exist"
        `test -e $HOME_DIR/$HOST`
        if ( $RETURNCODE != 0 )
        {
                log "Creating $HOME_DIR/$HOST"
                `mkdir $HOME_DIR/$HOST`
                `chmod -R 0700 $HOME_DIR/$HOST`
        }

        # Create users MailDir
        `maildirmake $HOME_DIR/$HOST/$USER`
}

Я даже пробовал добавить chown vmail:vmail $HOME_DIR/$HOST/$USER к сценарию, который будет запускаться после создания maildir, но папка все еще принадлежит группе «daemon».

РЕДАКТИРОВАТЬ:

Я использую пакет maildrop 2.0.4 из репозитория Debian Lenny (5.0) и, судя по информации о пакете, он скомпилирован aganist courier authlib

Version: 2.0.4-3
Replaces: courier-base (<= 0.58.0-1)
Depends: courier-authlib, exim4 | mail-transport-agent, libc6 (>= 2.7-1), libgcc 1 (>= 1:4.1.1-21), libgdbm3, libpcre3 (>= 7.4), libstdc++6 (>= 4.2.1-4)

Вот что я нашел:

При использовании автономной сборки maildrop с courier-authlib необходимо использовать одну из следующих конфигураций:

  • Ваш почтовый сервер должен вызывать maildrop от имени пользователя root (флаг -d считывает uid и gid почтовой учетной записи, затем удаляет root).
  • Вручную измените права доступа к двоичному файлу maildrop на setuid root.
  • Вручную измените права доступа к каталогу сокета courier-authlib (по умолчанию / usr / local / var / spool / authdaemon), сделав его доступным для чтения или выполнения глобально.

A изменил групповое владение папкой / var / run / courier / authdaemon с «daemon» на «vmail», и теперь все работает нормально. Я перезапустил courier-authdaemon и все еще могу войти в свою учетную запись IMAP (я предполагаю, что эта библиотека также используется, когда Courier id ищет учетные записи пользователей и пароль).

Есть ли какие-либо последствия для безопасности, о которых я должен знать?

Думаю, нет. Пользователь vmail не имеет локальной учетной записи на ящике, и кто-то из группы vmail сможет получить доступ ко всем электронным письмам на ящике. Защита паролей не кажется такой уж большой проблемой, если моя система уже была взломана таким образом :)