Задний план
Я настроил пример постфиксного сервера, используя sqlite для хранения псевдонимов и сведений о почтовом ящике (чтобы их можно было обновлять в реальном времени и иметь единственный источник правды, являющийся базой данных).
У меня есть части postfix, запускающие chroot, где это возможно для безопасности, поэтому база данных (mail.sqlite) находится в /var/lib/postfix/
(Это все работает.)
Необходимая функциональность
Я написал веб-интерфейс, чтобы пользователи могли добавлять новые адреса электронной почты. Веб-интерфейс работает как www-data.
Я добавил www-данные в постфиксную группу, чтобы chmod g+rw /var/lib/postfix/mail.sqlite /var/lib/postfix/
позволит веб-интерфейсу обновить базу данных.
Электронная почта течет в и из. Веб-интерфейс может создавать псевдонимы Remote Update Delete. Я перезапускаю postfix и проверяю логи:
postfix/postfix-script[26524]: предупреждение: группа или другой доступный для записи: /var/lib/postfix/.
postfix/postfix-script[26525]: предупреждение: группа или другие записи: /var/lib/postfix/./mail.sqlite
Если я chmod g-w /var/lib/postfix/mail.sqlite
это делает postfix счастливым, но убирает возможность для моего веб-интерфейса добавлять новые псевдонимы.
У меня мог бы быть скрипт cron для замены /var/lib/postfix/mail.sqlite авторитетным /var/www/admin/app/mail.sqlite, но это пахнет состоянием гонки,
или, по крайней мере, неэлегантно.
(Интересно, почему postfix ссылается на базу данных как «/var/lib/postfix/./mail.sqlite», когда конфигурация dbpath = /var/lib/postfix/mail.sqlite
?)
Вопрос
Как я могу предоставить моему веб-интерфейсу cgi доступ для записи в базу данных postfix, не запуская ее как постфикс и сохраняя постфикс счастливым? (Я думаю, что мне нужно решить эту проблему, прежде чем добавлять политики SELinux.)
Редактировать:
У меня был main.cf с
virtual_mailbox_maps = sqlite:/etc/postfix/sqlite_mailbox.cf
virtual_alias_maps = sqlite:/etc/postfix/sqlite_alias.cf
виртуальный_почтовый_домен = sqlite:/etc/postfix/sqlite_domains.cf
и попробовал проксимап:
virtual_mailbox_maps = прокси:sqlite:/etc/postfix/sqlite_mailbox.cf
virtual_alias_maps = прокси:sqlite:/etc/postfix/sqlite_alias.cf
виртуальный_почтовый_домен = прокси:sqlite:/etc/postfix/sqlite_domains.cf
Оба одинаково хорошо работают для обработки электронной почты, но после перезапуска постфикса оба по-прежнему регистрируют:
postfix/postfix-script[957]: предупреждение: группа или другой доступный для записи: /var/lib/postfix/.
postfix/postfix-script[958]: предупреждение: группа или другие записи: /var/lib/postfix/./mail.sqlite