搬瓦工 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 进入官网购买。