Skip to content

Commit af81561

Browse files
jeffpeng3backslashxx
authored andcommitted
website: Updated translations (tiann#1959)
更新翻譯
1 parent 4ad42bf commit af81561

13 files changed

+340
-228
lines changed

website/docs/.vitepress/locales/zh_TW.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const pkg = require('vitepress/package.json')
66

77
export default defineConfig({
88
lang: 'zh-TW',
9-
description: '一個以核心為基礎,適用於 Android GKI 的 Root 解決方案。',
9+
description: '一個基於核心,適用於 Android GKI 的 Root 解決方案。',
1010

1111
themeConfig: {
1212
nav: nav(),

website/docs/zh_TW/guide/app-profile.md

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
App Profile 是 KernelSU 提供的一種針對各種應用程式自訂其使用配置的機制。
44

5-
對於授予了root 權限(也即可以使用 `su`)的應用程式來說,App Profile 也可以稱為Root Profile,它可以自訂 `su``uid`, `gid` , `groups` , ` capabilities` 以及 `SELinux context` 規則,從而限制 root 使用者的權限;例如可以針對防火牆應用程式僅授予網路權限,而不授予檔案存取權限,針對凍結類別應用程式僅授予 shell 權限而不是直接給 root ;透過最小化權限原則**把權力關進籠子裡**
5+
對於授予了 root 權限(即可以使用 `su`)的應用程式來說,App Profile 也可以稱為 Root Profile,它可以自訂 `su``uid``gid``groups`` capabilities` 以及 `SELinux context` 規則,從而限制 root 使用者的權限。
6+
例如可以針對防火牆應用程式僅授予網路權限,而不授予檔案存取權限,針對凍結類別應用程式僅授予 shell 權限而不是直接給 root ;透過最小化權限原則**把權力關進籠子裡**
67

78
對於沒有被授予 root 權限的普通應用,App Profile 可以控制核心以及模組系統對此應用的行為;例如是否需要針對此應用程式卸載模組造成的修改等。核心和模組系統可以透過此配置決定是否要做一些類似「隱藏痕跡」類別的操作。
89

@@ -16,8 +17,8 @@ UID 為 0 的使用者稱為 root 使用者,GID 為 0 的群組稱為 root 群
1617

1718
對於 Android 系統來說,每個應用程式都是一個單獨的使用者(不考慮 share uid 的情況),擁有一個唯一的 UID。例如 `0` 是 root 使用者,`1000``system``2000` 是 ADB shell,10000-19999 的是一般使用者。
1819

19-
:::info
20-
此處的 UID 跟 Android 系統的多使用者,或者說工作資料(Work Profile),不是概念。工作資料實際上是對 UID 進行分片實現的,例如 10000-19999 是主使用者,110000-119999 是工作資料;他們中的任何一個普通應用都擁有自己獨有的 UID。
20+
:::info 補充
21+
此處的 UID 跟 Android 系統的多使用者,或者說工作資料(Work Profile),是不同概念。工作資料實際上是對 UID 進行分片實現的,例如 10000-19999 是主使用者,110000-119999 是工作資料;他們中的任何一個普通應用都擁有自己獨有的 UID。
2122
:::
2223

2324
每一個應用程式可以有若干個群組,GID 使其主要的群組,通常與 UID 一致;其他的群組稱為補充群組(groups)。某些權限是透過群組控制的,例如網路訪問,藍牙等。
@@ -29,7 +30,7 @@ oriole:/ $ id
2930
uid=2000(shell) gid=2000(shell) groups=2000(shell),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),1078(ext_data_ww) (ext_obb_rw),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3009(readproc),3011(uhid),3012(readreadtracefs:s05:
3031
```
3132
32-
其中,UID 為`2000`,GID 也即主要組ID 也為`2000`;除此之外它還在許多補充組裡面,例如`inet` 組代表可以創建`AF_INET``AF_INET6` 的socket(存取網路),`sdcard_rw` 代表可以讀寫sdcard 等。
33+
其中,UID 為`2000`,GID 也即主要組 ID 也為 `2000`;除此之外它還在許多補充組裡面,例如 `inet` 組代表可以創建 `AF_INET` `AF_INET6` 的 socket(存取網路),`sdcard_rw` 代表可以讀寫 sdcard 等。
3334
3435
KernelSU 的 Root Profile 可以自訂執行 `su` 後 root 程式的 UID, GID 和 groups。例如,你可以設定某個 root 應用程式的Root Profile 其UID 為`2000`,這表示此應用程式在使用`su` 的時候,它的實際權限是ADB Shell 等級;你可以去掉groups 中的`inet` ,這樣這個`su` 就無法存取網路。
3536
@@ -43,7 +44,7 @@ App Profile 只是控制 root 應用程式使用 `su` 後的權限,它並非
4344
4445
Capabilities 是 Linux 的一種分權機制。
4546
46-
傳統的 UNIX 系統為了執行權限檢查,將流程分為兩類:特權程式(其有效使用者 ID 為 0,稱為超級使用者或 root)和非特權程式(其有效 UID 為非零)。特權程式會繞過所有核心權限檢查,而非特權程式則根據其憑證(通常是有效UID、有效GID和補充群組清單)進行完整的權限檢查。
47+
傳統的 UNIX 系統為了執行權限檢查,將流程分為兩類:特權程式(其等效使用者 ID 為 0,稱為超級使用者或 root)和非特權程式(其等效 UID 為非零)。特權程式會繞過所有核心權限檢查,而非特權程式則根據其憑證(通常是等校 UID、等效 GID 和補充群組清單)進行完整的權限檢查。
4748
4849
從 Linux 2.2開始,Linux 將傳統上與超級使用者關聯的特權分解為獨立的單元,稱為 Capabilities(有的也翻譯為「權能」),它們可以獨立啟用和停用。
4950
@@ -52,7 +53,7 @@ Capabilities 是 Linux 的一種分權機制。
5253
KernelSU 的 Root Profile 可以自訂執行 `su` 後 root 程式的 Capabilities,從而實現只授予「部分 root 權限」。與上面介紹的UID, GID 不同,某些 root 應用就是需要 `su` 後 UID 是 `0`,此時我們可以透過限制這個 UID 為 `0` 的 root 使用者的 Capabilities,就可以限制它能夠執行的操作。
5354
5455
:::tip 強烈建議
55-
Linux 系統關於 Capability [官方文件](https://man7.org/linux/man-pages/man7/capabilities.7.html),解釋了每一項Capability 所代表的能力,寫的非常詳細,如果你想要自訂Capabilities,請務必先閱讀此文件。
56+
Linux Capability [官方文件](https://man7.org/linux/man-pages/man7/capabilities.7.html)詳細解釋了每一項 Capability 所代表的能力,如果你想要自訂Capabilities,請務必先閱讀此文件。
5657
:::
5758
5859
### SELinux {#selinux}
@@ -76,7 +77,7 @@ SELinux 的完整概念比較複雜,我們這裡不打算講解它的具體運
7677
7778
KernelSU 的 Root Profile 可以自訂執行 `su` 後 root 程式的 SELinux context,並且可以針對這個 context 設定特定的存取控制規則,從而更精細地控制 root 權限。
7879
79-
通常情況下,應用程式執行 `su` 後,會將進程切換到一個**不受任何限制** 的SELinux 域,例如`u:r:su:s0`,透過 Root Profile,我們可以將它切換到一個自訂的網域,例如 `u:r:app1:s0`然後為這個網域制定一系列規則
80+
通常情況下,應用程式執行 `su` 後,會將進程切換到一個**不受任何限制** 的 SELinux 域,例如`u:r:su:s0`,透過 Root Profile,我們可以將它切換到一個自訂的作用域,例如 `u:r:app1:s0`然後為這個作用域制定一系列規則
8081
8182
```sh
8283
type app1
@@ -85,34 +86,34 @@ typeattribute app1 mlstrustedsubject
8586
allow app1 * * *
8687
```
8788
88-
注意:此處的 `allow app1 * * *` 僅僅作為演示方便而使用,實際過程中不應使用這個規則,因為它跟 permissive 區別不大
89+
注意:此處的 `allow app1 * * *` 僅僅作為示範方便而使用,實際過程中不應使用這個規則,因為它跟寬容模式區別不大
8990
9091
### 逃逸 {#escalation}
9192
9293
如果 Root Profile 的配置不合理,那麼可能會發生逃逸的情況:Root Profile 的限制會意外失效。
9394
94-
例如,如果你為ADB shell 使用者設定允許root 權限(這是相當常見的情況);然後你給某個普通應用程式允許root 權限,但是配置它的root profile 中的UID 為2000(ADB shell 使用者的UID);那麼此時,這個App 可以透過執行兩次 `su` 來獲得完整的root 權限:
95+
例如,如果你為ADB shell 使用者設定允許root 權限(這是相當常見的情況);然後你給某個普通應用程式允許 root 權限,但是配置它的 root profile 中的 UID 為 2000(ADB shell 使用者的UID);那麼此時,這個 App 可以透過執行兩次 `su` 來獲得完整的root 權限:
9596
96-
1. 第一次執行 `su`,由於 App Profile 強制生效,會正常切換到 UID 為 `2000(adb shell)` 而非 `0(root)`
97-
2. 第二次執行 `su`,由於此時它 UID 是 `2000`,而你給 `2000(adb shell)` 配置了允許 root,它會獲得完整的 root 權限!
97+
1. 第一次執行 `su`,由於 App Profile 強制生效,會正常切換到 UID 為 `2000` (adb shell) 而非 `0` (root)。
98+
2. 第二次執行 `su`,由於此時它 UID 是 `2000`,而你給 `2000` (adb shell) 配置了允許 root,它會獲得完整的 root 權限!
9899
99100
:::warning 注意
100101
這是完全符合預期的行為,並非 BUG!因此我們建議:
101102
102-
如果你的確需要給 adb 授予 root 權限(例如你是開發者),那麼不建議你在配置 Root Profile 的時候將 UID 改成 `2000`,用 `1000(system)` 會更好。
103+
如果你的確需要給 adb 授予 root 權限(例如你是開發者),那麼不建議你在配置 Root Profile 的時候將 UID 改成 `2000`,用 `1000` (system) 會更好。
103104
:::
104105
105106
## Non Root Profile {#non-root-profile}
106107
107108
### 卸載模組 {#umount-modules}
108109
109-
KernelSU 提供了一種 systemless 的方式來修改系統分區,這是透過掛載 overlayfs 來實現的。但有些情況下,App 可能會對這種行為比較敏感;因此,我們可以透過設定「卸載模組」來卸載掛載在這些應用程式上的模組。
110+
KernelSU 提供了一種無須直接修改系統分區的方式 (systemless) 來修改系統分區,這是透過掛載 overlayfs 來實現的。但有些情況下,App 可能會對這種行為比較敏感;因此,我們可以透過設定「卸載模組」來卸載掛載在這些應用程式上的模組。
110111
111112
另外,KernelSU 管理器的設定介面還提供了一個「預設卸載模組」的開關,這個開關預設是**開啟**的,這表示**如果不對應用程式做額外的設定**,預設情況下 KernelSU 或某些模組會對此應用程式執行卸載操作。當然,如果你不喜歡這個設定或這個設定會影響某些 App,你可以有以下選擇:
112113
113114
1. 保持「預設卸載模組」的開關,然後針對不需要「卸載模組」的應用程式進行單獨的設置,在 App Profile 中關閉「卸載模組」;(相當於「白名單」)。
114115
2. 關閉「預設卸載模組」的開關,然後針對需要「卸載模組」的應用程式進行單獨的設置,在 App Profile 中開啟「卸載模組」;(相當於「黑名單」)。
115116
116-
:::info
117-
KernelSU 在 5.10 及以上內核上,內核無須任何修改就可以卸載模組;但在 5.10 以下的設備上,這個開關僅僅是一個“設定”,KernelSU 本身不會做任何動作,如果你希望在 5.10 以前的內核可以卸載模組,你需要將 `path_unmount` 函數向後移植到 `fs/namespace.c`,您可以在[如何為非 GKI 核心整合 KernelSU](/zh_TW/guide/how-to-integrate-for-non-gki.html)的末尾獲取更多資訊。一些模組(如 ZygiskNext)也會透過這個設定決定是否需要卸載。
117+
:::info 提示
118+
KernelSU 在 5.10 及以上內核上,內核無須任何修改就可以卸載模組;但在 5.10 以下的設備上,這個開關僅僅是一個"設定",KernelSU 本身不會做任何動作,如果你希望在 5.10 以前的內核可以卸載模組,你需要將 `path_unmount` 函數向後移植到 `fs/namespace.c`,您可以在[如何為非 GKI 核心整合 KernelSU](how-to-integrate-for-non-gki.md#how-to-backport-path_unpount)獲取更多資訊。一些模組(如 ZygiskNext)也會透過這個設定決定是否需要卸載。
118119
:::
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
# KernelSU 與 Magisk 的差異 {#title}
1+
# KernelSU 與 Magisk 的差異 {#difference-with-magisk}
22

33
儘管 KernelSU 模組和 Magisk 模組之間有許多相似之處,但由於它們完全不同的實作機制,不可避免地存在一些差異;如果您想讓您的模組同時在 Magisk 和 KernelSU 上運作,那麼您必須瞭解這些差異。
44

55
## 相同之處 {#similarities}
66

77
- 模組檔案格式:都以 Zip 的格式組織模組,並且模組的格式幾乎相同
88
- 模組安裝目錄:都位於 `/data/adb/modules`
9-
- Systemless:都支援通過模組以無系統修改的方式來更改 `/system`
9+
- 無系統修改:都支援透過模組以無系統修改的方式來更改 `/system`
1010
- `post-fs-data.sh`:執行階段和語義完全相同
1111
- `service.sh`:執行階段和語義完全相同
1212
- `system.prop`:完全相同
@@ -19,10 +19,10 @@
1919

2020
以下是一些不同之處:
2121

22-
1. KernelSU 的模組不支援在 Recovery 中安裝。
22+
1. KernelSU 的模組無法在 Recovery 中安裝。
2323
2. KernelSU 的模組沒有內建的 Zygisk 支援 (但您可以透過 [ZygiskNext](https://github.com/Dr-TSNG/ZygiskNext) 來使用 Zygisk 模組)。
2424
3. KernelSU 模組取代或刪除檔案與 Magisk 完全不同。KernelSU 不支援 `.replace` 方法,相反,您需要透過 `mknod filename c 0 0` 建立相同名稱的資料夾以刪除對應檔案。
25-
4. BusyBox 的目錄不同KernelSU 內建的 BusyBox 在 `/data/adb/ksu/bin/busybox` 而 Magisk 在 `/data/adb/magisk/busybox`**注意此為 KernelSU 內部行為,未來可能會變更!**
26-
5. KernelSU 不支援 `.replace` 檔案;但 KernelSU 支援 `REPLACE``REMOVE` 變數以移除或取代檔案 (資料夾)
25+
4. BusyBox 的目錄不同KernelSU 內建的 BusyBox 在 `/data/adb/ksu/bin/busybox`而 Magisk 在 `/data/adb/magisk/busybox`**注意此為 KernelSU 內部行為,未來可能會變更!**
26+
5. KernelSU 不支援 `.replace` 檔案;但 KernelSU 支援 `REPLACE``REMOVE` 變數以移除或取代檔案與資料夾
2727
6. KernelSU 新增了 `boot-completed` 階段以在啟動完成時執行一些腳本。
28-
7. KernelSU 新增了 `post-mount` 階段,以便在掛載 overlayfs 後執行一些腳本
28+
7. KernelSU 新增了 `post-mount` 階段,以便在掛載 overlayfs 後執行一些腳本

website/docs/zh_TW/guide/faq.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ KernelSU 沒有內建 Zygisk 支援,但是您可以用 [ZygiskNext](https://gi
2626

2727
KernelSU 的模組系統與 Magisk 的 magic mount 存在衝突,如果在 KernelSU 中啟用了任何模組,那麼整個 Magisk 將無法正常運作。
2828

29-
但是如果您只使用 KernelSU 的 `su`,那么它會和 Magisk 一同運作:KernelSU 修改 `kernel`Magisk 修改 `ramdisk`,它們可以搭配使用。
29+
但是如果您只使用 KernelSU 的 `su`,那么它會和 Magisk 一同運作:KernelSU 修改 `kernel`Magisk 修改 `ramdisk`,它們可以搭配使用。
3030

3131
## KernelSU 会取代 Magisk 嗎?
3232

@@ -49,11 +49,11 @@ KernelSU 的模組系統與 Magisk 的 magic mount 存在衝突,如果在 Kern
4949

5050
## 如何為舊版核心整合 KernelSU?
5151

52-
請參閱[指南](how-to-integrate-for-non-gki)
52+
請參閱[指南](how-to-integrate-for-non-gki.md)
5353

5454
## 為何我的 Android 版本為 13,但核心版本卻是 "android12-5.10"?
5555

56-
核心版本與 Android 版本無關,如果您要刷新 KernelSU,請一律使用**核心版本**而非 Android 版本,如果你為 "android12-5.10" 的裝置刷新 Android 13 的核心,等候您的將會是開機迴圈。
56+
核心版本與 Android 版本無關,如果您要使用 KernelSU,請一律使用**核心版本**而非 Android 版本,如果你為 "android12-5.10" 的裝置寫入 Android 13 的核心,等候您的將會是開機迴圈。
5757

5858
## 我是 GKI1.0,能用 KernelSU 嗎?
5959

website/docs/zh_TW/guide/how-to-build.md

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
1. [建置核心](https://source.android.com/docs/setup/build/building-kernels)
66
2. [標準核心映像 (GKI) 發行組建](https://source.android.com/docs/core/architecture/kernel/gki-release-builds)
77

8-
::: warning
8+
::: warning 警告
99
此文件適用於 GKI 裝置,如果您是舊版核心,請參閱[如何為非 GKI 裝置整合 KernelSU](how-to-integrate-for-non-gki)
1010
:::
1111

@@ -20,7 +20,7 @@ repo init -m manifest.xml
2020
repo sync
2121
```
2222

23-
`<kernel_manifest.xml>` 是一個可以唯一確定組建的資訊清單檔案,您可以使用這個資訊清單進行可重新預測的組建。您需要從[標準核心映像 (GKI) 發行組建](https://source.android.com/docs/core/architecture/kernel/gki-release-builds) 下載資訊清單檔案
23+
`<kernel_manifest.xml>` 是一個可以唯一確定組建的資訊清單,您可以使用這個資訊清單進行可重新預測的組建。您需要從[標準核心映像 (GKI) 發行組建](https://source.android.com/docs/core/architecture/kernel/gki-release-builds)下載資訊清單。
2424

2525
### 建置 {#build}
2626

@@ -34,14 +34,14 @@ LTO=thin BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh
3434

3535
不要忘記新增 `LTO=thin`,否則,如果您的電腦記憶體小於 24GB,建置可能會失敗。
3636

37-
從 Android 13 開始,核心由 `bazel` 建置:
37+
從 Android 13 開始,核心使用 `bazel` 建置:
3838

3939
```sh
4040
tools/bazel build --config=fast //common:kernel_aarch64_dist
4141
```
4242

43-
:::info
44-
對於某些 Android 14 內核,要使 Wi-Fi/藍牙正常工作,可能需要刪除所有受 GKI 保護的匯出:
43+
:::info 你可能需要知道...
44+
對於某些 Android 14 核心,要使 Wi-Fi/藍牙正常工作,可能需要刪除所有受 GKI 保護的匯出:
4545

4646
```sh
4747
rm common/android/abi_gki_protected_exports_*
@@ -52,22 +52,20 @@ rm common/android/abi_gki_protected_exports_*
5252

5353
如果您可以成功建置核心,那麼建置 KernelSU 就會非常輕鬆,依自己的需求在核心原始碼根目錄中執行以下任一命令:
5454

55-
- 最新 tag (穩定版本)
55+
::: code-group
5656

57-
```sh
57+
```sh[最新 tag (穩定版本)]
5858
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -
5959
```
6060

61-
- main 分支 (開發版本)
62-
63-
```sh
61+
```sh[main 分支 (開發版本)]
6462
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s main
6563
```
6664

67-
- 選取 tag (例如 v0.5.2)
68-
69-
```sh
65+
```sh[選取 tag (例如 v0.5.2)]
7066
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s v0.5.2
7167
```
7268

69+
:::
70+
7371
然後重新建置核心,您將會得到一個帶有 KernelSU 的核心映像!

0 commit comments

Comments
 (0)