Dovecot

如何在 dovecot 中共享文件夾?

  • February 27, 2019

我是從快遞搬過來的。到目前為止,遷移執行良好,我可以使用圓形立方體訪問我的郵件目錄,配額和篩子過濾器功能齊全。現在我需要啟用 maildir 共享並且無法弄清楚如何正確配置 dovecot,因為我的設置有點不同。

首先是設置

虛擬使用者。郵件目錄位於 /var/vmail/domain.tld/username/ 中。沒有Maildir子目錄,Maildir直接放在home目錄下。所以我們有:home = maildir。在配置中它被翻譯為:

userdb {
args = uid=vmail gid=vmail home=/var/vmail/%d/%n/
driver = static
}
mail_location = Maildir:~/

a.chaouche 的 Maildir 如下所示:

root@messagerie[10.10.10.20] /var/vmail/domain.tld/a.chaouche # lsa
total 1.9M
drwx------ 26 vmail vmail 4.0K May  8 11:33 .
drwxr-xr-x  5 vmail vmail 4.0K Apr  7 14:31 ..
drwx------  6 vmail vmail 4.0K Apr 27 10:09 .Coupures Streaming
drwx------  6 vmail vmail 4.0K Apr 27 10:09 .Coupures Streaming.JILFM_ZIK_WR
drwxr-xr-x  2 vmail vmail 4.0K Jun 15  2015 courierimaphieracl
drwx------  2 vmail vmail 4.0K Mar 24 16:05 courierimapkeywords
-rw-r--r--  1 vmail vmail  342 Apr 25 17:43 courierimapsubscribed
-rw-r--r--  1 vmail vmail 460K Apr 25 17:47 courierimapuiddb
drwx------  2 vmail vmail 728K Apr 27 18:24 cur
-rw-------  1 vmail vmail    0 May  8 11:33 dovecot-acl-list
-rw-------  1 vmail vmail  73K Apr 27 14:57 dovecot.index
-rw-------  1 vmail vmail  32K May  8 10:52 dovecot.index.cache
-rw-------  1 vmail vmail 8.5K May  4 10:21 dovecot.index.log
-rw-------  1 vmail vmail   31 Apr 27 15:12 dovecot-keywords
-rw-------  1 vmail vmail   96 Apr 27 10:06 dovecot.mailbox.log
lrwxrwxrwx  1 vmail vmail   21 Apr 27 16:19 .dovecot.sieve -> sieve/roundcube.sieve
-rw-------  1 vmail vmail  197 Apr 27 18:23 .dovecot.svbin
-rw-------  1 vmail vmail 466K Apr 27 18:24 dovecot-uidlist
drwx------  6 vmail vmail 4.0K Apr 27 10:10 .Drafts
drwx------  6 vmail vmail 4.0K Apr 27 10:09 .Flux audio
-rw-rw----  1 vmail vmail  136 Mar 27 14:32 ispconfig_mailsize
drwx------  6 vmail vmail 4.0K Apr 27 10:09 .Je dois repondre
drwx------  6 vmail vmail 4.0K Apr 27 15:17 .Junk
-rw-------  1 vmail vmail   27 May  5 14:16 maildirsize
drwx------  2 vmail vmail 4.0K Apr 27 18:24 new
drwx------  6 vmail vmail 4.0K Apr 27 10:09 .notifs
drwx------  6 vmail vmail 4.0K Apr 27 10:09 .notifs.Imrpimantes
drwx------  6 vmail vmail 4.0K Apr 27 10:09 .notifs.Kaspersky
drwx------  6 vmail vmail 4.0K Apr 27 10:09 .notifs.Netia
drwx------  6 vmail vmail 4.0K Apr 27 10:09 .notifs.R&AOk-seau
drwx------  6 vmail vmail 4.0K Apr 27 10:09 .notifs.Streaming
drwx------  6 vmail vmail 4.0K Apr 27 10:09 .notifs.SYSTEM
drwx------  6 vmail vmail 4.0K Apr 27 10:09 .notifs.Webradios
drwx------  6 vmail vmail 4.0K Apr 27 18:24 .PRTG
drwx------  6 vmail vmail 4.0K Apr 27 15:17 .Sent
drwx------  3 vmail vmail 4.0K Apr 27 18:22 sieve
-rw-------  1 vmail vmail  234 Apr 27 10:08 subscriptions
drwx------  6 vmail vmail 4.0K Apr 27 18:24 .TEST
-rw-r--r--  1 vmail vmail    0 Apr  5 15:29 testfile
drwx------  2 vmail vmail 4.0K May  4 10:21 tmp
drwx------  6 vmail vmail 4.0K Apr 27 18:24 .Trash
root@messagerie[10.10.10.20] /var/vmail/algerian-radio.dz/a.chaouche # 

您可以看出我正在從 courier 遷移,因為除了 dovecot 的文件之外,courier 的文件還在那裡。

.notifs 是一個包含許多子文件夾的文件夾,例如 .notifs.Webradios、.notifs.Kaspersky 等。

接下來是我要訪問的文件夾

所以 a.chaouche@domain.tld 想要訪問屬於另一個虛擬使用者的 a.chaouche@backup .domain.tld 的文件夾,該文件夾位於另一個(虛擬)域中(儘管仍在同一台電腦上)

