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 否,需重启 保持关闭

五、常见坑

  1. 只 setenforce 0 不重启改文件:重启后又自动开启,问题复现;
  2. 改了配置不重启:getenforce 仍显示 Enforcing,以为没改成功;
  3. 改错变量名:是 SELINUX= 而不是 SELINUXTYPE=,后者是策略类型别动;
  4. 急着排查时建议先临时关:验证是不是SELinux拦截,确认后再决定永久关,避免一刀切损失安全性;
  5. 某些面板/容器环境改完仍受影响,可用 sestatus 复核当前模式。

总结

临时关用 setenforce 0,永久关改 /etc/selinux/config 为 disabled 后重启,最后用 getenforce 确认。排查403、写入失败时,SELinux是经常被忽略的一层。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-20 07:25 

Nginx监听端口配置

Nginx监听端口配置

引言

listen是server块的第一行指令,决定Nginx在哪个端口接收请求。一个server监听一个端口加域名组合,多站点靠server_name区分,多端口靠listen叠加。配错端口是最常见的502和无法访问根源。

基础HTTP监听

server {
    listen 80;
    server_name example.com;
    root /var/www/site;
    index index.html;
}

监听80端口,匹配example.com域名的请求进这个站点。

HTTPS监听

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
}

443必须加ssl关键字,同时配证书和私钥路径。

监听多个端口

server {
    listen 80;
    listen 8080;
    server_name example.com;
}

一个server块写多行listen,80和8080都走同一套配置。

只监听指定IP

listen 127.0.0.1:8080;

只绑回环地址,外部访问不到,适合内部管理接口。

80跳转到443

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

单独一个80 server做永久跳转,把HTTP请求引导到HTTPS。

默认服务器

server {
    listen 80 default_server;
}

default_server指定未匹配域名时的兜底站点,防直接用IP访问暴露默认页。

注意事项

  • 端口冲突先ss -tlnp查占用,别盲目改;
  • 443漏写ssl会导致证书不生效;
  • 云服务器还要在安全组放行对应端口;
  • listen不带IP默认绑0.0.0.0全部网卡;
  • 改端口后先nginx -t再reload;
  • 301跳转的旧URL参数用$request_uri保留。

总结

listen 80配HTTP,listen 443 ssl配HTTPS并带证书,多行listen监听多端口,IP:端口限定绑定网卡,80 server用return 301跳HTTPS,default_server做域名兜底。改前ss查占用、nginx -t校验、安全组放行,绑定IP时注意内外网可达性,跳转用$host和$request_uri保住完整地址。


emer 发布于  2026-10-20 07:10 

Linux怎么修改主机名,永久生效方法

前言

新装好的服务器默认主机名是 localhost 或者一串乱七八糟的字符,不好区分。怎么改成自己想要的名字,而且重启后还生效?本文讲一下。

查看当前主机名

先看看现在主机名是什么:

hostname

输出类似:

localhost.localdomain

修改主机名的方法

方法一:hostnamectl(推荐,CentOS7+)

这是最方便的方法,一条命令永久生效:

hostnamectl set-hostname 新主机名

比如改成 web-server:

hostnamectl set-hostname web-server

注意: 主机名只能用小写字母、数字、横杠(-),不能用下划线、中文、空格。

方法二:修改配置文件

编辑 /etc/hostname 文件:

vi /etc/hostname

把里面的内容改成新的主机名,保存退出。

然后重启生效:

reboot

或者不重启,手动让它生效:

hostname 新主机名

方法三:临时修改

只改当前运行时的主机名,重启后就恢复:

hostname 新主机名

注意: 这个只是临时生效,重启后还是原来的。

修改后验证

重新登录一下 SSH,或者执行:

bash

让当前 shell 生效,然后看:

hostname

应该显示新的主机名了。

同时修改 hosts

有些服务(比如 MySQL)会用到主机名,最好同时把 /etc/hosts 也改一下:

vi /etc/hosts

找到类似这一行:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

在后面加上新主机名:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 web-server

保存退出。

常见坑

坑1:改了主机名但命令行没变

执行了 hostnamectl set-hostname,但命令行前面还是显示旧的。

原因: 当前 shell 会话没刷新。

解决: 退出重新登录 SSH,或者执行 bash 开个新 shell。

坑2:重启后又变回原来的

改了主机名,重启之后又变回去了。

原因: 只执行了 hostname 新名字(临时修改),没改配置文件。

解决: 用 hostnamectl set-hostname 新名字 永久修改。

坑3:主机名有大写或者下划线

主机名用了大写字母或者下划线,有些服务报错。

原因: 主机名规范要求只能用小写字母、数字、横杠。

正确写法: web-server-01
错误写法: Web_Server_01

坑4:改了主机名导致服务连不上

改了主机名之后,某些服务连不上数据库或者其他服务。

原因: 那些服务里配置的还是旧主机名。

解决: 把相关服务的配置里的主机名也改过来,或者同时改 /etc/hosts 做映射。

总结

方法 命令 是否永久
hostnamectl hostnamectl set-hostname 新名字 是(推荐)
修改 /etc/hostname 编辑文件后重启 是
hostname hostname 新名字 否(临时)

推荐用 hostnamectl set-hostname,一条命令搞定,永久生效。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-6 07:58 
'); })();