TOMOYO Linux

出自 ArchWiki

TOMOYO Linux 是 Linux 的 强制访问控制 (MAC) 实现。它于 2003 年 3 月发布,并由 NTT Data Corporation 赞助。TOMOYO Linux 专注于系统的行为,允许每个进程声明实现其目的所需的行为和资源。它可以用作系统分析工具以及访问限制工具。

TOMOYO Linux 的安全目标是提供“涵盖大多数用户的实际需求并对大多数管理员保持可用的 MAC”。TOMOYO Linux 不仅是安全专业人员的工具,也是普通用户和管理员的工具。

注意: 本文并不旨在成为详尽的指南,应作为项目提供的广泛 用户文档 的补充。
提示: TOMOYO Linux 2.x 最终将更接近于达到与 1.x 分支的功能对等,但对于那些想要轻松入门的人来说,2.x 分支易于安装。TOMOYO Linux 1.x 分支适用于那些想要最大安全性的人,而 AKARI 则介于两者之间。

简介

TOMOYO Linux 试图使系统中的一切都以易于理解的方式预先安排好

  • 使内核生命周期中至少发生一次的所有访问请求提前已知。
  • 允许管理员编写策略,该策略仅允许预期和期望的访问请求。

与 AppArmor 不同,TOMOYO Linux 旨在保护整个系统免受攻击者利用应用程序中的漏洞。TOMOYO Linux 通过记录所有应用程序在测试环境中的行为,然后强制所有应用程序在生产环境中按照这些记录的行为运行来解决此威胁。

TOMOYO Linux 不适合想要其他人提供的现成策略文件的用户。它涉及从头开始创建策略,并借助“学习模式”,该模式可以自动生成具有特定系统所需且充分权限的策略文件。TOMOYO Linux 报告 Linux 系统内部发生的事情,因此可以用作系统分析工具。它类似于 strace,并报告每个程序正在执行的操作以及正在访问的文件/网络。

表格 提供了 TOMOYO Linux 与 AppArmorSELinuxSMACK 的全面比较。

开发分支

TOMOYO Linux 1.x 是最初的开发分支。TOMOYO Linux 于 2005 年 11 月 11 日首次发布。它被实现为一个可以应用于 Linux 内核的补丁,并且仍在积极开发中。它可以与其他安全模块(如 SELinux、SMACK 和 AppArmor)共存。

TOMOYO Linux 2.x 是 Linux 主线内核的开发分支。2009 年 6 月,TOMOYO 被合并到 Linux 内核版本 2.6.30 中,它使用标准的 Linux 安全模块 (LSM) 钩子。但是,必须进一步扩展 LSM 钩子,才能将 TOMOYO Linux 的完整 MAC 功能移植到 Linux 内核中。因此,它尚未提供与 1.x 开发分支相同的功能。此 图表 比较了每个分支之间的差异。

AKARI 基于 TOMOYO Linux 1.x 分支,并被实现为可加载内核模块 (LKM)。因此,它具有不需要用户修补和重新编译内核的优势。此 表格 提供了 AKARI 与 TOMOYO Linux 1.x 和 2.x 分支的全面比较。

TOMOYO Linux 1.x

使用 ccs-patch 补丁的内核实现 TOMOYO Linux 1.x 可以提供从 TOMOYO Linux 项目获得的全部功能。但是,此分支的实现需要克服最多的障碍,因为内核必须使用 ccs-patch 进行修补,然后重新编译。

必须安装已修补的内核和用户空间工具。ccs-toolsAUR 的软件包在 AUR 上可用。

初始化配置

必须首先初始化策略

# /usr/lib/ccs/init_policy

策略文件保存在 /etc/css/ 目录中,可以通过运行以下命令进行编辑

# ccs-editpolicy

AKARI

AKARI 的局限性

如果纯粹为了系统分析而使用 TOMOYO Linux 项目,那么 AKARI 是实现此目的最简单的方法。如果为了系统限制而使用 TOMOYO Linux 项目,那么它是获得 TOMOYO Linux 1.x 分支大部分功能的最小努力方式。但是,有一些局限性必须考虑

  • 它取决于发行版提供的内核版本和配置
    CONFIG_SECURITY=y [required]
    CONFIG_KALLSYMS=y [required]
    CONFIG_PROC_FS=y [required]
    CONFIG_MODULES=y [required]
    CONFIG_SECURITY_PATH=y [optional: for using absolute pathnames]
    CONFIG_SECURITY_NETWORK=y [optional: for providing network restriction]
    
  • 由于缺少所需的 LSM 钩子,因此对一些高级网络操作的限制是有限的或不可用的。
  • 无法限制 capabilities 的使用。
  • 查找每个任务的变量速度较慢,因为它们在“struct task_struct”之外进行管理,以保持 KABI 不变。但是,对于典型的最终用户来说,这应该不会被注意到,因为基于路径名权限检查的性能下降占主导地位。

表格 提供了 AKARI 与 TOMOYO Linux 1.x 和 2.x 分支的全面比较。

安装

必须安装 AKARI 和用户空间工具。akariAUR 的软件包和 ccs-toolsAUR 的软件包在 AUR 上可用。

要激活 AKARI,请设置以下 内核参数

init=/usr/bin/ccs-init

初始化配置

必须首先初始化策略

# /usr/lib/ccs/init_policy --module_name=akari

策略文件保存在 /etc/css/ 目录中,可以通过运行以下命令进行编辑

# ccs-editpolicy

TOMOYO Linux 2.x

TOMOYO Linux 2.x 的局限性

