TOMOYO Linux
TOMOYO Linux 是 Linux 的一项 强制访问控制 (MAC) 实现。它于 2003 年 3 月推出,由 NTT Data Corporation 赞助。TOMOYO Linux 侧重于系统的行为,允许每个进程声明其目的所需的行为和资源。它可以用作系统分析工具以及访问限制工具。
TOMOYO Linux 的安全目标是提供“MAC,它满足大多数用户的实际需求,并对大多数管理员保持可用性”。TOMOYO Linux 不仅是安全专业人士的工具,也是普通用户和管理员的工具。
简介
TOMOYO Linux 致力于使系统中的一切都以易于理解的方式预先安排好
- 提前了解在内核生命周期中至少发生一次的所有访问请求。
- 允许管理员编写一个策略,只允许预期的和可取的访问请求。
与 AppArmor 不同,TOMOYO Linux 旨在保护整个系统免受利用应用程序漏洞的攻击者侵害。TOMOYO Linux 通过记录测试环境中所有应用程序的行为,然后在生产环境中强制所有应用程序遵循这些记录的行为来应对此威胁。
TOMOYO Linux 不适用于那些想要现成策略文件的用户。它涉及到从头开始创建策略,并在“学习模式”的帮助下,该模式可以自动为特定系统生成必要且充分权限的策略文件。TOMOYO Linux 会报告 Linux 系统中正在发生的事情,因此可以用作系统分析工具。它类似于 strace,并报告每个程序正在执行的内容以及访问的文件/网络。
此 表格 提供了 TOMOYO Linux 与 AppArmor、SELinux 和 SMACK 的全面比较。
开发分支
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 Security Module (LSM) 钩子。但是,必须进一步扩展 LSM 钩子才能将 TOMOYO Linux 的完整 MAC 功能移植到 Linux 内核中。因此,它尚未提供与 1.x 开发分支相等的 LSM 功能。此 图表 比较了每个分支之间的差异。
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 进行修补,然后重新编译。
必须同时安装修补后的内核和用户空间工具。AUR 上提供了 ccs-toolsAUR 的软件包。
初始化配置
必须首先初始化策略
# /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 和用户空间工具。AUR 上提供了 akariAUR 的软件包以及 ccs-toolsAUR 的软件包。
要激活 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 Security Module。
lsm=landlock,lockdown,yama,integrity,tomoyo,bpf
lsm= 内核参数设置 Linux 安全模块的初始化顺序。可以通过 zgrep CONFIG_LSM= /proc/config.gz 找到内核配置的 lsm= 值,并使用 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”。您可以根据需要抑制或初始化域转换。
配置文件可以分配给每个域。有四个默认配置文件:
| 禁用 | 行为如同常规内核。 |
| 学习 | 如果访问请求违反策略,则不拒绝。将请求附加到策略。 |
| 宽容 | 如果访问请求违反策略,则不拒绝。不将请求附加到策略。 |
| 强制 | 如果访问请求违反策略,则拒绝。不将请求附加到策略。 |
学习配置文件可用于分析系统或特定应用程序。一旦确定了域的所有期望的访问请求,就可以根据需要编辑该域的策略,然后选择强制配置文件。可以从系统启动开始为任何和所有域执行此操作。