搬瓦工 VPS SELinux 安全策略配置教程

SELinux(Security-Enhanced Linux)是由 NSA 开发并集成到 Linux 内核的强制访问控制(MAC)安全模块。与传统的自主访问控制(DAC)不同,SELinux 通过安全策略限制进程对系统资源的访问权限,即使攻击者获得了 root 权限,也无法突破 SELinux 策略的限制。本文将详细介绍如何在搬瓦工 VPS 上配置和管理 SELinux,提升服务器安全等级。

一、SELinux 基本概念

在深入配置之前,需要理解 SELinux 的几个核心概念:

  • 安全上下文(Security Context):每个进程、文件和端口都有一个安全上下文标签,格式为 用户:角色:类型:级别
  • 类型强制(Type Enforcement):SELinux 最主要的访问控制机制,通过类型标签决定进程能访问哪些资源。
  • 布尔值(Booleans):用于动态调整策略行为的开关,无需重新编译策略。
  • 策略模块(Policy Modules):可加载的策略规则集合,用于扩展或自定义访问控制规则。

SELinux 有三种运行模式:Enforcing(强制模式,拒绝违规访问并记录日志)、Permissive(宽容模式,仅记录不拒绝)和 Disabled(禁用模式)。

二、安装与启用 SELinux

2.1 CentOS / RHEL 系统

CentOS 和 RHEL 系统默认已安装 SELinux,只需确认状态:

sestatus

安装管理工具:

yum install policycoreutils policycoreutils-python-utils selinux-policy-targeted setroubleshoot-server -y

2.2 Ubuntu / Debian 系统

Ubuntu 默认使用 AppArmor,若需切换到 SELinux:

apt update
apt install selinux-basics selinux-policy-default auditd -y
selinux-activate
reboot

重启后系统会自动对文件系统进行标签标记,这个过程可能需要几分钟时间。

三、SELinux 模式管理

3.1 查看当前状态

# 查看简要状态
getenforce

# 查看详细状态
sestatus

3.2 临时切换模式

# 切换到强制模式
setenforce 1

# 切换到宽容模式
setenforce 0

临时切换在重启后会恢复为配置文件中的设置。

3.3 永久配置模式

编辑 SELinux 配置文件:

vi /etc/selinux/config

修改 SELINUX 参数为所需模式:

SELINUX=enforcing
SELINUXTYPE=targeted

修改后需要重启系统才能生效。建议先在 Permissive 模式下测试,确认无问题后再切换到 Enforcing 模式。

四、安全上下文管理

4.1 查看文件上下文

# 查看文件的安全上下文
ls -Z /var/www/html/

# 查看进程的安全上下文
ps auxZ | grep nginx

# 查看端口的安全上下文
semanage port -l | grep http

4.2 修改文件上下文

# 临时修改(重新标记后会恢复)
chcon -t httpd_sys_content_t /var/www/mysite/index.html

# 永久修改(添加到策略数据库)
semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?"
restorecon -Rv /srv/www

4.3 恢复默认上下文

# 恢复单个文件
restorecon -v /var/www/html/index.html

# 递归恢复整个目录
restorecon -Rv /var/www/

# 对整个文件系统重新标记
touch /.autorelabel
reboot

五、SELinux 布尔值配置

5.1 查看布尔值

# 查看所有布尔值
getsebool -a

# 查看特定布尔值
getsebool httpd_can_network_connect

# 查看带描述的布尔值
semanage boolean -l | grep httpd

5.2 修改布尔值

# 临时修改(重启后恢复)
setsebool httpd_can_network_connect on

# 永久修改
setsebool -P httpd_can_network_connect on
setsebool -P httpd_can_network_connect_db on
setsebool -P httpd_enable_homedirs on

5.3 常用 Web 服务器布尔值

# 允许 Apache/Nginx 连接网络(反向代理必需)
setsebool -P httpd_can_network_connect 1

# 允许 Apache/Nginx 连接数据库
setsebool -P httpd_can_network_connect_db 1

# 允许 Apache/Nginx 发送邮件
setsebool -P httpd_can_sendmail 1

# 允许读取用户主目录
setsebool -P httpd_enable_homedirs 1

六、端口管理

6.1 查看端口标签

semanage port -l | grep ssh
semanage port -l | grep http

6.2 添加自定义端口

# 允许 SSH 使用非标准端口
semanage port -a -t ssh_port_t -p tcp 2222

# 允许 HTTP 使用自定义端口
semanage port -a -t http_port_t -p tcp 8080

# 允许 HTTPS 使用自定义端口
semanage port -a -t http_port_t -p tcp 8443

6.3 删除自定义端口

semanage port -d -t http_port_t -p tcp 8080

七、自定义策略模块

7.1 使用 audit2allow 生成策略

当 SELinux 阻止了合法操作时,可以根据审计日志生成允许策略:

# 查看最近的 SELinux 拒绝日志
ausearch -m avc -ts recent

# 根据日志生成策略模块
ausearch -m avc -ts recent | audit2allow -M mypolicy

# 安装策略模块
semodule -i mypolicy.pp

7.2 查看和管理策略模块

# 列出已安装的策略模块
semodule -l

# 删除策略模块
semodule -r mypolicy

# 禁用策略模块
semodule -d mypolicy

# 启用策略模块
semodule -e mypolicy

八、SELinux 故障排查

8.1 使用 setroubleshoot 分析

# 安装 setroubleshoot
yum install setroubleshoot-server -y

# 查看最近的 SELinux 问题及建议
sealert -a /var/log/audit/audit.log

8.2 查看审计日志

# 查看所有 AVC 拒绝记录
ausearch -m avc

# 查看特定进程的拒绝记录
ausearch -m avc -c nginx

# 查看今天的拒绝记录
ausearch -m avc -ts today

8.3 常见问题解决

如果 Nginx 无法读取网站文件:

# 检查文件上下文是否正确
ls -Z /var/www/html/
# 应显示 httpd_sys_content_t 类型

# 如果不正确,修复上下文
restorecon -Rv /var/www/html/

如果 Nginx 无法作为反向代理连接后端:

setsebool -P httpd_can_network_connect 1

九、SELinux 与 Docker 配合

在运行 Docker 容器时,SELinux 需要特别配置:

# 查看 Docker 相关布尔值
getsebool -a | grep container

# 允许容器管理 cgroup
setsebool -P container_manage_cgroup 1

# 挂载卷时添加 SELinux 标签
docker run -v /host/path:/container/path:Z nginx

# :z 表示共享标签(多容器共享)
# :Z 表示私有标签(仅当前容器)

十、最佳实践

  • 不要随意禁用 SELinux:遇到问题时应排查原因,而不是直接关闭。
  • 先用 Permissive 模式测试:部署新服务时先在宽容模式下运行,收集日志后再切换到强制模式。
  • 使用 audit2allow 谨慎生成策略:不要盲目允许所有被拒绝的操作,仔细审查每条规则。
  • 定期检查审计日志:及时发现潜在的安全问题和策略配置错误。
  • 备份策略配置:在修改策略之前做好备份,方便回滚。

总结

SELinux 是 Linux 系统上最强大的安全增强机制之一,虽然配置相对复杂,但掌握后能够显著提升服务器的安全防护能力。在搬瓦工 VPS 上启用 SELinux 后,即使系统遭到入侵,攻击者也很难突破策略限制进行进一步操作。建议配合 防火墙配置OSSEC 入侵检测 一起使用,构建多层安全防线。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 进入官网购买。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。