Рейтинг:1

Как я могу безопасно прекратить придирчивость постфикса к групповым разрешениям базы данных sqlite?

флаг de

Задний план

Я настроил пример постфиксного сервера, используя 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
Nikita Kipriyanov avatar
флаг za
Почему вы придерживаетесь SQLite? Есть ли за этим какая-то причина? MariaDB (MySQL) — это дешевый и простой способ сделать то же самое, не беспокоясь о правах доступа к файлам.
флаг de
Я люблю MariaDB, но эта среда ограничена, и установка полной базы данных является излишним для простого поиска по ключу: значение.
Nikita Kipriyanov avatar
флаг za
Затем вы пытались использовать сервис postfix [proxymap](http://www.postfix.org/proxymap.8.html)?
флаг de
Я не пробовал проксимап. Похоже, это лучшее решение. Я пробовал, но постфикс по-прежнему предупреждает о групповых разрешениях.
Рейтинг:2
флаг jo

Источником этой ошибки является скрипт «postfix-script» на данный момент:

найдите $queue_directory/. $queue_directory/pid \
    -подрезать \( -пермь -020 -о -пермь -002 \) \
    -exec группа $WARN или другая доступная для записи: {} \;
..
найти $todo \( -perm -020 -o -perm -002 \) \
    -exec группа $WARN или другая доступная для записи: {} \;
..
найдите $data_directory/. \( -пермь -020 -о -пермь -002 \) \
    -exec группа $WARN или другая доступная для записи: {} \;
..

$todo эффективно config_directory, каталог_shlib, daemon_directory и мета_каталог как список.

Вы можете запустить постконф команда, чтобы выяснить, что это за переменные.

$ postconf каталог_очередей каталог_конфигураций каталог_демонов каталог_метакаталог_shlib каталог_данных
каталог_очереди = /var/spool/postfix
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
мета_каталог = /etc/postfix
shlib_directory = /usr/lib64/postfix
data_directory = /var/lib/postfix

Казалось бы, это предполагает, что если вы сохраните фактические базы данных sqlite вне из этих каталогов, postfix-script не будет знать, чтобы проверить их.

Таким образом, вы можете просто создать что-то новое, совместно используемое веб-сервером и почтовым сервером, например: /срв/maildb/ настройте права собственности в соответствии с вашими предпочтениями и обойдите это так.

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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.