章 4. 認證和訪問控制

# 章 4. 認證和訪問控制

當使用者（或程式）需要存取系統時，需要進行認證，確認身份是受信任。

| 警告
PAM 的調配錯誤可能會鎖住你的系統。你必須有一個準備好的救援 CD，或者設立一個替代的 boot 分割槽。為了恢復系統，你需要使用它們啟動系統並糾正錯誤。

## 4.1. 一般的 Unix 認證

一般的 Unix 認證由 PAM （Pluggable Authentication Modules，即可插入的驗證模組） 下的 `pam_unix`(8) 模組提供。它的 3 個重要檔案如下，其內的條目使用 “`:`” 分隔。

表格 4.1. `pam_unix`(8) 使用的 3 個重要組態檔案

檔案 | 許可權 | 使用者 | 組 | 說明
--- | --- | --- | --- | ---
`/etc/passwd` | `-rw-r--r--` | `root` | `root` | （明文的）使用者帳號資訊
`/etc/shadow` | `-rw-r-----` | `root` | `shadow` | 安全加密的使用者帳號資訊
`/etc/group` | `-rw-r--r--` | `root` | `root` | 組資訊

“`/etc/passwd`” 包含下列內容。

     ...
    user1:x:1000:1000:User1 Name,,,:/home/user1:/bin/bash
    user2:x:1001:1001:User2 Name,,,:/home/user2:/bin/bash
     ...

如 `passwd`(5) 中所述，這個檔案中被 “`:`” 分隔的每項含義如下。

- 登入名

- 密碼形式說明

- 數字形式的使用者 ID

- 數字形式的組 ID

- 使用者名稱或註釋欄位

- 使用者家目錄

- 可選的使用者指令直譯器

“`/etc/passwd`” 的第二項曾經被用來儲存加密後的密碼。在引入了 “`/etc/shadow`” 後，該項被用來說明密碼形式。

表格 4.2. “`/etc/passwd`” 第二項的內容

內容 | 說明
--- | ---
（空） | 無需密碼的帳號
x | 加密後的密碼儲存在 “`/etc/shadow`”

“`/etc/shadow`” 包含下列內容。

     ...
    user1:$1$Xop0FYH9$IfxyQwBe9b8tiyIkt2P4F/:13262:0:99999:7:::
    user2:$1$vXGZLVbS$ElyErNf/agUDsm1DehJMS/:13261:0:99999:7:::
     ...

如 `shadow`(5) 中所述，這個檔案中被 “`:`” 分隔的每項含義如下。

- 登入名

- 加密後的密碼（開頭的 “`$1$`” 表示使用 MD5 加密。“*” 表示無法登入。）

- 最後一次修改密碼的時間，其表示從 1970 年 1 月 1 日起的天數

- 允許使用者再次修改密碼的天數間隔

- 使用者必須修改密碼的天數間隔

- 密碼失效前的天數，在此期間使用者會被警告

- 密碼失效後的天數，在次期間密碼依舊會被接受

- 帳號失效的時間，其表示從 1970 年 1 月 1 日起的天數

- …

“`/etc/group`” 包含下列內容。

    group1:x:20:user1,user2

如 `group`(5) 中所述，這個檔案中被 “`:`” 分隔的每項含義如下。

- 組名稱

- 加密後的密碼（不會被真正使用）

- 數字形式的組 ID

- 使用 “,” 分隔的使用者名稱列表

| 注意
“`/etc/gshadow`” 為 “`/etc/group`” 提供了與 “`/etc/shadow`” 相似的功能，但沒有被真正地使用。

| 注意
如果"`auth optional pam_group.so`" 這行新增到了"`/etc/pam.d/common-auth`"，並且在"`/etc/security/group.conf`" 裡進行了設定，一個使用者的實際組就可以被動態新增。參見 `pam_group`(8).

