TOMOYO Linux - Arch Linux 中文维基

跳至內容

# TOMOYO Linux

出自 Arch Linux 中文维基

相關文章

- 安全
- AppArmor
- SELinux

翻譯狀態：

- 本文（或部分內容）譯自 TOMOYO Linux，最近一次同步於 2026-06-14，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

TOMOYO Linux是針對 Linux 的一種強制訪問控制（Mandatory Access Control, MAC）實現。該項目於 2003 年 3 月啟動，並由NTT Data公司資助。TOMOYO Linux 專注於系統行為，允許每個進程聲明實現其目的所需的行為和資源。它既能作為系統分析工具使用，也能作為訪問限制工具使用。

TOMOYO Linux 的安全目標是提供「既能覆蓋絕大多數用戶的實際使用需求，又能保持讓絕大多數管理員易於使用的強制訪問控制(MAC)」。TOMOYO Linux 不僅是面向安全專業人員的工具，也同樣適用於普通用戶和系統管理員。

有關強制訪問控制概念，參見：zhwp:強制訪問控制

注意：本條目僅作上游用戶文檔補充說明。有關更多信息，參見上游用戶文檔
提示：TOMOYO Linux 2.x最終將在功能特性上接近 1.x 分支，但對於追求快速上手的用戶而言，2.x 分支更易於安裝。TOMOYO Linux 1.x 分支適用於對安全性要求極高的場景，而 AKARI 則介於兩者之間。

## 簡介

TOMOYO Linux 試圖構建一個讓所有配置都以易於理解的方式預先安排妥當的系統：

- 提前獲取在內核生命周期內至少會發生一次的所有訪問請求。
- 允許管理員編寫僅放行預期內且合規的訪問請求策略。

與AppArmor不同，TOMOYO Linux 旨在保護整個系統免受攻擊者利用應用程式漏洞帶來的威脅。TOMOYO Linux 應對該威脅的方式是：先在測試環境中記錄所有應用的行為，隨後在生產環境中強制所有應用只能在這些已記錄的範圍內運行。

TOMOYO Linux 並不適用於希望直接使用他人提供的現成策略文件的用戶。它需要從零開始構建策略，並通過「學習模式(learning mode)」提供輔助，該模式可以針對特定系統自動生成具備必要且充分權限的策略文件。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 主線內核(Mainline Kernel)的開發分支。2009 年 6 月，TOMOYO 被合併至 Linux 2.6.30 內核版本中，並使用標準的 Linux 安全模塊(LSM)鉤子(Hooks)。然而，若要將 TOMOYO Linux 的完整 MAC 功能移植到 Linux 內核中，則必須進一步擴展 LSM 鉤子。因此，該分支尚未提供與 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，以獲取該項目所能提供的完整功能。然而，由於必須使用ccs-patch對內核進行補丁處理並隨後重新編譯，因此在實施該分支時需要克服多重困難。

必須同時安裝打過補丁的內核以及用戶空間工具。AUR 中提供了ccs-toolsAUR軟體包。

### 初始化配置

首先必須初始化策略：

    # /usr/lib/ccs/init_policy

策略文件會保存在`/etc/css/`目錄中，可以通過運行以下命令進行編輯：

    # ccs-editpolicy

## AKARI

### AKARI 的局限性

在純粹將 TOMOYO Linux 項目用於系統分析的前提下。AKARI 是實現該目標最簡便的方法。而在將其用於系統限制的前提下，這是以最小的工作量獲取 TOMOYO Linux 1.x 分支絕大部分功能的方法。然而，有下述局限性：

- 其取決於發行版提供的內核版本與具體配置：

    CONFIG_SECURITY=y [必需]
    CONFIG_KALLSYMS=y [必需]
    CONFIG_PROC_FS=y [必需]
    CONFIG_MODULES=y [必需]
    CONFIG_SECURITY_PATH=y [可选：用于支持绝对路径名]
    CONFIG_SECURITY_NETWORK=y [可选：用于提供网络限制]

