Skip to content

Commit

Permalink
Merge pull request #8 from jeffpeng3/translate
Browse files Browse the repository at this point in the history
Update and translate website into Traditional Chinese.
  • Loading branch information
jeffpeng3 authored Mar 15, 2024
2 parents ceb00df + d2066c2 commit d6ab4df
Show file tree
Hide file tree
Showing 18 changed files with 271 additions and 42 deletions.
3 changes: 3 additions & 0 deletions website/docs/.vitepress/locales/zh_TW.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,14 @@ function sidebarGuide() {
text: 'Guide',
items: [
{ text: '什麼是 KernelSU?', link: '/zh_TW/guide/what-is-kernelsu' },
{ text: 'KernelSU 與 Magisk 的差異', link: '/zh_TW/guide/difference-with-magisk' },
{ text: '安裝', link: '/zh_TW/guide/installation' },
{ text: '如何建置?', link: '/zh_TW/guide/how-to-build' },
{ text: '如何為非 GKI 核心整合 KernelSU', link: '/zh_TW/guide/how-to-integrate-for-non-gki'},
{ text: '非官方支援裝置', link: '/zh_TW/guide/unofficially-support-devices.md' },
{ text: '模組指南', link: '/zh_TW/guide/module.md' },
{ text: '模組 WebUI', link: '/zh_TW/guide/module-webui.md' },
{ text: 'App Profile', link: '/zh_TW/guide/app-profile.md' },
{ text: '搶救開機迴圈', link: '/zh_TW/guide/rescue-from-bootloop.md' },
{ text: '常見問題', link: '/zh_TW/guide/faq' },
{ text: '隱藏功能', link: '/zh_TW/guide/hidden-features' },
Expand Down
4 changes: 4 additions & 0 deletions website/docs/public/templates/adaway.root
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
"context":"u:r:su:s0",
"namespace":"INHERITED",
"locales": {
"zh_TW": {
"name": "Adaway Root",
"description": "僅允許 Adaway 修改 hosts 和執行 Web 伺服器的必要權限"
},
"bn": {
"name": "অ্যাডঅ্যাওয়ে রুট",
"description": "অ্যাডঅ্যাওয়ে সিস্টেমের হোস্ট ফাইল পরিবর্তন এবং ওয়েবসার্ভার চালু করতে কমপক্ষে যা অনুমতি লাগে।"
Expand Down
4 changes: 4 additions & 0 deletions website/docs/public/templates/adb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@
"name": "Adb 模版",
"description": "大多数使用 ADB 权限应用所需要的最小权限"
},
"zh_TW": {
"name": "Adb",
"description": "大多數使用 ADB 權限應用程式所需要的最低權限"
},
"tr": {
"name": "Adb",
"description": "ADB ayrıcalığını kullanan çoğu uygulama için gereken minimum kurallar."
Expand Down
4 changes: 4 additions & 0 deletions website/docs/public/templates/cemiuiler.readproc
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@
"name": "西米露Cemiuiler",
"description": "授予Cemiuiler能正常工作——重启作用域应用的最小限度权限。"
},
"zh_TW": {
"name": "Cemiuiler",
"description": "授予Cemiuiler能正常運作-重啟作用域應用程式的最低權限"
},
"tr": {
"name": "Cemiuiler",
"description": "Cemiuiler uygulamasına düzgün çalışması için minimum izinleri verin."
Expand Down
4 changes: 4 additions & 0 deletions website/docs/public/templates/incompetent.root
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@
"name": "无能的 Root",
"description": "无任何权能的 root 用户。"
},
"zh_TW": {
"name": "無能的 Root",
"description": "無任何權限的 root"
},
"tr": {
"name": "Yetersiz root",
"description": "Herhangi bir özelliği olmayan yetersiz bir root kullanıcısı."
Expand Down
4 changes: 4 additions & 0 deletions website/docs/public/templates/kernelmanager.root
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@
"context":"u:r:su:s0",
"namespace":"INHERITED",
"locales": {
"zh_TW": {
"name": "核心管理器",
"description": "常用於 FKM 和 SmartPack 等核心管理器"
},
"in": {
"name": "Kernel Manager",
"description": "Umumnya digunakan pada Kernel manager seperti FKM dan SmartPack."
Expand Down
4 changes: 4 additions & 0 deletions website/docs/public/templates/rootexploler.root
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
"context":"u:r:su:s0",
"namespace":"INHERITED",
"locales": {
"zh_TW": {
"name": "Root Explorer",
"description": "具有根目錄讀寫權限的檔案管理器"
},
"in": {
"name": "Root Explorer",
"description": "File manager dengan kemampuan Root."
Expand Down
4 changes: 4 additions & 0 deletions website/docs/public/templates/shizuku.root
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
"context":"u:r:su:s0",
"namespace":"INHERITED",
"locales": {
"zh_TW": {
"name": "Shizuku",
"description": "只有啟動 Shizuku 服務所需的權限"
},
"bn": {
"name": "শিজুকু সার্ভিস",
"description": "শিজুকু চালানোর জন্য শুধু যে অনুমতি গুলি লাগে।"
Expand Down
4 changes: 4 additions & 0 deletions website/docs/public/templates/system
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@
"name": "Android 系统",
"description": "Android 系统运行的权限级别,但没有任何权能。"
},
"zh_TW": {
"name": "Android 系統",
"description": "Android 系統運作的權限級別,但沒有任何權能"
},
"tr": {
"name": "Sistem",
"description": "Android sisteminin herhangi bir yetenek olmadan çalıştığı izin düzeyi."
Expand Down
118 changes: 118 additions & 0 deletions website/docs/zh_TW/guide/app-profile.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# App Profile

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

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

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

## Root Profile

### UID、GID 和 groups

Linux 系統中有使用者和群組兩個概念。每個使用者都有一個使用者 ID(UID),一個使用者可以屬於多個群組,每個群組也有群組 ID(GID)。此 ID 用於識別系統的使用者並確定使用者可以存取哪些系統資源。

UID 為 0 的使用者稱為 root 使用者,GID 為 0 的群組稱為 root 群組;root 使用者群組通常擁有系統的最高權限。

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

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

每一個應用程式可以有若干個群組,GID 使其主要的群組,通常與 UID 一致;其他的群組稱為補充群組(groups)。某些權限是透過群組控制的,例如網路訪問,藍牙等。

例如,如果我們在 ADB shell 中執行 `id` 指令,會得到以下輸出:

```sh
oriole:/ $ id
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:
```
其中,UID 為`2000`,GID 也即主要組ID 也為`2000`;除此之外它還在許多補充組裡面,例如`inet` 組代表可以創建`AF_INET``AF_INET6` 的socket(存取網路),`sdcard_rw` 代表可以讀寫sdcard 等。
KernelSU 的 Root Profile 可以自訂執行 `su` 後 root 程式的 UID, GID 和 groups。例如,你可以設定某個 root 應用程式的Root Profile 其UID 為`2000`,這表示此應用程式在使用`su` 的時候,它的實際權限是ADB Shell 等級;你可以去掉groups 中的`inet` ,這樣這個`su` 就無法存取網路。
:::tip 注意
App Profile 只是控制 root 應用程式使用 `su` 後的權限,它並非控制應用程式本身的權限!如果應用程式本身申請了網路存取權限,那麼它即使不使用 `su` 也可以存取網路;為 `su` 去掉 `inet` 群組只是讓 `su` 無法存取網路。
:::
與應用程式透過 `su` 主動切換使用者或群組不同,Root Profile 是在核心中強制實施的,不依賴 root 應用程式的自覺行為,`su` 權限的授予完全取決於使用者而非開發者。
### Capabilities
Capabilities 是 Linux 的一種分權機制。
傳統的 UNIX 系統為了執行權限檢查,將流程分為兩類:特權程式(其有效使用者 ID 為 0,稱為超級使用者或 root)和非特權程式(其有效 UID 為非零)。特權程式會繞過所有核心權限檢查,而非特權程式則根據其憑證(通常是有效UID、有效GID和補充群組清單)進行完整的權限檢查。
從 Linux 2.2開始,Linux 將傳統上與超級使用者關聯的特權分解為獨立的單元,稱為 Capabilities(有的也翻譯為「權能」),它們可以獨立啟用和停用。
每一個 Capability 代表一個或一類權限。例如 `CAP_DAC_READ_SEARCH` 就代表是否有能力繞過檔案讀取權限檢查和目錄讀取和執行權限檢查。如果一個有效 UID 為 `0` 的使用者(root 使用者)沒有 `CAP_DAC_READ_SEARCH` 或更高 Capalities,這表示即使它是 root 也不能​​隨意讀取檔案。
KernelSU 的 Root Profile 可以自訂執行 `su` 後 root 程式的 Capabilities,從而實現只授予「部分 root 權限」。與上面介紹的UID, GID 不同,某些 root 應用就是需要 `su` 後 UID 是 `0`,此時我們可以透過限制這個 UID 為 `0` 的 root 使用者的 Capabilities,就可以限制它能夠執行的操作。
:::tip 強烈建議
Linux 系統關於 Capability 的[官方文件](https://man7.org/linux/man-pages/man7/capabilities.7.html),解釋了每一項Capability 所代表的能力,寫的非常詳細,如果你想要自訂Capabilities,請務必先閱讀此文件。
:::
### SELinux
SELinux 是一種強大的強制權限存取控制(MAC)機制。它按照**預設拒絕**的原則運作:任何未經明確允許的行為都會被拒絕。
SELinux 可依兩種全域模式運作:
1. 寬容模式:權限拒絕事件會被記錄下來,但不會被強制執行。
2. 強制模式:權限拒絕事件會被記錄下來**並且**強制執行。
:::warning 警告
現代的 Android 系統極度依賴 SELinux 來保障整個系統的安全性,我們強烈建議您不要使用任何以「寬容模式」運作的自訂系統,因為那樣與裸奔沒什麼區別。
:::
SELinux 的完整概念比較複雜,我們這裡不打算講解它的具體運作方式,建議你先透過以下資料來了解其運作原理:
1. [wikipedia](https://en.wikipedia.org/wiki/Security-Enhanced_Linux)
2. [Redhat: what-is-selinux](https://www.redhat.com/en/topics/linux/what-is-selinux)
3. [ArchLinux: SELinux](https://wiki.archlinux.org/title/SELinux)
KernelSU 的 Root Profile 可以自訂執行 `su` 後 root 程式的 SELinux context,並且可以針對這個 context 設定特定的存取控制規則,從而更精細地控制 root 權限。
通常情況下,應用程式執行 `su` 後,會將進程切換到一個**不受任何限制** 的SELinux 域,例如`u:r:su:s0`,透過 Root Profile,我們可以將它切換到一個自訂的網域,例如 `u:r:app1:s0`,然後為這個網域制定一系列規則:
```sh
type app1
enforce app1
typeattribute app1 mlstrustedsubject
allow app1 * * *
```
注意:此處的 `allow app1 * * *` 僅僅作為演示方便而使用,實際過程中不應使用這個規則,因為它跟 permissive 區別不大。
### 逃逸
如果 Root Profile 的配置不合理,那麼可能會發生逃逸的情況:Root Profile 的限制會意外失效。
例如,如果你為ADB shell 使用者設定允許root 權限(這是相當常見的情況);然後你給某個普通應用程式允許root 權限,但是配置它的root profile 中的UID 為2000(ADB shell 使用者的UID);那麼此時,這個App 可以透過執行兩次 `su` 來獲得完整的root 權限:
1. 第一次執行 `su`,由於 App Profile 強制生效,會正常切換到 UID 為 `2000(adb shell)` 而非 `0(root)`
2. 第二次執行 `su`,由於此時它 UID 是 `2000`,而你給 `2000(adb shell)` 配置了允許 root,它會獲得完整的 root 權限!
:::warning 注意
這是完全符合預期的行為,並非 BUG!因此我們建議:
如果你的確需要給 adb 授予 root 權限(例如你是開發者),那麼不建議你在配置 Root Profile 的時候將 UID 改成 `2000`,用 `1000(system)` 會更好。
:::
## Non Root Profile
### 卸載模組
KernelSU 提供了一種 systemless 的方式來修改系統分區,這是透過掛載 overlayfs 來實現的。但有些情況下,App 可能會對這種行為比較敏感;因此,我們可以透過設定「卸載模組」來卸載掛載在這些應用程式上的模組。
另外,KernelSU 管理器的設定介面還提供了一個「預設卸載模組」的開關,這個開關預設是**開啟**的,這表示**如果不對應用程式做額外的設定**,預設情況下 KernelSU 或某些模組會對此應用程式執行卸載操作。當然,如果你不喜歡這個設定或這個設定會影響某些 App,你可以有以下選擇:
1. 保持「預設卸載模組」的開關,然後針對不需要「卸載模組」的應用程式進行單獨的設置,在 App Profile 中關閉「卸載模組」;(相當於「白名單」)。
2. 關閉「預設卸載模組」的開關,然後針對需要「卸載模組」的應用程式進行單獨的設置,在 App Profile 中開啟「卸載模組」;(相當於「黑名單」)。
:::info
KernelSU 在 5.10 及以上內核上,內核會執行“卸載模組”的操作;但在 5.10 以下的設備上,這個開關僅僅是一個“設定”,KernelSU 本身不會做任何動作,一些模組(如 Zygisksu 會透過這個模組決定是否需要卸載)
:::
10 changes: 6 additions & 4 deletions website/docs/zh_TW/guide/difference-with-magisk.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# KernelSU 模組與 Magisk 的差異 {#title}
# KernelSU Magisk 的差異 {#title}

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

## 相同之處 {#similarities}

- 模組檔案格式:都以 Zip 的格式組織模組,並且模組的格式幾乎相同
- 模組安裝目錄:都位於 `/data/adb/modules`
- Systemless:都支援透過模組的形式以 systemless 修改 /system
- `post-fs-data.sh`執行時間和語義完全相同
- `service.sh`執行時間和語義完全相同
- Systemless:都支援通過模組以無系統修改的方式來更改 `/system`
- `post-fs-data.sh`執行階段和語義完全相同
- `service.sh`執行階段和語義完全相同
- `system.prop`:完全相同
- `sepolicy.rule`:完全相同
- BusyBox:指令碼在 BusyBox 中以「獨立模式」執行
Expand All @@ -24,3 +24,5 @@
3. KernelSU 模組取代或刪除檔案與 Magisk 完全不同。KernelSU 不支援 `.replace` 方法,相反,您需要透過 `mknod filename c 0 0` 建立相同名稱的資料夾以刪除對應檔案。
4. BusyBox 的目錄不同;KernelSU 內建的 BusyBox 在 `/data/adb/ksu/bin/busybox` 而 Magisk 在 `/data/adb/magisk/busybox`**注意此為 KernelSU 內部行為,未來可能會變更!**
5. KernelSU 不支援 `.replace` 檔案;但 KernelSU 支援 `REPLACE``REMOVE` 變數以移除或取代檔案 (資料夾)。
6. KernelSU 新增了 `boot-completed` 階段以在啟動完成時執行一些腳本。
7. KernelSU 新增了 `post-mount` 階段,以便在掛載 overlayfs 後執行一些腳本
19 changes: 16 additions & 3 deletions website/docs/zh_TW/guide/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,26 @@ KernelSU 的模組系統與 Magisk 的 magic mount 存在衝突,如果在 Kern

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

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

GKI1 與 GKI2 完全不同,所以您需要自行編譯核心。

## KernelSU 支援 --mount-master/全域掛接命名空間嗎?

目前沒有 (未來可能會支援),但實際上有很多種方法手動進入全域命名空間,無需 Su 內建支援,比如:
目前沒有 (未來可能會支援),但實際上有很多種方法手動進入全域命名空間,無需 `su` 內建支援,比如:

1. `nsenter -t 1 -m sh` 可以取得一個全域 mount namespace 的 shell.
2. 在您要執行的命令前新增 `nsenter --mount=/proc/1/ns/mnt` 即可使此命令在全域 mount namespace 下執行。KernelSU 本身也使用了 [這種方法](https://github.com/tiann/KernelSU/blob/77056a710073d7a5f7ee38f9e77c9fd0b3256576/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt#L115)

## 我是 GKI1.0,能用 KernelSU 嗎?
## KernelSU 可以修改 Hosts 嗎? 我要怎麼使用 AdAway?
當然。但是 KernelSU 沒有內建的 Hosts 支持,您可以安裝 [systemless-hosts](https://github.com/symbuzzer/systemless-hosts-KernelSU-module) 來做到這一點。

GKI1 與 GKI2 完全不同,所以您需要自行編譯核心。
## 為什麼會有 1TB 的龐大檔案?

1 TB 大小的 `modules.img` 是一個磁碟映像文件,不用擔心它的大小,它是一種特殊類型的文件,稱為稀疏檔案,它的實際大小只有你使用的模組的大小,並且在你刪除模組後會動態縮小;實際上並沒有佔用1TB的磁碟空間(實際上你的手機可能並沒有那麼多空間)。

如果你確實對檔案的大小不滿意,可以使用 `resize2fs -M` 指令將其調整為實際大小;但此時模組可能無法正常運作,我們不會這種情況提供任何支援。

## 為什麼我的設備顯示錯誤的儲存空間大小?

某些裝置使用非正規方法來計算裝置的儲存大小,可能會導致系統應用程式的儲存空間計算不準確,特別是在處理 1 TB 的稀疏檔案時。雖然這個問題似乎是三星設備特有的,僅影響三星應用程式和服務,但必須注意的是,差異主要在於總儲存大小,可用空間運算仍然準確。
4 changes: 2 additions & 2 deletions website/docs/zh_TW/guide/hidden-features.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# 隱藏功能

## ksurc
## .ksurc

預設狀況下,`/system/bin/sh` 會載入 `/system/etc/mkshrc`

可以透過建立 `/data/adb/ksu/.ksurc` 檔案來讓 Su 載入此檔案而非 `/system/etc/mkshrc`
可以透過建立 `/data/adb/ksu/.ksurc` 檔案來讓 `su` 載入此檔案而非 `/system/etc/mkshrc`
8 changes: 8 additions & 0 deletions website/docs/zh_TW/guide/how-to-build.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,14 @@ LTO=thin BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh
tools/bazel build --config=fast //common:kernel_aarch64_dist
```

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

```sh
rm common/android/abi_gki_protected_exports_*
```
:::

## 使用 KernelSU 建置核心

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

0 comments on commit d6ab4df

Please sign in to comment.