我在 Debian 10(无 SELinux)上使用 Dovecot 2.3.4.1 和 EncFS(encfs 版本 1.9.5)加密邮箱
基本设置是:
EncFS 安装有
encfs --public /var/encrypted-mail /var/decrypted-mail -o nonempty --verbose
邮箱设置:
/var/decrypted-mail/domain.com/[email protected]/[cur,new...]
drwx------ 8 mail mail 4096 Dec 29 2019 /var/decrypted-mail
(这些权限是递归的)
所有 dovecot 进程都以mail
用户身份运行:
mail 5194 0.0 0.0 6308 4312 ? S 14:52 0:00 dovecot/imap
尽管一切似乎都配置正确,但我无法创建新文件夹或重命名现有文件夹。
我在以下内容中收到此错误/var/log/dovecot.log
:
Jan 24 14:59:04 imap([email protected])<6010><Us21sxWS5OZaC6Ex>: Error: Couldn't create mailbox list lock /var/decrypted-mail/domain.com/[email protected]/mailboxes.lock: file_create_locked(/var/decrypted-mail/domain.com/[email protected]/mailboxes.lock) failed: link(/var/decrypted-mail/domain.com/[email protected]/mailboxes.lockba53af3795974a32, /var/decrypted-mail/domain.com/[email protected]/mailboxes.lock) failed: Operation not permitted
该错误消息的源代码位于此处:https ://github.com/dovecot/core/blob/4d09884528e592a0fa5d38bf479b3ddab1a4a0ef/src/lib/file-create-locked.c#L109-L123
如果我没看错,它就不能使用“常规锁定”机制并尝试将临时文件符号链接到mailboxes.lock
. 这表明它可以创建临时文件mailboxes.lockba53af3795974a32
并且无法对其进行符号链接。
当我在 shell 中运行这个命令时:
sudo -u mail bash -c 'touch mailboxes.lockba53af3795974a32 && ln -s mailboxes.lockba53af3795974a32 mailboxes.lock'
它工作正常,我没有错误。
鸽舍的行为怎么可能与普通贝壳如此不同?
我唯一的解释是时间问题(之前访问过临时文件,但是为什么这没有出现在 bash 复制中?)。
我也尝试过chmod -R g+rwx /var/decrypted-mail
,以确保所有这些 gid 都不是问题,但这只是寻找修复的绝望尝试。
encfs
事实证明,在某些情况下,这是已知的限制。如果启用
External IV Chaining
硬链接则禁用。来源:encfs(1) 手册页。
事实证明,我误读了
link
. 它清楚地表明它默认创建一个新的 *硬链接。我用我发布的代码片段创建了一个软链接:sudo -u mail bash -c 'touch mailboxes.lockba53af3795974a32 && ln -s mailboxes.lockba53af3795974a32 mailboxes.lock'
如果我跑了:
sudo -u mail bash -c 'touch mailboxes.lockba53af3795974a32 && ln mailboxes.lockba53af3795974a32 mailboxes.lock'
相反,我会得到与代码完全相同的错误消息
dovecot
:ln: failed to create hard link 'mailboxes.lock' => 'mailboxes.lockba53af3795974a32': Operation not permitted
额外知识
在此过程中我发现了一个巧妙的技巧,您可以
fuse
使用-f -d
.实现喜欢
encfs
或cryfs
允许您将这些选项解析为fuse
:encfs enc dec -- -f -d
Fuse 将在前台运行,然后向您显示挂载文件系统中发生的一切。:)