| 注意
`base-passwd` 軟體包包含了一份使用者和組的官方文件：“`/usr/share/doc/base-passwd/users-and-groups.html`”。

## 4.2. 管理帳號和密碼資訊

下面是一些管理帳號資訊的重要指令。

表格 4.3. 管理帳號資訊的指令

指令 | 功能
--- | ---
`getent passwd user_name` | 瀏覽 “`user_name`” 的帳號資訊
`getent shadow user_name` | 瀏覽使用者 "`user_name`" 隱藏的帳號資訊
`getent group group_name` | 瀏覽 “`group_name`” 的組資訊
`passwd` | 管理帳號密碼
`passwd -e` | 為啟用的帳號設定一次性的密碼
`chage` | 管理密碼有效期資訊

其中的一些功能只能被 root 使用。密碼和資料的加密參見 `crypt`(3)。

| 注意
在設定了 PAM 和 NSS 的系統上（例如 Debian salsa 機器），本地的 “`/etc/passwd`”、“`/etc/group`” 和 “`/etc/shadow`” 可能不會被系統啟用使用。上述的命令即使處於這種環境下依舊是有效的。

## 4.3. 好密碼

在系統安裝時建立一個帳號或使用 `passwd`(1) 指令時，你應該選擇一個好密碼，它應該由 6 到 8 個字元組成，其中包含下列根據 `passwd`(1) 設定的每個組合中的一個或多個字元。

- 小寫字母

- 數字 0 到 9

- 標點符號

| 警告
密碼中不要使用可以猜到的詞。帳號名、身份證號碼、電話號碼、地址、生日、家庭成員或寵物的名字、字典單詞、簡單的字元序列（例如 “12345” 或 “qwerty”）等都是糟糕的選擇。

## 4.4. 設立加密的密碼

下面是一些用於 生成加鹽的加密密碼 的獨立工具。

表格 4.4. 生成密碼的工具

軟體包 | 流行度 | 大小 | 指令 | 功能
--- | --- | --- | --- | ---
`whois` | V:22, I:209 | 384 | `mkpasswd` | 具備 `crypt`(3) 庫所有特性的前端
`openssl` | V:834, I:995 | 2503 | `openssl passwd` | 計算密碼雜湊 (OpenSSL). `passwd`(1ssl)

## 4.5. PAM 和 NSS

現代的類 Unix 系統（例如 Debian 系統）提供 PAM （Pluggable Authentication Modules，插入式驗證模組） 和 NSS（Name Service Switch，名稱服務切換） 機制給本地系統管理員，使他們能夠調配自己的系統。它們的功能可以概括為以下幾點。

- PAM 給應用軟體提供了一個靈活的認證機制，因此涉及到了密碼資料的交換。

- NSS 提供了一個靈活的名稱服務機制，它經常被 C 標準庫使用，使例如 `ls`(1) 和 `id`(1) 這樣的程式獲得使用者和組名稱。

PAM 和 NSS 系統必須保持調配一致。

PAM 和 NSS 系統中重要的軟體包如下。

表格 4.5. PAM 和 NSS 系統中重要的軟體包

軟體包 | 流行度 | 大小 | 說明
--- | --- | --- | ---
`libpam-modules` | V:922, I:999 | 917 | 插入式驗證模組（基礎服務）
`libpam-ldapd` | V:6, I:14 | 80 | 允許 LDAP 介面的插入式驗證模組
`libpam-systemd` | V:701, I:963 | 739 | 用於 `logind` 註冊使用者會話的插入式驗證模組（PAM）
`libpam-doc` | I:6 | 1504 | 插入式驗證模組（html 和 文字文件）
`libc6` | V:922, I:999 | 5370 | GNU C 庫：同樣提供“名稱服務切換”服務的共享庫
`glibc-doc` | I:5 | 3858 | GNU C 庫：幫助頁面
`glibc-doc-reference` | I:3 | 14261 | GNU C 庫：參考手冊，有 info、pdf 和 html 格式（non-free）
`libnss-mdns` | V:235, I:520 | 141 | 用於解析組播 DNS 名稱的 NSS 模組
`libnss-ldapd` | V:7, I:17 | 131 | NSS 模組，用於使用 LDAP 作為一個名稱服務的

