CentOS7关闭SELinux详细步骤,临时与永久关闭
前言
CentOS7 默认开启 SELinux,它是一套强制访问控制机制,经常和自行搭建的 Nginx、PHP-FPM、网站目录权限冲突,表现为页面 403、文件写不进去、代理被拦截。生产环境如果不想精细配置策略,最直接的做法就是关闭。本篇区分临时关闭和永久关闭,并给出验证方法。
一、先查看SELinux当前状态
# 查看运行状态
getenforce
# 返回 Enforcing 表示强制开启,Permissive 只记录不拦截,Disabled 已关闭
sestatus
# 也可看配置文件
grep SELINUX= /etc/selinux/config
二、临时关闭(重启后恢复)
# 切换为宽容模式,立即生效但重启复原
setenforce 0
# 验证
getenforce
# 返回 Permissive 即临时关闭成功
setenforce 1 可重新切回 Enforcing。临时关闭适合先定位问题,不想动配置时使用。
三、永久关闭(重启仍生效)
编辑配置文件:
vi /etc/selinux/config
把这一行:
SELINUX=enforcing
改为:
SELINUX=disabled
保存后必须重启服务器才完全生效:
reboot
重启后执行 getenforce 返回 Disabled 即永久关闭成功。
四、两种方式区别速记
| 方式 | 命令/改文件 | 是否立即生效 | 重启后 |
|---|---|---|---|
| 临时 | setenforce 0 | 是 | 恢复为Enforcing |
| 永久 | /etc/selinux/config 改disabled | 否,需重启 | 保持关闭 |
五、常见坑
- 只 setenforce 0 不重启改文件:重启后又自动开启,问题复现;
- 改了配置不重启:getenforce 仍显示 Enforcing,以为没改成功;
- 改错变量名:是
SELINUX=而不是SELINUXTYPE=,后者是策略类型别动; - 急着排查时建议先临时关:验证是不是SELinux拦截,确认后再决定永久关,避免一刀切损失安全性;
- 某些面板/容器环境改完仍受影响,可用
sestatus复核当前模式。
总结
临时关用 setenforce 0,永久关改 /etc/selinux/config 为 disabled 后重启,最后用 getenforce 确认。排查403、写入失败时,SELinux是经常被忽略的一层。
遇到问题加QQ23979811 协助处理
Nginx默认站点配置
Nginx默认站点配置
引言
直接用IP或未匹配到server_name的域名访问时,Nginx会落到默认站点。装好Nginx自带的欢迎页就是默认server,安全上建议改掉,避免暴露版本或被扫描利用。
默认站点如何确定
同一端口下,第一个server块、或带default_server标记的就是默认站点:
server {
listen 80 default_server;
server_name _;
root /usr/share/nginx/html;
index index.html;
}
server_name用_占位,表示匹配任意未命中的主机名。
配置占位拒绝页
对外只暴露正式站点时,默认站点直接返回444或简单403:
server {
listen 80 default_server;
server_name _;
return 444;
}
444是Nginx特有,直接断开连接,不返回内容。
隐藏版本号
http {
server_tokens off;
}
避免错误页暴露Nginx版本,减少针对性漏洞扫描。
自定义默认首页
server {
listen 80 default_server;
server_name _;
root /var/www/default;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
多端口默认
HTTPS同理,443也要配default_server:
server {
listen 443 ssl default_server;
server_name _;
# 自签或占位证书,否则握手失败
return 444;
}
注意事项
- 一台机器同端口只能有一个default_server;
- 不配默认站,未匹配域名会落到第一个server,可能串站点;
- 改完nginx -t校验再reload;
- 云主机IP直扫建议默认站返回444,不暴露首页;
- 区分default_server和servername ,前者是优先级标记;
- SSL默认站必须有证书,否则浏览器握手报错。
总结
默认站点由default_server或同端口首个server决定,用server_name _占位。安全做法是把默认站返回444拒绝、server_tokens off隐藏版本,443也要配默认拒绝站,避免IP直扫串到正式站点。改完务必-t校验再reload。
Linux 服务器安全加固:10个必须做的基础配置
前言
刚装完的 Linux 服务器就像没锁门的房子,任何人都能进来。本文整理了 10 个最基础但最重要的安全加固配置,帮你把门锁上。
1. 修改 SSH 端口,禁止 root 登录
默认 22 端口是黑客扫描的首选目标,改个端口能挡掉 90% 的自动扫描。
# 编辑 sshd 配置
vi /etc/ssh/sshd_config
# 修改端口
Port 22222
# 禁止 root 登录
PermitRootLogin no
# 重启 sshd
systemctl restart sshd
注意:改完端口后,记得在防火墙和安全组里放行新端口,否则你自己也进不去了。
2. 使用 SSH 密钥登录,禁用密码登录
密码再复杂也扛不住暴力破解,密钥登录才是正道。
# 本地生成密钥对(在你自己的电脑上执行)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 把公钥传到服务器
ssh-copy-id -p 22222 user@your_server_ip
# 服务器上禁用密码登录
vi /etc/ssh/sshd_config
PasswordAuthentication no
3. 配置防火墙,只开必要端口
# 只开 SSH、HTTP、HTTPS
ufw default deny incoming
ufw default allow outgoing
ufw allow 22222/tcp # SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw enable
4. 自动安全更新
# Ubuntu/Debian
apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
# CentOS/RHEL
dnf install dnf-automatic
systemctl enable --now dnf-automatic.timer
5. 创建普通用户,配置 sudo
永远不要用 root 跑日常操作,创建一个普通用户,需要时用 sudo 提权。
# 创建用户
adduser deploy
# 加入 sudo 组
usermod -aG sudo deploy
6. 禁用不必要的服务
# 查看正在运行的服务
systemctl list-unit-files --type=service --state=enabled
# 禁用不需要的服务
systemctl disable --now avahi-daemon
systemctl disable --now cups
7. 配置 fail2ban 防暴力破解
apt install fail2ban
# 配置 sshd 防护
vi /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 22222
maxretry = 3
bantime = 3600
systemctl restart fail2ban
8. 设置密码策略
# 编辑 pwquality 配置
vi /etc/security/pwquality.conf
minlen = 12 # 最小长度
dcredit = -1 # 至少1个数字
ucredit = -1 # 至少1个大写字母
lcredit = -1 # 至少1个小写字母
ocredit = -1 # 至少1个特殊字符
9. 监控日志,定期检查
# 查看登录失败记录
grep "Failed password" /var/log/auth.log
# 查看当前登录用户
w
# 查看最近登录记录
last -n 20
10. 定期备份,备份再备份
安全加固做得再好,也不如有一份能快速恢复的备份。
# 简单的文件备份脚本
tar -czf backup_$(date +%Y%m%d).tar.gz /var/www/
把备份文件同步到异地存储,别只放在同一台服务器上。
总结
这 10 条配置不需要高深的技术,但每一条都能实实在在地降低服务器被攻破的风险。建议新服务器装好后,第一件事就是把这 10 条全部过一遍。
安全不是一次性的工作,而是一个持续的过程。定期更新系统、监控日志、检查异常,才能真正把服务器守好。