215 lines
3.4 KiB
Markdown
Executable File
215 lines
3.4 KiB
Markdown
Executable File
# 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
|
||
```
|
||
|
||
---
|
||
|
||
## 常见问题处理
|
||
|
||
### 问题1:Apache/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
|
||
```
|
||
|
||
### 问题2:FTP 无法访问文件
|
||
|
||
```bash
|
||
# 开启 FTP 上下文
|
||
sudo setsebool -P ftpd_full_access on
|
||
```
|
||
|
||
### 问题3:MySQL 无法访问自定义目录
|
||
|
||
```bash
|
||
# 添加 MySQL 目录上下文
|
||
sudo chcon -R -t mysqld_db_t /data/mysql
|
||
```
|
||
|
||
### 问题4:SSH 密钥无法使用
|
||
|
||
```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),等需要时再深入研究。
|