root@messagerie[10.10.10.20] /var/vmail/backup.algerian-radio.dz/a.chaouche # lsa
total 4.7M
drwx------ 15 root root  4.0K May  8 11:12 .
drwxr-xr-x  3 root root  4.0K May  5 16:16 ..
drwx------  6 root root  4.0K May  5 16:16 .Archive
drwx------  6 root root  4.0K May  5 16:16 .Archive.Coupures Streaming
drwx------  6 root root  4.0K May  5 16:16 .Archive.Flux audio
drwx------  6 root root  4.0K May  5 16:16 .Archive.notifs
drwx------  6 root root  4.0K May  5 16:16 .Archive.PRTG
-rw-r--r--  1 root root    80 May  5 16:16 courierimapacl
drwx------  2 root root  4.0K May  5 16:16 courierimapkeywords
-rw-r--r--  1 root root 1015K May  5 16:16 courierimapuiddb
drwx------  2 root root  1.6M May  5 16:17 cur
-rw-r--r--  1 root root    37 May  8 11:12 dovecot-acl
-rw-r--r--  1 root root    36 May  8 11:12 dovecot-acl~
drwx------  5 root root  4.0K May  5 16:16 .Drafts
-rw-r-----  1 root root   254 May  5 16:16 ispconfig_mailsize
drwx------  5 root root  4.0K May  5 16:16 .Junk
-rw-r-----  1 root root  1.9K May  5 16:16 maildirsize
drwx------  2 root root  2.1M May  5 16:17 new
drwx------  6 root root  4.0K May  5 16:16 .Sent
drwx------  2 root root  4.0K May  5 16:17 tmp
drwx------  5 root root  4.0K May  5 16:16 .Trash
root@messagerie[10.10.10.20] /var/vmail/backup.algerian-radio.dz/a.chaouche # 

你可以看到我在那裡放了一個dovecot-acl文件,這是它的內容:

root@messagerie[10.10.10.20] /var/vmail/backup.algerian-radio.dz/a.chaouche # cat dovecot-acl
user=a.chaouche@algerian-radio.dz lr
root@messagerie[10.10.10.20] /var/vmail/backup.algerian-radio.dz/a.chaouche # 

現在配置

這裡我為lmtp和imap啟用了acl外掛

mail_plugins = " quota acl"

protocol lmtp {
 mail_plugins = " quota acl sieve quota"
}
protocol lda {
 mail_plugins = " quota acl sieve"
}
protocol imap {
 mail_plugins = " quota acl imap_quota imap_acl"
}

這是我的使用者數據庫的配置方式

userdb {
 args = uid=vmail gid=vmail home=/var/vmail/%d/%n/
 driver = static
}

這裡我指定 acl 應該使用 vfile (dovecot-acl 文件)

plugin {
 acl = vfile
 [...]
}

在這裡我嘗試了一個名為partage的共享命名空間,我不確定我在這裡所做的是否正確

namespace partage {
 location = maildir:%%h:INDEX=~/%%u
 prefix = shared.%%u.
 separator = .
 type = shared
}

位置好嗎?索引好嗎(我不知道那是為了什麼)

最後,這裡是 mail_location 的配置方式。

mail_location = Maildir:~/

完整的配置文件

在這個貼中可以看到

錯誤

日誌中沒有錯誤,除非我沒有所需的行為。

期望的行為是:

在此處輸入圖像描述

我得到的行為是:

在此處輸入圖像描述

這是我所做的:

$ cd /var/vmail/algerian-radio.dz/a.chaouche/
$ ln -s /var/vmail/backup.algerian-radio.dz/a.chaouche/ .shared.a_chaouche@backup_algerian-radio_dz  <---- change "." to "_"

如果我不更改點,它們將顯示為 dovecot 的子文件夾分隔符(Maildir++ 規範?)

如果您這樣做,那麼 a.chaouche@algerian-radio.dz 可以使用 a.chaouche@backup.algerian-radio.dz 郵箱做任何他想做的事情。我們不想要這個。我們希望他只閱讀郵件,而不是刪除它。為此,他需要兩個權限:閱讀課程和列表,因為他需要列出電子郵件以便選擇他想要閱讀的電子郵件。如果他沒有列出權限,則 MUA 在嘗試列出收件箱中的所有消息時會出錯。

我們通過在我們想要共享的郵箱中添加一個 dovecot-acl 文件來做到這一點:

root@messagerie[10.10.10.20] /var/vmail/backup.algerian-radio.dz/a.chaouche # cat dovecot-acl
user=a.chaouche@algerian-radio.dz lr
root@messagerie[10.10.10.20] /var/vmail/backup.algerian-radio.dz/a.chaouche #

這表示使用者 a.chaouche@algerian-radio.dz 具有“l”權限(列表)和“r”權限(閱讀)。

您可以使用 acl 工具確保其設置符合預期:

root@messagerie[10.10.10.20] ~ # doveadm acl get  -u a.chaouche@algerian-radio.dz INBOX.shared.a_chaouche@backup_algerian-radio_dz
ID                                Global Rights
user=a.chaouche@algerian-radio.dz        lookup read
root@messagerie[10.10.10.20] ~ #
  1. 不需要 SQL 表
  2. 不需要字典映射
  3. 不需要 doveadm acl 命令

您可以在我的 wiki 頁面上閱讀更多內容

引用自:https://serverfault.com/questions/775492