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

3.4 KiB
Executable File
Raw Blame History

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

常见问题处理

问题1Apache/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

问题2FTP 无法访问文件

# 开启 FTP 上下文
sudo setsebool -P ftpd_full_access on

问题3MySQL 无法访问自定义目录

# 添加 MySQL 目录上下文
sudo chcon -R -t mysqld_db_t /data/mysql

问题4SSH 密钥无法使用

# 设置 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),等需要时再深入研究。