如何安全地阻止 postfix 對 sqlite 數據庫的組權限挑剔?
背景
我使用 sqlite 設置了一個範例 postfix 伺服器來儲存別名和郵箱詳細資訊,(這樣它們就可以實時更新,並擁有一個單一的事實來源作為數據庫。)
為了安全起見,我在可能的情況下執行 chroot 的 postfix 部分,因此數據庫(mail.sqlite)位於 /var/lib/postfix/ 中(一切正常。)
所需功能
我編寫了一個 Web 前端來讓使用者添加新的電子郵件地址。Web 前端作為 www-data 執行。
我將 www-data 添加到 postfix 組,以便
chmod g+rw /var/lib/postfix/mail.sqlite /var/lib/postfix/
使 Web 前端能夠更新數據庫。電子郵件進進出出。Web 前端可以創建遠端更新刪除別名。我重新啟動 postfix 並檢查日誌:
postfix/postfix-script[26524]: warning: group or other writable: /var/lib/postfix/. postfix/postfix-script[26525]: warning: group or other writable: /var/lib/postfix/./mail.sqlite
如果我
chmod g-w /var/lib/postfix/mail.sqlite
讓 postfix 很高興,但我的 Web 前端無法添加新的別名。我可以有一個 cron 腳本來用權威的 /var/www/admin/app/mail.sqlite 替換 /var/lib/postfix/mail.sqlite,但這聞起來像競爭條件,或者至少是不雅的。
(我想知道為什麼配置為時,postfix 將數據庫稱為“/var/lib/postfix/./mail.sqlite”
dbpath = /var/lib/postfix/mail.sqlite
?)問題
如何讓我的 cgi Web 前端寫入訪問 postfix 的數據庫,而不將其作為postfix執行並保持 postfix 滿意?(我認為我必須在添加 SELinux 策略之前解決這個問題。)
編輯:
我有 main.cf
virtual_mailbox_maps = sqlite:/etc/postfix/sqlite_mailbox.cf virtual_alias_maps = sqlite:/etc/postfix/sqlite_alias.cf virtual_mailbox_domains = sqlite:/etc/postfix/sqlite_domains.cf
並嘗試過proxymap:
virtual_mailbox_maps = proxy:sqlite:/etc/postfix/sqlite_mailbox.cf virtual_alias_maps = proxy:sqlite:/etc/postfix/sqlite_alias.cf virtual_mailbox_domains = proxy:sqlite:/etc/postfix/sqlite_domains.cf
兩者似乎同樣適用於電子郵件處理,但在重新啟動後綴後,兩者仍然記錄:
postfix/postfix-script[957]: warning: group or other writable: /var/lib/postfix/. postfix/postfix-script[958]: warning: group or other writable: /var/lib/postfix/./mail.sqlite
這個錯誤的來源是此時的腳本“postfix-script”:
find $queue_directory/. $queue_directory/pid \ -prune \( -perm -020 -o -perm -002 \) \ -exec $WARN group or other writable: {} \; .. find $todo \( -perm -020 -o -perm -002 \) \ -exec $WARN group or other writable: {} \; .. find $data_directory/. \( -perm -020 -o -perm -002 \) \ -exec $WARN group or other writable: {} \; ..
$todo
實際上是config_directory
,shlib_directory
,daemon_directory
和meta_directory
作為一個列表。您可以執行該
postconf
命令來確定這些變數是什麼。$ postconf queue_directory config_directory daemon_directory meta_directory shlib_directory data_directory queue_directory = /var/spool/postfix config_directory = /etc/postfix daemon_directory = /usr/libexec/postfix meta_directory = /etc/postfix shlib_directory = /usr/lib64/postfix data_directory = /var/lib/postfix
這似乎表明,如果您將實際的 sqlite 數據庫保留在這些目錄之外,postfix-script 將不知道檢查它們。
因此,您可以創建由 Web 伺服器和郵件伺服器共享的新內容,例如 -
/srv/maildb/
根據您的偏好設置所有權並像這樣繞過它。哦,我要指出您可能想要更改您的 chroot 環境以支持載入數據。您可能會使用硬連結,但感覺就像是 hack。