

# 通过安全增强型 Linux (SELinux) 设置 CloudWatch 代理
<a name="CloudWatch-Agent-SELinux"></a>

如果您的系统启用了安全增强型 Linux (SELinux)，则必须应用适当的安全策略来确保 CloudWatch 代理在受限的域中运行。

## 先决条件
<a name="CloudWatch-Agent-SELinux-prerequisites"></a>

在为代理配置 SELinux 之前，请检查以下**先决条件**：

**完成与 SELinux 搭配使用 CloudWatch 代理的先决条件**

1. 安装以下 SELinux 策略开发包（如果还没有执行此操作）：

   ```
   sudo yum update
   sudo yum install -y selinux-policy-devel policycoreutils-devel rpm-build git
   ```

1. 运行以下命令，查看系统的 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
   ```

   如果 SELinux 当前处于禁用状态，请执行以下操作：

   1. 输入以下命令以打开 SELinux 文件：

      ```
      sudo vi /etc/selinux/config
      ```

   1. 将 `SELINUX` 参数设置为 `permissive` 或 `enforcing`。例如：

      ```
      SELINUX=enforcing
      ```

   1. 保存文件，并重新启动系统以应用更改。

      ```
      sudo reboot
      ```

1. 确保 CloudWatch 代理正在作为 `systemd` 服务运行。这是在受限的 SELinux 域中使用它的必要条件。

   ```
   sudo systemctl status amazon-cloudwatch-agent
   ```

   如果代理配置正确，则输出应表明其状态为 `active (running)` 并在启动时为 `enabled`。

## 为代理配置 SELinux
<a name="CloudWatch-Agent-SELinux-configure"></a>

完成先决条件后，便可配置 SELinux。

**为 CloudWatch 代理配置 SELinux**

1. 输入以下命令，克隆适用于 CloudWatch 代理的 SELinux 策略：

   ```
   git clone https://github.com/aws/amazon-cloudwatch-agent-selinux.git
   ```

1. 导航到克隆的存储库，然后输入以下命令以更新脚本权限：

   ```
   cd amazon-cloudwatch-agent-selinux  
   chmod +x amazon_cloudwatch_agent.sh
   ```

1. 输入以下命令以使用 `sudo` 运行 SELinux 策略安装脚本。执行过程中，脚本会提示您输入 `y` 或 `n` 以允许自动重启。此次重启可确保代理转换到正确的 SELinux 域。

   ```
   sudo ./amazon_cloudwatch_agent.sh
   ```

1. 如果 CloudWatch 代理尚未重启，则请将其重启以确保转换到正确的 SELinux 域：

   ```
   sudo systemctl restart amazon-cloudwatch-agent
   ```

1. 输入以下命令，验证 CloudWatch 代理是否正在受限的域中运行。

   ```
   ps -efZ | grep amazon-cloudwatch-agent
   ```

   如果代理被正确限制，则输出应指示 Selinux 限制的域，而不是 `unconfined_service_t`。

   以下是代理被正确限制时的输出示例。

   ```
   system_u:system_r:confined_t:s0 root 1234 1 0 12:00 ? 00:00:10 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent
   ```

配置 SELinux 后，可以继续配置代理以收集指标、日志和跟踪信息。有关更多信息，请参阅 [手动创建或编辑 CloudWatch 代理配置文件](CloudWatch-Agent-Configuration-File-Details.md)。