Landlock:普通程序也能给自己加一道 Linux 沙箱吗?
TL;DR
Landlock 允许 Linux 程序在已有权限基础上进一步收紧自身访问范围。本文用门禁比喻说明它如何建立可叠加的沙箱规则,也解释已打开文件描述符、内核支持和配置时机带来的安全边界。
Landlock 允许 Linux 程序在已有权限基础上进一步收紧自身访问范围。本文用门禁比喻说明它如何建立可叠加的沙箱规则,也解释已打开文件描述符、内核支持和配置时机带来的安全边界。

给程序加沙箱,听上去像是管理员给它围一圈墙。但 Linux 上还有一种更有意思的思路:程序可以主动给自己加限制,让后续代码只能访问明确允许的资源。Landlock 就是 Linux 安全模块中的一种机制,重点是让普通用户运行的程序也能逐步收紧自身权限。
通常情况下,进程继承用户身份、文件权限和系统安全策略。如果一个桌面应用只需要读写自己的工作目录,却因为账户权限而能访问更多文件,攻击者一旦利用了应用漏洞,影响范围就可能扩大。Landlock 允许程序在运行早期声明一套规则,例如限制它之后可以访问哪些文件系统路径,或按支持的规则限制网络相关操作。规则一旦生效,会叠加在进程原有权限上,而不是替代传统权限或系统管理员配置。
“叠加”是理解 Landlock 的核心。进程不能借它凭空获得新权限,只能收窄可做的事情;多层规则可以继续增加限制。就像一个人原本有钥匙能进入多栋楼,Landlock 让他为自己再加一道门禁,而不能因此拿到新的钥匙。对于大型软件,这种自我约束可以分阶段启用:先完成初始化,再在处理不可信输入前进入更受限的环境。
这种能力对浏览器、文档查看器、构建工具和处理外部文件的应用很有吸引力。假设某个图片解码库发现了恶意文件,它所在的受限进程就不应因此轻易扫描用户整个家目录。不过,沙箱能挡住什么取决于规则覆盖面、内核支持和应用是否正确设置;Landlock 不是自动识别恶意行为的检测器。
还有一些容易忽略的边界:已经打开的文件描述符、进程继承关系、具体内核版本支持的规则类型,都会影响最终限制效果。程序若在启用规则前就打开了敏感文件,之后再加一道路径规则未必能撤销已经拿到的访问能力。因此,安全设计应尽早收紧权限,并针对实际系统验证行为,而不能只看代码里调用了 Landlock。
Landlock 的价值在于把一部分隔离能力交给应用开发者,让软件即使以普通用户身份运行,也能“只拿完成任务所需的最少权限”。它适合做纵深防御的一层;要构建可靠沙箱,还应结合进程隔离、文件权限、容器策略以及系统更新。



