3.4 KiB
Executable File
3.4 KiB
Executable File
CentOS7 SELinux 配置
安全增强型 Linux (Security-Enhanced Linux)
简介
SELinux 是 Linux 内核的安全模块,实现最小权限原则。
- 即使程序以 root 运行,也受 SELinux 策略限制
- 限制进程只能访问其需要的资源
- 防止漏洞被利用后"为所欲为"
工作模式
| 模式 | 说明 |
|---|---|
| Enforcing | 强制模式,违规行为被阻止并记录 |
| Permissive | 宽容模式,违规行为仅记录 |
| Disabled | 关闭 SELinux |
查看状态
# 查看当前模式
getenforce
# 详细状态
sestatus
# 查看版本
selinuxenabled && echo "Enabled" || echo "Disabled"
临时切换模式
# 切换到强制模式
sudo setenforce 1
# 切换到宽容模式
sudo setenforce 0
⚠️ 需要安装
setroubleshoot并启用auditd服务
永久配置
编辑 /etc/selinux/config:
sudo vim /etc/selinux/config
SELINUX=enforcing # 强制模式
# SELINUX=permissive # 宽容模式
# SELINUX=disabled # 关闭
SELINUXTYPE=targeted # 目标策略
修改后需要重启系统。
安全上下文
查看安全上下文
# 查看文件/目录上下文
ls -Z /etc/hosts
# 查看进程上下文
ps auxZ | grep nginx
# 查看用户的上下文
id -Z
安全上下文格式
user:role:type:级别
修改安全上下文
# 修改文件上下文
sudo chcon -t httpd_sys_content_t /var/www/html
# 恢复默认上下文
sudo restorecon -Rv /var/www/html
# 查看默认上下文规则
semanage fcontext -l | grep /var/www
常用管理命令
# 安装管理工具
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 无法访问目录
# 查看日志
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 无法访问文件
# 开启 FTP 上下文
sudo setsebool -P ftpd_full_access on
问题3:MySQL 无法访问自定义目录
# 添加 MySQL 目录上下文
sudo chcon -R -t mysqld_db_t /data/mysql
问题4:SSH 密钥无法使用
# 设置 SSH 密钥上下文
sudo chcon -R -t ssh_key_t ~/.ssh
查看日志
# 实时查看拒绝日志
sudo tail -f /var/log/audit/audit.log | grep denied
# 查看 SELinux 消息
sudo dmesg | grep selinux
# 查看 setroubleshoot 日志
cat /var/log/messages | grep setroubleshoot
快速参考
# 查看状态
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),等需要时再深入研究。