Files
chill_notes/Linux/CentOS/CentOS7 SELinux配置.md
2026-04-21 20:36:03 +08:00

215 lines
3.4 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CentOS7 SELinux 配置
> 安全增强型 Linux (Security-Enhanced Linux)
---
## 简介
SELinux 是 Linux 内核的安全模块,实现**最小权限原则**。
- 即使程序以 root 运行,也受 SELinux 策略限制
- 限制进程只能访问其需要的资源
- 防止漏洞被利用后"为所欲为"
---
## 工作模式
| 模式 | 说明 |
|------|------|
| **Enforcing** | 强制模式,违规行为被阻止并记录 |
| **Permissive** | 宽容模式,违规行为仅记录 |
| **Disabled** | 关闭 SELinux |
---
## 查看状态
```bash
# 查看当前模式
getenforce
# 详细状态
sestatus
# 查看版本
selinuxenabled && echo "Enabled" || echo "Disabled"
```
---
## 临时切换模式
```bash
# 切换到强制模式
sudo setenforce 1
# 切换到宽容模式
sudo setenforce 0
```
> ⚠️ 需要安装 `setroubleshoot` 并启用 `auditd` 服务
---
## 永久配置
编辑 `/etc/selinux/config`
```bash
sudo vim /etc/selinux/config
```
```ini
SELINUX=enforcing # 强制模式
# SELINUX=permissive # 宽容模式
# SELINUX=disabled # 关闭
SELINUXTYPE=targeted # 目标策略
```
修改后需要重启系统。
---
## 安全上下文
### 查看安全上下文
```bash
# 查看文件/目录上下文
ls -Z /etc/hosts
# 查看进程上下文
ps auxZ | grep nginx
# 查看用户的上下文
id -Z
```
### 安全上下文格式
```
user:role:type:级别
```
### 修改安全上下文
```bash
# 修改文件上下文
sudo chcon -t httpd_sys_content_t /var/www/html
# 恢复默认上下文
sudo restorecon -Rv /var/www/html
# 查看默认上下文规则
semanage fcontext -l | grep /var/www
```
---
## 常用管理命令
```bash
# 安装管理工具
sudo yum install setroubleshoot setools
# 查看 SELinux 布尔值
getsebool -a
# 查看特定布尔值
getsebool httpd_enable_homedirs
# 开启布尔值
sudo setsebool -P httpd_enable_homedirs on
# 查看端口上下文
semanage port -l | grep http
# 添加端口到上下文
sudo semanage port -a -t http_port_t -p tcp 8888
```
---
## 常见问题处理
### 问题1Apache/Nginx 无法访问目录
```bash
# 查看日志
sudo tail -f /var/log/audit/audit.log | grep denied
# 临时修复:关闭 SELinux
sudo setenforce 0
# 永久修复:设置正确上下文
sudo chcon -R -t httpd_sys_content_t /var/www/html
sudo chcon -R -t httpd_sys_rw_content_t /var/www/html/uploads
```
### 问题2FTP 无法访问文件
```bash
# 开启 FTP 上下文
sudo setsebool -P ftpd_full_access on
```
### 问题3MySQL 无法访问自定义目录
```bash
# 添加 MySQL 目录上下文
sudo chcon -R -t mysqld_db_t /data/mysql
```
### 问题4SSH 密钥无法使用
```bash
# 设置 SSH 密钥上下文
sudo chcon -R -t ssh_key_t ~/.ssh
```
---
## 查看日志
```bash
# 实时查看拒绝日志
sudo tail -f /var/log/audit/audit.log | grep denied
# 查看 SELinux 消息
sudo dmesg | grep selinux
# 查看 setroubleshoot 日志
cat /var/log/messages | grep setroubleshoot
```
---
## 快速参考
```bash
# 查看状态
sestatus
# 临时关闭
sudo setenforce 0
# 查看文件上下文
ls -Z filename
# 修改上下文
sudo chcon -t httpd_sys_content_t /path
# 查看布尔值
getsebool -a | grep keyword
# 开启布尔值
sudo setsebool -P boolean_name on
```
---
> 💡 **建议**:学习使用 SELinux它能让系统更安全。但如果暂时搞不懂先用宽容模式(permissive),等需要时再深入研究。