美国服务器如何配置Linux服务器的SELinux/AppArmor?
一、 美国服务器SELinux 配置
SELinux 通过为每个进程和系统资源打上标签,并基于一套严格的策略规则来决定访问是否被允许。
1. 核心概念
** enforcing**:强制模式。违反策略的行为会被阻止并记录到日志。
** permissive**:宽容模式。违反策略的行为只会被记录,但不会阻止。用于故障排查。
** disabled:关闭模式。不推荐**,因为重启后才能重新开启。
** 上下文**:文件和进程上的安全标签,格式为
user:role:type:level(如system_u:object_r:httpd_sys_content_t:s0)。
2. 基本管理与状态查看
bash
# 查看当前状态getenforce# 或者使用 sestatussestatus# 临时切换模式(从 Enforcing 切换到 Permissive,用于测试)setenforce 0# 临时切换模式(从 Permissive 切换到 Enforcing)setenforce 1# 永久修改模式,编辑 /etc/selinux/config 文件sudo nano /etc/selinux/config# 将 SELINUX= 改为 enforcing, permissive 或 disabled
3. 故障排查与日志分析
当服务因 SELinux 问题无法正常工作时(如无法访问文件、无法绑定端口),按以下步骤排查:
a. 查看 SELinux 日志
SELinux 拒绝消息记录在 /var/log/audit/audit.log(如果 auditd 运行)或 /var/log/messages。
b. 使用 sealert 工具sealert 可以将原始的 audit.log 信息转换成易于理解的建议。
bash
# 安装 setroubleshoot(包含 sealert)sudo yum install setroubleshoot # RHEL/CentOSsudo dnf install setroubleshoot # Fedora# 分析最新的 SELinux 拒绝信息sudo sealert -a /var/log/audit/audit.log
c. 使用 ausearch 查询
bash
# 搜索今天所有的 SELinux 拒绝信息sudo ausearch -m avc -ts today
4. 常用配置与修复命令
a. 修复文件上下文
最常见的问题:文件放在了错误的位置,其 SELinux 上下文不正确。
bash
# 查看文件或目录的上下文ls -Z /var/www/html/# 恢复文件默认上下文(常用修复命令)sudo restorecon -Rv /var/www/html/# 手动设置文件上下文(模仿一个参考文件)sudo chcon -t httpd_sys_content_t /path/to/file
b. 允许服务访问非标准端口
例如,让 HTTPD 监听 8080 端口。
bash
# 查看当前允许的端口semanage port -l | grep http_port_t# 添加 8080 端口到 HTTP 端口列表sudo semanage port -a -t http_port_t -p tcp 8080# 如果 semanage 命令不存在,安装 policycoreutils-python-utilssudo yum install policycoreutils-python-utils
c. 使用布尔值进行灵活控制
SELinux 布尔值是一些可以快速开关的规则开关。
bash
# 查看所有与 httpd 相关的布尔值getsebool -a | grep httpd# 查看特定布尔值的状态getsebool httpd_enable_homedirs# 设置布尔值(允许 httpd 访问用户家目录)sudo setsebool -P httpd_enable_homedirs on# -P 选项表示永久生效(Persistent)
5. 自定义策略模块
如果 sealert 建议你生成一个自定义策略,可以这样做:
bash
# 1. 根据 audit.log 拒绝信息生成一个模块sudo ausearch -m avc -ts recent | audit2allow -M my_policy# 2. 这会生成两个文件:my_policy.pp(编译后的策略)和 my_policy.te(源码)# 3. 安装自定义策略模块sudo semodule -i my_policy.pp
注意:audit2allow 可能会产生过于宽松的策略,务必检查生成的 .te 文件内容,确保你理解它允许了什么。
二、 AppArmor 配置
AppArmor 采用路径限制的方式,为每个应用程序定义一个配置文件,规定它可以读、写、执行哪些文件。
1. 核心概念与状态查看
bash
# 查看 AppArmor 状态sudo aa-status# 查看哪些配置文件处于强制模式 / 抱怨模式sudo aa-status | grep -E "(enforce|complain)"
2. 配置文件模式
** enforce**:强制模式。违反配置文件的操作会被阻止。
** complain**:抱怨模式。违反配置文件的操作会被允许,但记录到日志。用于调试。
** unconfined**:无配置模式。程序不受 AppArmor 限制。
3. 配置目录结构
/etc/apparmor.d/:主配置文件目录。/etc/apparmor.d/disable/:用于存放被禁用配置文件的符号链接。
4. 常用管理命令
a. 切换配置文件模式
bash
# 将一个配置文件设为抱怨模式(例如,用于 nginx)sudo aa-complain /etc/apparmor.d/usr.sbin.nginx# 将一个配置文件重新设为强制模式sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx# 禁用某个配置文件sudo ln -s /etc/apparmor.d/usr.sbin.nginx /etc/apparmor.d/disable/sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.nginx # 从内核移除# 重新启用某个配置文件sudo rm /etc/apparmor.d/disable/usr.sbin.nginxsudo apparmor_parser /etc/apparmor.d/usr.sbin.nginx # 加载到内核
b. 重新加载配置文件
修改配置文件后,需要重新加载。
bash
# 重新加载单个配置文件sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx# 重新加载所有配置文件sudo systemctl reload apparmor
5. 创建与修改配置文件
a. 使用 aa-genprof 自动生成
这是为未知程序创建配置文件的推荐方法。
bash
# 1. 将目标程序设为抱怨模式,或者如果它没有配置文件,先创建一个空配置sudo aa-genprof /path/to/binary# 2. 在另一个终端中,充分使用该程序的所有功能(读、写、网络等)# 3. 回到第一个终端,按 'S' 键扫描日志# 4. AppArmor 会提示你为每个访问请求选择权限 (Allow, Deny, Ignore等)# 5. 完成后,选择 'S' 保存配置文件
b. 手动编辑配置文件
配置文件通常以二进制路径命名(如 /usr/sbin/nginx 的配置文件是 usr.sbin.nginx)。
一个简单的配置文件示例:
text
#include <tunables/global>
/usr/sbin/nginx {
#include <abstractions/apache2-common>
#include <abstractions/base>
#include <abstractions/nis>
capability net_bind_service,
capability setgid,
capability setuid,
/etc/nginx/** r,
/usr/sbin/nginx mr,
/var/log/nginx/** w,
/run/nginx.pid w,
# 允许绑定 80 和 443 端口
network inet tcp,
}c. 使用 aa-logprof 分析日志并更新配置
当程序在 complain 模式下运行时,其行为会被记录。使用此工具可以基于日志更新配置文件。
bash
sudo aa-logprof
三、 SELinux vs. AppArmor:如何选择?
| 特性 | SELinux | AppArmor |
|---|---|---|
| 哲学 | 默认拒绝,基于标签 | 基于路径的访问控制 |
| 学习曲线 | 较陡峭,概念复杂 | 相对平缓,易于理解 |
| 配置方法 | 上下文、端口、布尔值、自定义模块 | 每个程序的独立配置文件 |
| 主要发行版 | RHEL, CentOS, Fedora, Rocky Linux | Debian, Ubuntu, SUSE, OpenSUSE |
| 灵活性 | 非常强大和精细,但配置复杂 | 简单直观,对特定应用配置方便 |
四、 最佳实践总结
不要禁用它们! 这是最重要的建议。学会使用它们,而不是关闭。
从 Permissive/Complain 模式开始:在部署新服务时,先在此模式下运行,收集日志,再切换到强制模式。
善用工具:使用
sealert,audit2why,aa-genprof,aa-logprof等工具来辅助配置和故障排查。优先使用布尔值/内置规则:在修改原始策略前,先看看是否有现成的布尔值或抽象规则可以使用。
测试充分:任何策略修改后,都要彻底测试应用程序的功能,确保没有破坏正常业务。
通过以上步骤,你可以系统地配置和管理 SELinux 或 AppArmor,从而为你的 Linux 服务器构建一道坚实的安全防线。


扫码关注
微信好友
关注抖音