

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定 AL2023 的 SELinux 模式
<a name="selinux-modes"></a>

根據預設，安全性增強型 Linux (SELinux) 是 `enabled`，並設定為 AL2023 的 `permissive` 模式。在寬容模式中，會記錄權限遭拒的情形，但不會強制執行。SELinux 是核心功能和公用程式的集合，為核心的主要子系統提供了強大、靈活且強制的存取控制 (MAC) 架構。

SELinux 提供增強的機制，可以根據機密性和完整性需求強制執行資訊分離。這種資訊分離可減少竄改和略過應用程式安全機制的威脅。另外還限制惡意或有缺陷的應用程式可能造成的損壞。

SELinux 包含一組樣本安全政策組態檔案，旨在滿足日常安全目標。

如需 SELinux 特性和功能的詳細資訊，請參閱 [SELinux Notebook](https://github.com/SELinuxProject/selinux-notebook/blob/main/src/toc.md)和[政策語言](https://github.com/SELinuxProject/selinux-notebook/blob/main/src/policy_languages.md)。

**Topics**
+ [AL2023 的預設 SELinux 狀態和模式](default-SELinux-modes-states.md)
+ [變更為 `enforcing` 模式](enforcing-mode.md)
+ [停用 SELinux for AL2023 的選項](disable-option-selinux.md)

# AL2023 的預設 SELinux 狀態和模式
<a name="default-SELinux-modes-states"></a>

對於 AL2023，SELinux 預設是 `enabled`，並設定為 `permissive` 模式。在 `permissive` 模式中，會記錄權限遭拒的情形，但不會強制執行。

**getenforce** 或 **sestatus** 命令會告知您目前的 SELinux 狀態、政策和模式。

將預設狀態設為 `enabled` 和 `permissive` 時，**getenforce** 命令會傳回 `permissive`。

此**sestatus**命令會傳回 SELinux 狀態和目前的 SELinux 政策，如下列範例所示：

```
$ sestatus
SELinux status:                 enabled
  SELinuxfs mount:                /sys/fs/selinux
  SELinux root directory:         /etc/selinux
  Loaded policy name:             targeted
  Current mode:                   permissive
  Mode from config file:          permissive
  Policy MLS status:              enabled
  Policy deny_unknown status:     allowed
  Memory protection checking:     actual (secure)
  Max kernel policy version:      33
```

當您在 `permissive` 模式下執行 SELinux 時，使用者可能會不正確地標記檔案。當您以 `disabled` 狀態執行 SELinux 時，檔案不會被標記。當您變更為 `enforcing` 模式時，不正確或未標記的檔案都可能導致問題。

SELinux 會自動重新標記檔案，以避免此問題。SELinux 會在您將狀態變更為 `enabled` 時，透過自動重新標籤來防止標籤問題。

# 變更為 `enforcing` 模式
<a name="enforcing-mode"></a>

當您SELinux在 `enforcing` 模式下執行時，SELinux公用程式是`enforcing`設定的政策。 會根據政策的規則允許或拒絕存取，以SELinux控管特定應用程式的功能。

若要尋找目前的SELinux模式，請執行 `getenforce`命令。

```
getenforce
Permissive
```

## 編輯設定檔案以啟用 `enforcing` 模式
<a name="config-file-enforcing"></a>

若要將 模式變更為 `enforcing`，請使用下列步驟。

1. 編輯 `/etc/selinux/config` 檔案以變更為 `enforcing` 模式。`SELINUX` 設定應如下所示。

   ```
   SELINUX=enforcing
   ```

1. 重新啟動系統以完成對 `enforcing` 模式的變更。

   ```
   $ sudo reboot
   ```

在下一次開機時， 會SELinux重新標記系統中的所有檔案和目錄。 SELinux也會新增當 SELinux為 時所建立之檔案和目錄SELinux的內容`disabled`。

變更為 `enforcing` 模式後， SELinux可能會因為不正確或缺少SELinux政策規則而拒絕某些動作。您可以使用下列命令檢視SELinux拒絕的動作。

```
$ sudo ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts recent
```

## 使用 cloud-init 來啟用 `enforcing` 模式
<a name="cloud-init-enforcing"></a>

或者，當您啟動執行個體時，請將下列 `cloud-config` 作為使用者資料傳遞以啟用 `enforcing` 模式。

```
#cloud-config
selinux: 
  mode: enforcing
```

預設情況下，此設定會導致執行個體重新啟動。為了提高穩定性，建議您重新啟動執行個體 但是，您可以依照偏好輸入下列 `cloud-config`，以跳過重新開機。

```
#cloud-config
selinux:
  mode: enforcing
  selinux_no_reboot: 1
```

# 停用 SELinux for AL2023 的選項
<a name="disable-option-selinux"></a>

當您停用 時SELinux，不會載入或強制執行SELinux政策，也不會記錄存取向量快取 (AVC) 訊息。您會失去執行 的所有優點SELinux。

建議您使用 `permissive` 模式SELinux，而不是停用 。在 `permissive` 模式下執行的成本比SELinux完全停用的成本高出一點。從 `permissive` 模式轉換到 `enforcing` 模式需要的組態調整，遠比停用 後轉換回 `enforcing` 模式少得多SELinux。您可以標記檔案，然後系統可以追蹤和記錄作用中原則可能已拒絕的動作。

## SELinux 變更為 `permissive` 模式
<a name="change-to-permissive"></a>

當您SELinux在 `permissive` 模式下執行時，不會強制執行SELinux政策。在 `permissive`模式下， SELinux會記錄 AVC 訊息，但不拒絕操作。您可以使用這些 AVC 訊息進行故障診斷、偵錯和SELinux政策改進。

若要SELinux變更為允許模式，請使用下列步驟。

1. 編輯 `/etc/selinux/config` 檔案以變更為 `permissive` 模式。`SELINUX` 值應如下所示。

   ```
   SELINUX=permissive
   ```

1. 重新啟動系統以完成對 `permissive` 模式的變更。

   ```
   sudo reboot
   ```

## 停用 SELinux
<a name="disable-selinux"></a>

當您停用 時SELinux，不會載入或強制執行SELinux政策，也不會記錄 AVC 訊息。您會失去執行 的所有優點SELinux。

若要停用 SELinux，請使用下列步驟。

1. 確認套件`grubby`已安裝。

   ```
   rpm -q grubby
   grubby-version
   ```

1. 設定開機載入器，以將 `selinux=0` 新增到核心命令行。

   ```
   sudo grubby --update-kernel ALL --args selinux=0
   ```

1. 重新啟動系統。

   ```
   sudo reboot
   ```

1. 執行 `getenforce `命令以確認 SELinux為 `Disabled`。

   ```
   $ getenforce
   Disabled
   ```

如需 的詳細資訊SELinux，請參閱[SELinux筆記本](https://github.com/SELinuxProject/selinux-notebook/blob/main/src/toc.md)和[SELinux組態](http://selinuxproject.org/page/Guide/Mode#SELinux_Config)。