TOMOYO Linux

来自 ArchWiki
(重定向自 TOMOYO

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 将以“禁用”配置文件启动(请参阅下面的配置文件表)。您可能希望立即为所有人启用学习模式。只需在 /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”。您可以根据需要抑制或初始化域转换。

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

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

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

参见