Hacker News 中文摘要

RSS订阅

Linux 内陆化 -- Landlock-Ing Linux

文章摘要

Landlock是Linux 5.13引入的安全API,允许应用程序动态声明可访问的资源,类似OpenBSD的unveil()机制。它通过运行时策略限制当前线程及其子进程的权限,比SELinux等传统方案更简单易用。开发者只需定义需要限制的操作类型和允许访问的对象列表,即可实现深度防御,且策略随进程退出自动失效。

文章总结

Landlock:Linux应用沙盒新选择

什么是Landlock?

Landlock是一种Linux API,允许应用程序明确声明可访问的资源。其设计理念类似于OpenBSD的unveil()pledge(),程序可以与内核达成"契约":仅访问特定文件或资源,若遭入侵则拒绝其他所有访问。相比传统Linux安全机制,Landlock更易理解与集成。

核心机制

  • 运行时策略:作为Linux 5.13引入的安全模块(LSM),Landlock采用临时性限制策略,无需文件标签或扩展属性
  • 双层策略
    1. 操作类别限制(如文件系统读写)
    2. 具体对象授权(如允许读写/tmp目录)
  • 不可逆限制:通过landlock_restrict_self()生效后,线程及其子进程将永久受限
  • 策略叠加:支持最多16层策略叠加,子层只能缩减权限不能扩增

独特优势

  • 零特权要求:任何应用都可自我沙盒化
  • 开发者友好:无需管理员介入,策略可直接嵌入代码
  • 兼容性强:支持ABI版本控制,可与其他LSM(如SELinux)叠加使用

应用场景示例

  • Web服务器限制仅访问/var/www/html
  • PDF阅读器限制仅操作已打开文件
  • 特权守护进程通过Landlock降低风险

开发现状

已支持Rust/Go/Haskell等语言绑定,正在开发的重要功能包括: - 交互式权限管理(类似Android) - 精细化套接字控制 - 多线程同步限制 - 更精确的文件系统权限控制

对比其他方案

| 方案 | 优势 | 劣势 | |-----------|---------------------|---------------------| | Docker | 服务隔离完善 | 桌面应用支持差 | | Flatpak | 图形应用支持好 | CLI工具适配困难 | | SELinux | 功能强大 | 配置复杂需管理员介入 | | Landlock | 无特权要求/易集成 | 功能仍在演进中 |

未来展望

若"监督模式"提案通过,Linux桌面有望实现类Android的权限系统,结合GUI管理界面可显著提升安全性。

(注:保留技术细节和对比表格,删减了代码示例和部分开发讨论,聚焦核心价值和应用场景)

评论总结

以下是评论内容的总结:

  1. Landlock的功能与用途

    • 主要面向开发者,通过代码限制程序的文件读写权限
    • "LandLock is a Minor LSM intended for software developers"
    • "Interesting they added new syscalls...because of the no privilege principle"
  2. 技术实现疑问

    • 采用新系统调用而非传统/sys配置引发讨论
    • "Can sysadmins disable access via seccomp?"
    • "Since when is not a C API the first...interface for Linux kernel stuff?"
  3. 容器集成问题

    • 容器运行时可能滞后于内核支持
    • "CRIs trying to define their own custom Landlock interface"
    • "I don't foresee many...maintaining a Landlock sandbox policy"
  4. 实际应用案例

    • Nomad的exec2驱动展示实用场景
    • "check out Nomad's exec2 task driver"
    • "Pretty useful...without having to containerise"
  5. 安全性质疑

    • 对运行时自限制的有效性提出疑问
    • "what's the point of an application restricting itself?"
    • "if compromised, wouldn't it simply un-restrict itself?"
  6. 开发者体验

    • 缺乏官方C库引发困惑
    • "A official c library doesn’t exist yet unfortunately"
    • 提供Go语言示例代码展示具体实现方式

(注:所有评论均无评分数据,故未体现认可度差异)