- `libpam-doc` 中 “The Linux-PAM System Administrators' Guide” 是瞭解 PAM 調配的必要文件。

- `glibc-doc-reference` 中的 “System Databases and Name Service Switch” 是瞭解 NSS 調配的重要文件。

| 注意
你可以使用 “`aptitude search 'libpam-|libnss-'`” 指令檢視更多的相關軟體包。NSS 縮寫也可能意味著 “Network Security Service，網路安全服務”，它不同於 “Name Service Switch，名稱服務切換”。

| 注意
PAM 是為每個程式初始化環境變數為系統預設值的最基礎方法。

在 systemd 下, `libpam-systemd` 軟體包被安裝用來管理使用者登入，透過為 logind 在 `systemd` 控制組層級中註冊使用者會話來實現。參見 `systemd-logind`(8)、`logind.conf`(5)和 `pam_systemd`(8)。

### 4.5.1. PAM 和 NSS 存取的組態檔案

下面是一些 PAM 和 NSS 存取的重要組態檔案。

表格 4.6. PAM 和 NSS 存取的組態檔案

組態檔案 | 功能
--- | ---
`/etc/pam.d/program_name` | 為 “`program_name`” 程式設定 PAM 調配；參加 `pam`(7) 和 `pam.d`(5)
`/etc/nsswitch.conf` | 為每個服務條目設定 NSS 調配。參見 `nsswitch.conf`(5)
`/etc/nologin` | 通過 `pam_nologin`(8) 模組限制使用者登入
`/etc/securetty` | 通過 `pam_securetty`(8) 模組限制 root 存取 tty
`/etc/security/access.conf` | 通過 `pam_access`(8) 模組設定存取限制
`/etc/security/group.conf` | 通過 `pam_group`(8) 模組設定基於組的限制
`/etc/security/pam_env.conf` | 通過 `pam_env`(8) 模組設定環境變數
`/etc/environment` | 通過帶有 “`readenv=1`” 參數的 `pam_env`(8) 模組設定額外的環境變數
`/etc/default/locale` | 通過帶有 “`readenv=1 envfile=/etc/default/locale`” 參數的 `pam_env`(8) 模組設定語言環境值（在 Debian 系統中）
`/etc/security/limits.conf` | 通過 `pam_linits`(8) 模組設定資源限制（ulimit、core 等等）
`/etc/security/time.conf` | 通過 `pam_time`(8) 模組設定時間限制
`/etc/systemd/logind.conf` | 設定`systemd` 的登入管理器配置 (參見 `logind.conf`(5) 和 `systemd-logind.service`(8))

密碼選擇的限制是通過 PAM 模組 `pam_unix`(8) 和 `pam_cracklib`(8) 來實現的。它們可以通過各自的參數進行調配。

| 提示
PAM 模組在檔名中使用字尾 “`.so`”。

### 4.5.2. 現代的集中式系統管理

現代的集中式系統管理可以使用集中式的輕量目錄存取協議（LDAP）伺服器進行部署，從而通過網路管理許多類 Unix 和 非類 Unix 系統。輕量目錄存取協議的開源實現是 OpenLDAP 軟體。

LDAP 伺服器使用帶有 PAM 和 NSS 的`libpam-ldapd` 和 `libnss-ldapd` 軟體包為 Debian 系統提供帳號資訊。需要一些動作來啟用 LDAP（我沒有使用過這個設定，並且下面的資訊純粹是第二手的資訊。請在這種前提下閱讀下列內容。）。

- 你通過執行一個程式，例如獨立的 LDAP 背景程式 `slapd`(8)，來建立集中式的 LDAP 伺服器。

