我知道 chroot 允许隔离 Postfix,因此如果攻击者授予对 Postfix 程序之一的访问权限,他就无法恶意更改 chroot 目录之外的内容。
在 chroot 监狱中运行 Postfix 似乎是一种常见的做法。例如,Debian 默认将 Postfix 安装在 chroot 中。
我对此有几个疑问:
- 当外部只有 25 和 587 端口可用时,攻击者如何授予对文件系统的访问权限?怎么可能通过SMTP协议呢?它有漏洞吗?
- 为什么强烈建议将 Postfix 安装在 chroot 中,但发布 POP3/IMAP 端口并将电子邮件存储在文件系统中的 Dovecot 则不然?
ProtectSystem
在 Postfix 的 systemd 单元中使用与 chroot 监狱一样安全吗?
协议通常不会,但某些实现可能会;具体来说,Sendmail SMTP 套件1(曾经一度是主要的 Unix SMTP 实现)存在一些安全漏洞,其中一些是非常著名的例子。
事实上,我认为 Postfix 的大部分设计——chroot 的使用和任务之间强分离的多进程架构——都是直接响应 Sendmail 过去存在的安全问题。(Sendmail 曾经以 root 身份运行!)
1不要与 /usr/lib 中的“sendmail”程序混淆,当时它确实是 Sendmail,但您系统上的程序仍然是 Postfix,只是沿用了原始 Sendmail 的界面。
Dovecot确实使用chroot。它的体系结构(实际上以及 Postfix 的体系结构)允许以更细粒度的方式完成,例如,高度公开的“登录”进程可以自动执行此操作,因此执行相同操作变得不那么重要服务范围。但 POP/IMAP 也使其比 SMTP 更复杂,因为它需要访问存储在用户主目录(这是传统布局)中的邮箱,因此单个 chroot 不适用于此类设置。
事实上,建议运行所有内容在监狱里))至少在互联网上收听的所有内容。另一方面,“100%安全的系统是100%无用的”))安全始终是一种权衡。我认为 Postfix 协议 (SMTP) 并不比 POP 或 IMAP 更安全,只是较少有安全考虑的公司将 POP/IMAP 端口暴露在公司网络之外,而 SMTP 的暴露情况则更为常见。对暴露端口的众所周知的利用是“代码注入” - 提交带有一段文本的有效负载,该文本可能以某种方式被侦听程序解释为可执行代码。此类漏洞究竟是如何构建和提交的,远远超出了本次讨论的范围。))我个人的观点是,SMTP 的另一种实现 - sendmail - 具有比 postfix 更具安全意识的代码,这可能是宗教性的))
通过未知的漏洞。这不应该是不可能的,但是糟糕的事情发生了,鬼祟的后门库甚至被包含到最重要的工具中,人们犯了编程错误,等等。Postfix 经常因其非常干净的代码风格而受到称赞,但它使用的其他软件库并不那么好。
从技术上讲,你无法完全 chroot 安装它。Postfix 由许多相互依赖的服务组成,其中一些确实受益于 chroot,另一些则无法在 chroot 中运行。例如,proxymap服务专门设计用于为其他 chroot 服务提供对 chroot 之外的项目的受控访问,因此它本身不得被 chroot。Postfix 服务是否在 chroot 中运行是通过文件中的相应标志
master.cf
(第 5 列中的标志)设置的。Dovecot 的作者可能认为它不需要这样的保护。Postfix 在其自己的进程的监督下运行
master
,使用master.cf
. 它不被设计为以任何其他方式运行,包括 systemd 的 ProtectSystem Jail。Postfix 的主要开发人员支持是通过其“用户”邮件列表提供的;如果你在这样的监狱里运行,他们不会支持你。