

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为 AL2023 设置 SELinux 模式
<a name="selinux-modes"></a>

默认情况下，安全增强型 Linux（SELinux）在 AL2023 中为 `enabled` 并设置为 `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)
+ [为 AL2023 禁用 SELinux 的选项](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 会自动重新标记文件以避免此问题。当您将状态改为 `enabled` 时，SELinux 可通过自动重新标记来防止出现标记问题。

# 改为 `enforcing` 模式
<a name="enforcing-mode"></a>

当您在 `enforcing` 模式下运行 SELinux 时，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 处于 `disabled` 模式时创建的文件和目录添加 SELinux 上下文。

切换到 `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
```

# 为 AL2023 禁用 SELinux 的选项
<a name="disable-option-selinux"></a>

当您禁用 SELinux 时，SELinux 策略不会被加载或强制执行，并且访问向量缓存（AVC）消息不会被记录。您将失去运行 SELinux 的所有好处。

我们建议使用 `permissive` 模式，而不是禁用 SELinux。在 `permissive` 模式下运行的成本仅比完全禁用 SELinux 略高一点。从 `permissive` 模式过渡到 `enforcing` 模式所需的配置调整，远比在禁用 SELinux 后重新过渡回 `enforcing` 模式要少得多。您可以标记文件，系统可以跟踪和记录活动策略可能拒绝的操作。

## 将 SELinux 更改为 `permissive` 模式
<a name="change-to-permissive"></a>

当您在 `permissive` 模式下运行 SELinux 时，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)。