1*24ed44aaSYuxian Mao.. SPDX-License-Identifier: GPL-2.0 2*24ed44aaSYuxian Mao.. Copyright ? 2017-2020 Micka?l Salaün <mic@digikod.net> 3*24ed44aaSYuxian Mao.. Copyright ? 2019-2020 ANSSI 4*24ed44aaSYuxian Mao.. include:: ../disclaimer-zh_CN.rst 5*24ed44aaSYuxian Mao 6*24ed44aaSYuxian Mao:Original: Documentation/security/landlock.rst 7*24ed44aaSYuxian Mao 8*24ed44aaSYuxian Mao:翻译: 9*24ed44aaSYuxian Mao 10*24ed44aaSYuxian Mao 毛玉贤 Yuxian Mao <maoyuxian@cqsoftware.com.cn> 11*24ed44aaSYuxian Mao 12*24ed44aaSYuxian Mao====================== 13*24ed44aaSYuxian MaoLandlock LSM: 内核文档 14*24ed44aaSYuxian Mao====================== 15*24ed44aaSYuxian Mao 16*24ed44aaSYuxian Mao:作者: Mickaël Salaün 17*24ed44aaSYuxian Mao:日期: 2022年12月 18*24ed44aaSYuxian Mao 19*24ed44aaSYuxian MaoLandlock的目标是创建有范围的访问控制(即沙箱机制)。为了增强整个 20*24ed44aaSYuxian Mao系统的安全性,此功能应适用于任何进程,包括非特权进程。因为这些进 21*24ed44aaSYuxian Mao程可能被攻击或植入后门(即不可信任的),所以从内核和其他进程的角 22*24ed44aaSYuxian Mao度来看,Landlock的功能必须安全可用。因此,Landlock 的接口设计应当 23*24ed44aaSYuxian Mao尽量减少可能的攻击点。 24*24ed44aaSYuxian Mao 25*24ed44aaSYuxian MaoLandlock 旨在为非特权进程使用,同时遵循由其他访问控制机制(例如 DAC、LSM) 26*24ed44aaSYuxian Mao强制执行的系统安全策略。Landlock 规则不应与系统上强制执行的其他访问 27*24ed44aaSYuxian Mao控制相冲突,而只能添加额外的限制。 28*24ed44aaSYuxian Mao 29*24ed44aaSYuxian Mao任何用户都可以在其进程上强制执行Landlock规则集。这些规则集会以一种 30*24ed44aaSYuxian Mao确保只能添加更多约束的方式与继承的规则集合并和评估。 31*24ed44aaSYuxian Mao 32*24ed44aaSYuxian Mao 33*24ed44aaSYuxian Mao用户空间文档如下: 34*24ed44aaSYuxian MaoDocumentation/userspace-api/landlock.rst. 35*24ed44aaSYuxian Mao 36*24ed44aaSYuxian Mao安全访问控制机制指导原则 37*24ed44aaSYuxian Mao======================== 38*24ed44aaSYuxian Mao 39*24ed44aaSYuxian Mao* Landlock规则应侧重于对内核对象的访问控制,而非系统调用过滤(即 40*24ed44aaSYuxian Mao 系统调用参数),后者是seccomp-bpf要侧重的。 41*24ed44aaSYuxian Mao* 为了避免多种侧信道攻击(例如安全策略泄露、基于CPU的攻击),Landlock 42*24ed44aaSYuxian Mao 规则不应与用户空间进行程序化通信。 43*24ed44aaSYuxian Mao* 内核访问检查不应降低未沙盒化进程的访问请求速度。 44*24ed44aaSYuxian Mao* 与 Landlock 操作相关的计算(例如强制执行规则集)应仅影响请求这些 45*24ed44aaSYuxian Mao 操作的进程。 46*24ed44aaSYuxian Mao* 由沙盒化进程直接从内核中获得的资源(例如文件描述符)在被任何进程 47*24ed44aaSYuxian Mao 使用时,都应保留其获取时的作用域访问权限。 48*24ed44aaSYuxian Mao Cf. `文件描述符访问权限`_. 49*24ed44aaSYuxian Mao 50*24ed44aaSYuxian Mao设计选择 51*24ed44aaSYuxian Mao======== 52*24ed44aaSYuxian Mao 53*24ed44aaSYuxian Maoinode访问权限 54*24ed44aaSYuxian Mao------------- 55*24ed44aaSYuxian Mao 56*24ed44aaSYuxian Mao所有访问权限都与inode以及通过inode所访问到的内容相关。读取目录的 57*24ed44aaSYuxian Mao内容并不意味着有权读取该目录中列出的 inode 所对应文件的内容。实际 58*24ed44aaSYuxian Mao上,文件名是相对于其父目录而言的 ,一个 inode 可以通过多个文件名 59*24ed44aaSYuxian Mao(通过硬链接)来引用。删除文件链接这一操作仅直接影响对应目录,而 60*24ed44aaSYuxian Mao对被移除链接的inode并无影响。这就是“LANDLOCK_ACCESS_FS_REMOVE_FILE” 61*24ed44aaSYuxian Mao(文件系统移除文件访问权限)或“LANDLOCK_ACCESS_FS_REFER” (文件系 62*24ed44aaSYuxian Mao统引用访问权限)不能与文件绑定,而只能与目录绑定的原因。 63*24ed44aaSYuxian Mao 64*24ed44aaSYuxian Mao文件描述符访问权限 65*24ed44aaSYuxian Mao------------------ 66*24ed44aaSYuxian Mao 67*24ed44aaSYuxian Mao在打开文件时,会检查访问权限并将其与文件描述符绑定。其基本原则是, 68*24ed44aaSYuxian Mao当在相同的 Landlock 域下执行时,等效的操作序列会产生相同的结果。 69*24ed44aaSYuxian Mao以LANDLOCK_ACCESS_FS_TRUNCATE权限为例,如果相关的文件层次结构没有 70*24ed44aaSYuxian Mao授予该访问权限,那么可能允许打开一个文件进行写操作,但不允许使用 71*24ed44aaSYuxian Maoftruncate调用截断由此产生的文件描述符。 72*24ed44aaSYuxian Mao以下操作序列具有相同的语义,因此会产生相同的结果: 73*24ed44aaSYuxian Mao 74*24ed44aaSYuxian Mao* ``truncate(path);`` 75*24ed44aaSYuxian Mao* ``int fd = open(path, O_WRONLY); ftruncate(fd); close(fd);`` 76*24ed44aaSYuxian Mao 77*24ed44aaSYuxian Mao与文件访问模式类似(例如O_RDWR),即使文件描述符在进程之间传递 78*24ed44aaSYuxian Mao(例如通过Unix域套接字),文件描述符中的Landlock访问权限也会被保留。 79*24ed44aaSYuxian Mao这些访问权限即使在接收进程未被 Landlock 沙盒化的情况下也会被强制执行。 80*24ed44aaSYuxian Mao事实上,这是为了保持整个系统访问控制的一致性,避免通过文件描述符传递 81*24ed44aaSYuxian Mao而无意中绕过安全限制(即“混淆代理攻击”)。 82*24ed44aaSYuxian Mao 83*24ed44aaSYuxian Mao测试 84*24ed44aaSYuxian Mao==== 85*24ed44aaSYuxian Mao 86*24ed44aaSYuxian Mao用户空间的向后兼容性测试、ptrace 限制测试和文件系统支持测试可以在这里 87*24ed44aaSYuxian Mao找到:tools/testing/selftests/landlock/ 88*24ed44aaSYuxian Mao 89*24ed44aaSYuxian Mao内核结构 90*24ed44aaSYuxian Mao======== 91*24ed44aaSYuxian Mao 92*24ed44aaSYuxian Mao对象 93*24ed44aaSYuxian Mao---- 94*24ed44aaSYuxian Mao 95*24ed44aaSYuxian Mao该API在以下内核代码中: 96*24ed44aaSYuxian Mao 97*24ed44aaSYuxian Maosecurity/landlock/object.h 98*24ed44aaSYuxian Mao 99*24ed44aaSYuxian Mao文件系统 100*24ed44aaSYuxian Mao-------- 101*24ed44aaSYuxian Mao 102*24ed44aaSYuxian Mao该API在以下内核代码中: 103*24ed44aaSYuxian Mao 104*24ed44aaSYuxian Maosecurity/landlock/fs.h 105*24ed44aaSYuxian Mao 106*24ed44aaSYuxian Mao规则集和域 107*24ed44aaSYuxian Mao---------- 108*24ed44aaSYuxian Mao 109*24ed44aaSYuxian Mao域是与一组主体(即任务凭证)关联的只读规则集。每次在任务上执行规则集时, 110*24ed44aaSYuxian Mao都会复制当前域,并在新域中导入规则集作为新的规则层。 事实上,一旦进入 111*24ed44aaSYuxian Mao一个域,每条规则都与一个层级绑定。要授予对对象的访问权限,每一层中至少 112*24ed44aaSYuxian Mao有一条规则必须允许对该对象执行请求操作。然后,任务只能过渡到一个新的域, 113*24ed44aaSYuxian Mao该新域是当前域的约束和任务提供的规则集的约束的交集。任务自行沙盒化时, 114*24ed44aaSYuxian Mao主体的定义是隐式的,这使得推理变得更加简单,并有助于避免陷阱。 115*24ed44aaSYuxian Mao 116*24ed44aaSYuxian Mao该API在以下内核代码中: 117*24ed44aaSYuxian Mao 118*24ed44aaSYuxian Maosecurity/landlock/ruleset.h 119*24ed44aaSYuxian Mao 120*24ed44aaSYuxian Mao.. Links 121*24ed44aaSYuxian Mao.. _tools/testing/selftests/landlock/: 122*24ed44aaSYuxian Mao 123*24ed44aaSYuxian Maohttps://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/tools/testing/selftests/landlock/ 124