TOMOYO Linux 2.x 在 Linux 主线内核中的实现尚未完成,但自 2.5.x 以来已非常接近 1.x。与 1.x 分支相比,仍有一些功能需要实现。此 图表 全面比较了每个开发分支之间的差异。

安装

所有 官方支持的内核 都支持 TOMOYO。

对于自定义内核,请确保设置以下内核选项

CONFIG_SECURITY=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y
CONFIG_SECURITY_PATH=y
CONFIG_SECURITY_TOMOYO=y
CONFIG_SECURITY_TOMOYO_POLICY_LOADER="/usr/bin/tomoyo-init"
CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER="/usr/lib/systemd/systemd"
CONFIG_LSM="landlock,lockdown,yama,integrity,tomoyo,bpf"

使用 tomoyo-toolsAUR 安装 2.6 分支的用户空间工具。

激活

要激活 TOMOYO Linux,请设置以下 内核参数 以启用 Linux 安全模块

lsm=landlock,lockdown,yama,integrity,tomoyo,bpf
注意: lsm= 内核参数设置 Linux 安全模块的初始化顺序。内核配置的 lsm= 值可以使用 zgrep CONFIG_LSM= /proc/config.gz 找到,当前值可以使用 cat /sys/kernel/security/lsm 找到。
  • 确保 tomoyo 是列表中的第一个“主要”模块。[1] 有效值及其顺序的示例可以在 security/Kconfig 中找到。
  • capability 应该从 lsm= 中省略,因为它将始终自动包含在内。

/usr/lib/systemd/systemd 执行时,TOMOYO 将从 /etc/tomoyo/policy/current 加载所有已保存的策略。

接下来,检查激活是否成功。您应该从 dmesg 中看到以下行(或类似行)

# dmesg | grep -A 1 -B 1 TOMOYO
[    0.003375] Security Framework initialized
[    0.003387] TOMOYO Linux initialized
[    0.003396] AppArmor: AppArmor disabled by boot time parameter
--
[    6.829798] Calling /usr/bin/tomoyo-init to load policy. Please wait.
[    6.833709] TOMOYO: 2.5.0
[    6.833712] Mandatory Access Control activated.

对于首次使用,您可能希望在计算机关机/重启时自动将内存策略保存到文件系统。如果是,请创建以下 systemd 单元

/etc/systemd/system/tomoyo-savepolicy.service
[Unit]                                                                                        
Description=Tomoyo savepolicy

[Service]
Type=oneshot
ExecStart=/bin/true
ExecStop=/usr/bin/tomoyo-savepolicy
StandardInput=tty
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

启用 tomoyo-savepolicy.service

禁用

lsm= 内核参数 中删除 tomoyo 或完全删除 lsm=

初始化配置

必须首先初始化策略

# /usr/lib/tomoyo/init_policy

策略文件保存在 /etc/tomoyo/ 目录中,可以通过运行以下命令进行编辑

# tomoyo-editpolicy

默认情况下,tomoyo 将以“Disabled”配置文件启动(请参阅下面的配置文件表)。您可能想立即为所有人启用学习模式。只需在 /etc/tomoyo/policy/current/domain_policy.conf 中切换 <kernel> 命名空间的配置文件

<kernel>
use_profile 1
use_group 0

如果不确定是否需要如此广泛的学习,请忽略此步骤。您可以使用 tomoyo-editpolicy 在“域转换编辑器”中通过按任何选定域(域)上的 S 键稍后切换配置文件。

现在,应该重启计算机。

日志守护进程

对于 tomoyo,存在日志守护进程 tomoyo-auditd。它对于监视闭源应用程序的行为很有用。初始配置文件得到了很好的解释,可以在 /etc/tomoyo/tools/auditd.conf 中找到,而日志文件可以在 /var/log/tomoyo/ 中找到。

要将其与 systemd 一起使用,请创建文件 /etc/systemd/system/tomoyo-auditd.service,其内容在官方 文档 的第 4.6 章中描述。

用法

为了有效地使用 TOMOYO Linux 或 AKARI,务必查阅相关文档

运行策略编辑器以开始编辑。如果使用 TOMOYO Linux 1.x 或 AKARI,则应使用 ccs-tools

# ccs-editpolicy

如果使用 TOMOYO Linux 2.x,则应使用 tomoyo-tools

# tomoyo-editpolicy

当系统运行时,TOMOYO Linux 将创建域并将它们添加到树中。TOMOYO Linux 中的访问分析/限制通过域应用。每个进程都属于一个域,并且每当进程执行程序时,该进程将转换到不同的域。域的名称是进程执行历史记录的连接字符串表达式。例如,内核所属域的名称是“<kernel>”;内核调用的 /sbin/init 所属域的名称是“<kernel> /sbin/init”;如果 /sbin/init 调用 /etc/rc.d/rc,则它所属的域是“<kernel> /sbin/init /etc/rc.d/rc”。您可以根据需要抑制或初始化域转换。

配置文件可以分配给每个域。有四个默认配置文件

禁用 就像常规内核一样工作。
学习 如果访问请求违反策略,则不拒绝该请求。将请求附加到策略。
允许 如果访问请求违反策略,则不拒绝该请求。不将请求附加到策略。
强制执行 如果访问请求违反策略,则拒绝该请求。不将请求附加到策略。

学习配置文件可用于分析系统或特定应用程序。一旦确定了域的所有所需访问请求,就可以根据需要编辑该域的策略,然后再选择强制执行配置文件。这可以从系统启动开始对任何和所有域执行。

参见