- 你在 “`/etc/pam.d/`” 目錄中的 PAM 組態檔案裡，使用 “`pam_ldap.so`” 替代預設值 “`pam_unix.so`”。

- 你在 “`/etc/nsswitch.conf`” 檔案中改變 NSS 調配，使用 “`ldap`” 替代預設值（“`compat`” 或 “`file`”）。

- 為了密碼的安全，你必須讓 `libpam-ldapd` 使用 SLL（或 TLS）連線。

- 為了確保 LDAP 網路開銷資料的完整性，你必須讓 `libpam-ldapd` 使用 SLL（或 TLS）連線。

- 為了減少 LDAP 網路流量，你應該在本地執行 `nscd`(8) 來快取任何 LDAP 搜尋結果。

參見由 `libpam-doc` 軟體包提供的 `nsswitch.conf`(5)、`pam.conf`(5)、 `ldap.conf`(5) 和 “`/usr/share/doc/libpam-doc/html/`” 中的文件，以及 `glibc-doc` 軟體包提供的 “`info libc 'Name Service Switch'`”。

類似地，你可以使用其它方法來設定另一種集中式的系統。

- 同 Windows 系統整合使用者和組。

  - 通過 `winbind` 和 `libpam_winbind` 軟體包訪問 Windows domain 服務.

  - 參見 `winbindd`(8) 和 Integrating MS Windows Networks with Samba。

- 同古老的類 Unix 系統整合使用者和組。

  - 通過 `nis` 軟體包存取 NIS (之前叫 YP) 或 NIS+。

  - 參見 The Linux NIS(YP)/NYS/NIS+ HOWTO。

### 4.5.3. “為什麼 GNU su 不支援 wheel 組”

這是在舊的 “`info su`” 底部 Richard M. Stallman 所說的一句名言。別擔心：Debian 系統中當前的 `su` 指令使用了 PAM，這樣當在 “`/etc/pam.d/su`” 中啟用了帶有 “`pam_wheel.so`” 的行後，就能夠限制非 wheel 組的使用者 `su` 到 `root` 組的能力。

### 4.5.4. 嚴格的密碼規則

安裝 `libpam-cracklib` 軟體包你能夠強制使用嚴格的密碼規則。

在一個典型的 GNOME 系統，將會安裝 `libpam-gnome-keyring`，"`/etc/pam.d/common-password`" 看起來像：

    # here are the per-package modules (the "Primary" block)
    password	requisite			pam_cracklib.so retry=3 minlen=8 difok=3
    password	[success=1 default=ignore]	pam_unix.so obscure use_authtok try_first_pass yescrypt
    # here's the fallback if no module succeeds
    password	requisite			pam_deny.so
    # prime the stack with a positive return value if there isn't one already;
    # this avoids us returning an error just because nothing sets a success code
    # since the modules above will each just jump around
    password	required			pam_permit.so
    # and here are more per-package modules (the "Additional" block)
    password	optional	pam_gnome_keyring.so
    # end of pam-auth-update config

## 4.6. 安全認證

| 注意
這裡的資訊也許不夠完全滿足你的安全需求，但這也是一個好的開始.

### 4.6.1. 網際網路密碼安全

許多流行的傳輸層服務，互動資訊使用純文字的密碼認證。這是非常差的方式，通過公共的網際網路傳輸純文字密碼，密碼能夠被截獲到。你能夠執行這些服務，使用 "Transport Layer Security" (TLS) 或它的前身, "Secure Sockets Layer" (SSL) ，通過加密來使包括密碼在內的整個通訊更加安全。

表格 4.7. 安全和不安全的服務埠列表

不安全的服務名 | 埠 | 安全的服務名 | 埠
--- | --- | --- | ---
www (http) | 80 | https | 443
smtp (郵件) | 25 | ssmtp (smtps) | 465
ftp-data | 20 | ftps-data | 989
ftp | 21 | ftps | 990
telnet | 23 | telnets | 992
imap2 | 143 | imaps | 993
pop3 | 110 | pop3s | 995
ldap | 389 | ldaps | 636

