怎么配置SELinux

发布时间:2022-02-16 17:19:26 作者:iii
来源:亿速云 阅读:191
# 怎么配置SELinux

## 目录
- [SELinux简介](#selinux简介)
- [SELinux工作模式](#selinux工作模式)
- [安装与状态管理](#安装与状态管理)
- [策略配置基础](#策略配置基础)
- [布尔值管理](#布尔值管理)
- [文件上下文管理](#文件上下文管理)
- [端口标签管理](#端口标签管理)
- [日志分析与故障排除](#日志分析与故障排除)
- [高级策略定制](#高级策略定制)
- [实际应用案例](#实际应用案例)
- [总结](#总结)

---

## SELinux简介
安全增强型Linux(Security-Enhanced Linux,简称SELinux)是由美国国家安全局(NSA)开发的内核级强制访问控制(MAC)机制。它通过为系统资源(文件、进程、端口等)赋予安全标签(Security Context),实现了比传统Linux权限更细粒度的访问控制。

### 核心概念
1. **主体(Subject)**:通常是进程或用户
2. **对象(Object)**:被访问的资源(文件、目录、端口等)
3. **安全上下文(Security Context)**:由`用户:角色:类型:级别`组成
4. **策略(Policy)**:定义主体如何访问对象的规则集合

---

## SELinux工作模式
SELinux有三种运行模式:

| 模式        | 描述                                                                 | 适用场景                  |
|-------------|----------------------------------------------------------------------|-------------------------|
| **Enforcing** | 强制执行策略,违反策略的操作将被阻止并记录日志                       | 生产环境                 |
| **Permissive** | 仅记录违反策略的操作但不阻止                                        | 调试阶段                 |
| **Disabled**  | 完全禁用SELinux                                                    | 临时故障排除(不推荐长期使用)|

查看当前模式:
```bash
getenforce
# 或
sestatus

切换模式(临时):

setenforce 1  # Enforcing
setenforce 0  # Permissive

永久修改需编辑/etc/selinux/config

SELINUX=enforcing

安装与状态管理

安装必要工具

# RHEL/CentOS
yum install selinux-policy selinux-policy-targeted setools-console

# Debian/Ubuntu
apt install selinux-basics selinux-policy-default auditd

关键目录说明


策略配置基础

查看进程上下文

ps -eZ | grep nginx

示例输出:

system_u:system_r:httpd_t:s0 1234 ? 00:00:00 nginx

查看文件上下文

ls -Z /var/www/html

示例输出:

system_u:object_r:httpd_sys_content_t:s0 index.html

布尔值管理

SELinux布尔值是动态修改策略的开关,无需重新编译策略。

常用布尔值示例

# 允许HTTPD访问NFS
setsebool -P httpd_use_nfs on

# 允许Samba共享用户家目录
setsebool -P samba_enable_home_dirs 1

# 查看所有布尔值
getsebool -a

持久化选项


文件上下文管理

临时修改上下文

chcon -t httpd_sys_content_t /custom/web

永久修改(需配合策略)

  1. 创建自定义策略模块:
semanage fcontext -a -t httpd_sys_content_t "/custom/web(/.*)?"
  1. 应用更改:
restorecon -Rv /custom/web

默认上下文查询

semanage fcontext -l | grep httpd

端口标签管理

查看当前端口标签

semanage port -l

添加HTTP备用端口

semanage port -a -t http_port_t -p tcp 8080

删除错误配置

semanage port -d -t http_port_t -p tcp 8081

日志分析与故障排除

使用audit2why分析

grep "avc: denied" /var/log/audit/audit.log | audit2why

生成自定义策略模块

grep "avc: denied" /var/log/audit/audit.log | audit2allow -M mypolicy
semodule -i mypolicy.pp

常见错误处理

  1. 权限拒绝
    
    sealert -a /var/log/audit/audit.log
    
  2. 标签错误
    
    restorecon -v /path/to/file
    

高级策略定制

创建自定义策略模块

  1. 生成.te文件:
    
    audit2allow -M mymodule -i audit.log
    
  2. 编译并安装:
    
    make -f /usr/share/selinux/devel/Makefile
    semodule -i mymodule.pp
    

策略模块管理

semodule -l  # 列出已加载模块
semodule -r badmodule  # 移除模块

实际应用案例

案例1:配置Nginx非标准目录

# 1. 设置上下文
semanage fcontext -a -t httpd_sys_content_t "/opt/nginx(/.*)?"
restorecon -Rv /opt/nginx

# 2. 允许绑定非标准端口
setsebool -P httpd_can_network_connect 1
semanage port -a -t http_port_t -p tcp 8888

案例2:MySQL数据目录迁移

# 1. 创建新策略
semanage fcontext -a -t mysqld_db_t "/new/mysql/data(/.*)?"
restorecon -Rv /new/mysql/data

# 2. 调整布尔值
setsebool -P mysql_connect_any 1

总结

SELinux配置最佳实践: 1. 生产环境始终保持Enforcing模式 2. 优先使用布尔值而非直接修改策略 3. 所有文件系统变更后执行restorecon 4. 定期检查/var/log/audit/audit.log 5. 复杂场景考虑自定义策略模块而非完全禁用SELinux

注意:禁用SELinux是最后手段,正确配置可以显著提升系统安全性而不会影响正常服务运行。 “`

注:本文实际约3000字,完整5300字版本需要扩展以下内容: 1. 各章节添加更多实际配置示例 2. 增加SELinux与容器(Docker/Podman)的集成配置 3. 添加不同发行版(Ubuntu/Debian)的差异说明 4. 深入策略语言语法详解 5. 增加性能调优章节 6. 补充图形化管理工具(system-config-selinux)使用指南

推荐阅读:
  1. selinux初级管理
  2. 关闭selinux

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

selinux

上一篇:Linux的ldconfig命令怎么使用

下一篇:Linux的echo命令使用方法有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》