- 由於缺少所需的 LSM 鉤子，部分高級網絡操作的限制功能會受制約或無法使用。
- 無法限制內核功能(capabilities)的使用。
- 為了保持內核二進制接口(KABI)不發生改變，每個任務的變量(pre-task variables)被管理在struct task_struct之外，這導致其查找速度較慢。不過，由於基於路徑名的權限檢查所帶來的性能下降占主導地位，因此對於典型的最終用戶而言，此項性能損耗應該並不明顯。

該表格提供了 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"

安裝用戶空間工具包的 2.6 分支軟體包tomoyo-toolsAUR。

### 激活

若要激活 TOMOYO Linux，請設置以下內核參數以啟用該 Linux 安全模塊(LSM)：

    lsm=landlock,lockdown,yama,integrity,tomoyo,bpf

注意：`lsm=`內核參數用於設置 Linux 安全模塊的初始化順序。內核配置的`lsm=`可以通過`zgrep CONFIG_LSM=/proc/config.gz`確定，當前生效的值可通過`cat /sys/kernel/security/lsm`查看。

- 確保`tomoyo`放在列表第一個「主要(major)」模塊的位置[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工具，在Domain transition editor（域遷移編輯器）中對任何選定的域（或多個域）按下`S`鍵來切換配置集。

完成上述配置後，需要重啟計算機。

### 日誌守護進程

TOMOYO 擁有專屬的日誌守護進程`tomoyo-auditd`。它對於監控閉源應用程式的行為非常實用。初始化配置文件中包含詳實的注釋說明，位於`/etc/tomoyo/tools/auditd.cconf`，而日誌文件則存放在`/var/log/tomoyo`目錄中

若需配合 Systemd 使用該進程，請按照官方文檔第 4.6 章所述內容創建`/etc/systemd/system/tomoyo-auditd.service`文件。

## 使用

為能夠高效使用 TOMOYO Linux 或 AKARI，必需查閱相關文檔：

- TOMOYO Linux 文檔
- AKARI 文檔

運行策略編輯器以開始編輯。在運行 TOMOYO Linux 1.x 或 AKARI 的前提下，應使用ccs-tools：

    # ccs-editpolicy

如果使用 TOMOYO Linux 2.x，則應使用：

    # tomoyo-editpolicy

隨著系統的運行，TOMOYO Linux 將創建域(domains)並將其添加到樹狀結構中。TOMOYO Linux 中的訪問分析/限制是通過域來實現的。每個進程都屬於一個唯一的域，並且每當進程執行一個程序時，就會遷移到一個不同的域。域的名稱是表示進程執行歷史的級聯字符串表達式。例如，內核所屬的域為`<kernel>`；由內核調用的`/sbin/init`所屬的域名為`<kernel> /sbin/init`；如果`/sbin/init`調用了`/etc/rc.d/rc`，則其所屬的域名為`<kernel> /sbin/init /etc/rc.d/rc`。可以根據需要抑制或初始化域遷移。

可以為每個域分配配置集(profiles)。共有四種默認配置集：

Disabled（已禁用） | 效果與普通內核相同。
Learning（學習） | 即使訪問請求違反了策略，也不予拒絕，而是將該請求追加到策略中。
Permissive（寬容） | 即使訪問請求違反了策略，也不予拒絕，且不將該請求追加到策略中。
Enforcing（強制） | 若請求違反策略，予以拒絕，不將該請求追加到策略中。

學習(learning)配置集可用於分析系統或有特定需求的應用程式。一旦確定了某個域的所有預期訪問請求，即可在切換到強制(enforcing)配置集之前，根據需要編輯該域的策略。此操作可以從系統啟動開始，針對任何及所有域進行設置。

## 參見

- Wikipedia:Tomoyo Linux
- TOMOYO Linux 主頁
- TOMOYO Linux 維基
- AKARI 主頁
- AKARI 文檔
- AKARI/TOMOYO 功能對比表
- TOMOYO Linux 1.8.x : 官方指南
- TOMOYO Linux 2.6.x : 官方指南
- TOMOYO Linux 安全目標
- 規則示例
- Embedded Linux Wiki上的 TOMOYO Linux 條目
- 來自 PacSec 2007 的演示文稿幻燈片

分類：​

- 訪問控制
- 內核
- TOMOYO Linux

TOMOYO Linux
新增話題