加密消耗 CPU 時間。作為對 CPU 有益的替代方案，你可以保持使用純文字通訊，僅僅使用安全認證協議加密密碼，比如說：POP 使用"Authenticated Post Office Protocol" (APOP)，SMTP 和 IMAP 使用 "Challenge-Response Authentication Mechanism MD5" (CRAM-MD5)。（你的郵件客戶端通過網際網路上你的郵件伺服器傳送郵件時，最近流行使用新的遞交埠 587 來代替傳統的 SMTP 埠 25，這樣可以避免在使用 CRAM-MD5 認證自己時，網路提供商阻塞 25 埠。）

### 4.6.2. 安全 Shell

安全 Shell (SSH) 程式使用安全認證來提供不安全網路上兩個不可信任主機之間的安全加密通訊。它由 OpenSSH 客戶端, `ssh`(1), 和 OpenSSH 後臺背景程式（daemon）, `sshd`(8)組成.SSH 使用埠轉發特性，可以給 POP 和 X 之類的不安全的協議通訊建立隧道，使其可以在網際網路上安全傳輸。

客戶端可以使用如下方式來認證自己：基於主機的認證、公鑰認證、質疑應答認證、密碼認證。使用公鑰認證，可以實現遠端免密碼登入。參見 節 6.3, “伺服器遠端存取和工具 (SSH)”.

### 4.6.3. 網際網路額外的安全方式

即使你執行 Secure Shell (SSH) 和 Point-to-point tunneling protocol (PPTP) 這樣的安全服務，在網際網路上，仍然有機會使用野蠻暴力猜測密碼攻擊進入。 使用防火牆策略 (參見 節 5.7, “Netfilter 網路過濾框架”)，並和下面的安全工具一起，可以提升安全形勢。

表格 4.8. 提供額外安全方式的工具列表

軟體包 | 流行度 | 大小 | 說明
--- | --- | --- | ---
`knockd` | V:0, I:1 | 110 | 小的 port-knock 後臺守護程序（daemon） `knockd`(1) 和客戶端 `knock`(1)
`fail2ban` | V:95, I:106 | 2191 | 禁用造成多個認證錯誤的 IP
`libpam-shield` | V:0, I:0 | 115 | 把嘗試猜測密碼的遠端攻擊者關在外面

### 4.6.4. root 密碼安全

為阻止人們使用 root 許可權存取你的機器，你需要做下面的操作。

- Prevent physical access to the system storage device (HDD / SSD / ...)

- 鎖住 UEFI/ BIOS 來阻止從可移動介質啟動

- 為 GRUB 互動式會話設定密碼

- 鎖住 GRUB 選單，禁止編輯

With physical access to the system storage device, resetting the password is relatively easy with following steps.

1. Move the system storage device to a PC with USB bootable UEFI/BIOS.

2. Boot system with a rescue media (see 節 3.2.2, “Linux live rescue system on USB”).

3. 用讀寫存取掛載根分割槽。

4. 編輯根分割槽的"`/etc/passwd`"檔案，使 `root` 帳號條目的第二段為空。

對於 `grub-rescue-pc` ，即使用緊急介質啟動的電腦，如果有編輯 GRUB 選單條目 (參見 節 3.1.2, “第二階段：引載加載程序”) 的許可權，在啟動時，使用下面的步驟更加簡單。

1. 使用核心參數啟動系統來修改一些事情，比如說，"`root=/dev/sda6 rw init=/bin/sh`".

2. 編輯 "`/etc/passwd`" 檔案，使 `root` 帳號條目的第二段為空。

3. 重啟系統。

系統的 root shell 現在可以無密碼存取了。

| 注意
一旦某人擁有 root shell 存取許可權，他能夠存取任何內容，並可以重設系統上的任何密碼。此外，他可以使用 `john` 和 `crack` 等軟體包的暴力破解工具來比較所有使用者的密碼 (參見 節 9.5.11, “系統安全性和完整性檢查”)。被破解的密碼，可以用來和其它系統進行比較。

為避免這些相關問題，僅有的理論上的軟體解決方案是使用 dm-crypt 和 initramfs (參見 節 9.9, “資料加密提示”)加密 root 分割槽(或 "`/etc`" 分割槽) 。這樣的話，你總是需要密碼來啟動系統。

## 4.7. 其它的存取控制

在密碼基於認證和檔案許可權之外，系統也有其它的訪問控制。

| 注意
參見 節 9.4.16, “Alt-SysRq 鍵” 來限制核心的安全警告金鑰（SAK）功能。

### 4.7.1. 訪問控制列表(ACLs)

訪問控制列表 ACL 是在 節 1.2.3, “檔案系統權限” 裡面解釋的普通許可權的一個超集。

在現代桌面環境中，你會遇到 ACL 行為。比如，當一個已經格式化的 USB 儲存裝置自動掛載到 "`/media/penguin/USBSTICK`"，一個普通使用者 `penguin` 能夠執行：

     $ cd /media/penguin
     $ ls -la
    total 16
    drwxr-x---+ 1 root    root    16 Jan 17 22:55 .
    drwxr-xr-x  1 root    root    28 Sep 17 19:03 ..
    drwxr-xr-x  1 penguin penguin 18 Jan  6 07:05 USBSTICK

在第 11 列的 "`+`" 表示 ACL 在使用。如果沒有 ACL，一個普通使用者 `penguin` 應該不能夠像這樣列出目錄內容，因為 `penguin` 不在 `root` 組。你能夠按如下方式檢視 ACL：

     $ getfacl .
    # file: .
    # owner: root
    # group: root
    user::rwx
    user:penguin:r-x
    group::---
    mask::r-x
    other::---

這裡：

- "`user::rwx`"、"`group::---`" 和 "`other::---`" 相應的為普通所有者、組和其它人的許可權。

- ACL "`user:penguin:r-x`" 執行普通使用者 `penguin` 有 "`r-x`" 許可權。這個能夠讓 "`ls -la`" 列出目錄內容。

- ACL "`mask::r-x`" 設定上層繫結許可權。

更多資訊參見 "POSIX Access Control Lists on Linux"、`acl`(5)、 `getfacl`(1) 和 `setfacl`。

### 4.7.2. sudo

`sudo`(8) 程式是為了使一個系統管理員可以給使用者受限的 root 許可權並記錄 root 活動而設計的。`sudo` 只需要一個普通使用者的密碼。安裝 `sudo` 軟體包並通過設定 “`/etc/sudoers`” 中的選項來使用它。參見 “`/usr/share/doc/sudo/examples/sudoers`” 和 節 1.1.12, “sudo 調配” 中的調配示例。

我將 `sudo` 用於單使用者系統（參見 節 1.1.12, “sudo 調配”）是為了防止自己可能做出的愚蠢行為。就我個人而言，我認為使用 `sudo` 會比使用 root 帳號作業系統來得好。例如，下列指令將 “`some_file`” 的擁有者改變為 “`my_name`”。

    $ sudo chown my_name some_file

當然如果你知道 root 密碼（比如自行安裝 Debian 的使用者所做的），任何使用者賬號都可以使用 “`su -c`” 讓任何指令以 root 執行。

### 4.7.3. PolicyKit

PolicyKit 是在類 Unix 作業系統中控制整個系統許可權的一個作業系統元件。

新的 GUI 圖形介面程式，在設計的時候，不是作為特權程序來執行。它們通過 PolicyKit 來和特權程序通訊，執行管理操作。

在 Debian 系統中，PolicyKit 限制了屬於 `sudo` 組的使用者帳號的這種操作。

參見 `polkit`(8)。

### 4.7.4. 限制存取某些服務端的服務

對系統安全而言，儘可能的禁用服務程式，是一個好的主意。網路服務是危險的。有不使用的服務，不管是直接由後臺背景程式（daemon）啟用，還是通過super-server 程式啟用，都被認為是安全風險。

許多程式,比如說 `sshd`(8), 使用基於 PAM 的存取控制。也還有許多方式來限制存取一些服務端的程式。

- 組態檔案: "`/etc/default/program_name`"

- 後臺守護程序（daemon）的 Systemd 服務單元配置

- PAM (Pluggable Authentication Modules)

- super-server 使用 "`/etc/inetd.conf`"

- TCP wrapper 使用 "`/etc/hosts.deny`" 和 "`/etc/hosts.allow`" , `tcpd`(8)

- Sun RPC" 使用 `/etc/rpc.conf`"

- `atd`(8) 使用 "`/etc/at.allow`" 和 "`/etc/at.deny`"

- `crontab`(1) 使用 "`/etc/cron.allow`" 和 "`/etc/cron.deny`"

- Network firewall 或netfilter 框架

參見 節 3.6, “系統管理”、節 4.5.1, “PAM 和 NSS 存取的組態檔案” 和 節 5.7, “Netfilter 網路過濾框架”。

| 提示
NFS 和其它基於 RPC 的程式，需要啟用 Sun RPC 服務。

| 提示
如果你遠端存取最新的 Debian 系統有問題，看下在"`/etc/hosts.deny`"裡是否存在"`ALL: PARANOID`"這樣討厭的調配，請把它註釋掉。(但是你必須注意這種行為所帶來的安全風險。)

### 4.7.5. Linux 安全特性

Linux 核心已經發展和支援在傳統的 UNIX 實現裡面沒有的安全特徵。

Linux 支援 擴充套件屬性，擴充套件了傳統的 UNIX 屬性 (參見 `xattr`(7))。

Linux 把傳統的超級使用者相關的特權分開到不同的單元，被稱為 `capabilities`(7)，它能夠獨立的啟用和停用。從 2.2 版本核心開始，Capabilities 是一個執行緒獨立的屬性。

Linux Security Module (LSM) 安全模組框架 提供了一個多方面的安全檢查機制，和新的核心擴充套件關聯。例如：

- AppArmor

- Security-Enhanced Linux (SELinux)

- Smack (Simplified Mandatory Access Control Kernel)

- Tomoyo Linux

這些擴充套件緊縮的權力模型比普通的類 Unix 安全模型策略更加嚴格，甚至 root 的權力也被限制。建議你閱讀 kernel.org 上的 Linux 安全模組（LSM）框架文件。

Linux 的 namespaces 封裝了一個全域性系統資源到一個抽象的概念，全域性系統資源在 namespace 內對程序可見，並且 namespace 有它們自己的全域性資源隔離例項。 對其它程序全域性資源的可見性的改變是，同一個 namespace 的成員可見，但是對非同一個 namespace 的其它程序不可見。從核心 5.6 版本起，有 8 種 namespaces (參見 `namespaces`(7), `unshare`(1), `nsenter`(1))。

在 Debian 11 Bullseye (2021) 中, Debian 使用 unified cgroup hierarchy（統一 cgroup 層級架構） (亦稱為 cgroups-v2)。

namespaces 同 cgroups 一起來隔離它們的程序，允許資源控制的使用示例是：

- Systemd。參見 節 3.3.1, “Systemd 初始化”。

- 沙盒環境。參見 節 7.7, “沙盒”。

- Linux 容器，比如 Docker、 LXC。參見 節 9.11, “虛擬化系統”。

這些功能不能夠透過 節 4.1, “一般的 Unix 認證” 實現。這些高階話題大部分超出了本介紹文件的範圍。

章 3. 系統初始化 |  | 章 5. 網絡設置