CentOS7 关闭SELinux详细步骤,临时+永久关闭
刚装完 CentOS 7,部署网站后发现目录权限明明对了,但还是 403 或文件访问被拒绝,十有八九是 SELinux 在搞鬼。这玩意儿对新手极不友好,建议直接关掉。
1. 先查看 SELinux 状态
getenforce
输出有三种可能:
Enforcing:强制模式(正在生效)Permissive:宽容模式(只警告不拦截)Disabled:已关闭
或者用详细命令:
sestatus
2. 临时关闭(重启后失效)
setenforce 0
执行完再 getenforce 确认一下,应该变成 Permissive。
注意:临时关闭不需要重启服务器,但重启后会恢复原来的状态。
3. 永久关闭(重启后依然生效)
编辑配置文件:
vi /etc/selinux/config
找到这一行:
SELINUX=enforcing
改成:
SELINUX=disabled
保存退出后,必须重启服务器才能生效:
reboot
4. 为什么要关 SELinux?
SELinux 是 Linux 的强制访问控制机制,理论上更安全,但对新手来说:
- 权限配对了还是访问不了
- Nginx 代理 PHP 一直 403
- 上传文件后权限不对
- 各种莫名其妙的拒绝访问
生产环境如果不是特别懂,建议直接关掉,省心。真要讲究安全,用防火墙就够了。
5. 常见坑
坑1:改了配置文件没重启
很多人改完 /etc/selinux/config 就以为关了,其实必须重启才生效。
坑2:setenforce 报错
如果 SELinux 本来就是 Disabled 状态,执行 setenforce 0 会报错,正常。
坑3:查看日志
如果想知道 SELinux 拦截了什么,可以看日志:
tail -f /var/log/audit/audit.log
遇到服务器、Nginx、MySQL 报错,可以加微信远程协助排查问题。
Linux查看服务器开放端口,netstat和ss命令使用教程
排查网站问题时,第一步经常是"看看端口到底开没开、哪个进程在监听"。Linux 下最常用的两个命令是 netstat 和 ss,下面整理最实用的用法。
一、netstat 命令(老系统常用)
1. 查看所有监听端口
netstat -tlnp
参数说明:
-t:TCP 端口-l:监听状态的端口-n:数字形式显示(不解析域名)-p:显示进程名和 PID
输出示例:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 5678/sshd
2. 查看某个端口是否被占用
netstat -tlnp | grep 80
如果有输出说明 80 端口正在被占用,后面会显示是什么进程。
3. 查看所有 UDP 端口
netstat -ulnp
二、ss 命令(新系统推荐,更快)
ss 是 netstat 的替代品,在服务器连接数很多时速度快很多。
1. 查看所有监听端口
ss -tlnp
用法和 netstat 几乎一样,参数相同。
2. 查看某个端口
ss -tlnp | grep 443
3. 查看所有已建立的连接
ss -tn state established
三、其他常用排查命令
1. 直接看某个端口的进程
lsof -i:80
这个最直观,直接告诉你 80 端口被哪个 PID 占用了。
2. 查看某个进程监听了哪些端口
lsof -i | grep nginx
四、常见场景
场景1:网站打不开,怀疑端口没开
netstat -tlnp | grep 80
没有输出说明 Nginx 没启动,或者端口配置错了。
场景2:端口被占用,想换端口
lsof -i:3306
kill -9 12345 # 杀掉占用进程
场景3:服务器卡,想看有多少连接
ss -tn state established | wc -l
五、netstat 找不到怎么办?
CentOS 7 最小化安装可能没有 netstat,安装一下:
yum install net-tools -y
或者直接用 ss 命令,系统默认自带。
遇到服务器、Nginx、MySQL 报错,可以加微信远程协助排查问题。
CentOS7 firewalld开放80、443端口永久生效命令
CentOS 7 默认使用 firewalld 作为防火墙管理工具。很多新手搭建网站后发现外网访问不了,90% 都是因为 80、443 端口没开放。下面是完整的操作步骤,照抄就能用。
1. 先确认防火墙状态
systemctl status firewalld
如果显示 active (running) 说明防火墙正在运行,需要继续下面的操作。如果是 inactive 那就是防火墙没开,问题不在这里。
2. 开放 80 端口(HTTP)
firewall-cmd --zone=public --add-port=80/tcp --permanent
参数说明:
--zone=public:作用域为公共区域--add-port=80/tcp:开放 80 端口,TCP 协议--permanent:永久生效,不加这个重启服务器就失效了
3. 开放 443 端口(HTTPS)
firewall-cmd --zone=public --add-port=443/tcp --permanent
4. 一次性开放多个端口
如果需要同时开放多个端口,可以一条命令搞定:
firewall-cmd --zone=public --add-port=80/tcp --add-port=443/tcp --permanent
5. 重载防火墙使配置生效
⚠️ 重点:开放端口后必须重载,否则不生效!
firewall-cmd --reload
6. 查看已开放的端口
确认一下端口有没有真正开放成功:
firewall-cmd --list-ports
正常会输出类似:
80/tcp 443/tcp
7. 常用其他端口开放命令
SSH 端口(默认22,建议改成别的):
firewall-cmd --zone=public --add-port=22/tcp --permanent
MySQL 端口(如果需要远程连接数据库):
firewall-cmd --zone=public --add-port=3306/tcp --permanent
Redis 端口:
firewall-cmd --zone=public --add-port=6379/tcp --permanent
8. 移除/关闭已开放的端口
如果某个端口不需要了,想关掉:
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --reload
常见坑
-
加了
--permanent还是不生效?
忘记firewall-cmd --reload了。永久配置写入后必须重载才会加载到运行时。 -
端口开放了还是访问不了?
检查云服务商的安全组(阿里云/腾讯云/华为云都有这个东西),防火墙和安全组是两层,都要开。 -
firewalld 命令找不到?
CentOS 7 最小化安装可能没装,执行yum install firewalld -y安装。 -
临时开放端口(重启就失效)
去掉--permanent参数就是临时开放,重启或 reload 后自动关闭。
遇到服务器、Nginx、MySQL 报错,可以加微信远程协助排查问题。
Nginx 日志分析技巧
Nginx 日志分析技巧
Nginx 日志是排查问题、分析流量的重要工具。学会看日志,网站问题排查效率翻倍。
1. 日志位置
# 默认访问日志
/var/log/nginx/access.log
# 默认错误日志
/var/log/nginx/error.log
可以在 nginx.conf 里自定义:
access_log /var/log/nginx/www.access.log;
error_log /var/log/nginx/www.error.log;
2. 日志格式
默认日志格式:
127.0.0.1 - - [04/Oct/2026:10:00:00 +0800] "GET / HTTP/1.1" 200 612 "https://www.baidu.com/" "Mozilla/5.0..."
各字段含义:
- IP 地址
- 请求时间
- 请求方法和路径
- 状态码
- 响应大小
- 来源页面
- User-Agent
3. 常用分析命令
# 查看访问量前10的IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head 10
# 查看访问量前10的页面
awk '{print $7}' access.log | sort | uniq -c | sort -nr | head 10
# 查看状态码分布
awk '{print $9}' access.log | sort | uniq -c | sort -nr
# 查看 404 请求
grep ' 404 ' access.log
# 查看 502 错误
grep ' 502 ' access.log
4. 排查问题
排查 502 错误:
grep ' 502 ' access.log | tail 20
排查慢请求:
开启慢日志:
slow_request_log /var/log/nginx/slow.log;
slow_request_time 5s;
排查爬虫:
grep 'Baiduspider' access.log
grep 'Googlebot' access.log
5. 流量统计
# 今天总访问量
grep '04/Oct/2026' access.log | wc -l
# 今天总流量
grep '04/Oct/2026' access.log | awk '{sum+=$10} END {print sum/1024/1024 " MB"}'
# 每小时访问量
awk '{print $4}' access.log | cut -d: -f2 | uniq -c
6. 日志切割
日志太大要切割,用 logrotate:
# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
notifempty
create 0640 nginx adm
postrotate
systemctl reload nginx
endscript
}
7. 常用工具
- GoAccess:实时日志分析工具
- ELK:Elasticsearch + Logstash + Kibana
- Zabbix:监控告警
总结
Nginx 日志分析核心:
- 位置:/var/log/nginx/
- 命令:awk + sort + uniq
- 排查:看状态码、看慢请求
- 切割:用 logrotate
学会这些,日常日志分析基本够用了。
Linux 防火墙配置技巧
Linux 防火墙配置技巧
服务器安全第一步就是配好防火墙,只开需要的端口,其他全关。
1. firewalld(CentOS 7+ 默认)
# 查看状态
firewall-cmd --state
# 查看已开放端口
firewall-cmd --list-ports
# 开放端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
# 开放多个端口
firewall-cmd --permanent --add-port=8000-9000/tcp
# 开放指定 IP 访问
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' port protocol='tcp' port=3306 accept"
# 重载配置(必须重载才生效)
firewall-cmd --reload
# 删除端口
firewall-cmd --permanent --remove-port=8080/tcp
2. ufw(Ubuntu 默认)
# 查看状态
ufw status
# 开启防火墙
ufw enable
# 允许 SSH
ufw allow 22
# 允许 80 和 443
ufw allow 80
ufw allow 443
# 允许指定 IP
ufw allow from 192.168.1.100 to any port 3306
# 拒绝某个 IP
ufw deny from 1.2.3.4
# 删除规则
ufw delete allow 8080
3. iptables(经典)
# 查看规则
iptables -L -n
# 允许 22 端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许 80 端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 默认拒绝其他
iptables -P INPUT DROP
# 保存规则(CentOS)
service iptables save
4. 安全建议
- 只开必要端口:SSH、HTTP、HTTPS,其他全关
- SSH 改端口:不要用默认 22,改成其他端口
- 限制 SSH 登录 IP:只允许你的 IP 登录 SSH
- 数据库不对外暴露:MySQL、Redis 只允许本地访问
- 定期查看日志:/var/log/secure 看有没有暴力破解
5. 常用端口速查
- 22:SSH
- 80:HTTP
- 443:HTTPS
- 3306:MySQL
- 6379:Redis
- 8080:应用端口
总结
Linux 防火墙核心:
- CentOS 用 firewalld
- Ubuntu 用 ufw
- 只开必要端口
- 数据库不对外暴露
- SSH 限制 IP 访问
配好防火墙,服务器安全提升一大截。
Linux 文件权限详解
Linux 文件权限详解
Linux 权限是服务器安全的基础,搞懂权限,服务器才不会乱。
1. 查看权限
用 ls -l 查看文件权限:
ls -l file.txt
-rw-r--r-- 1 user group 1024 Oct 4 10:00 file.txt
开头10个字符就是权限:
- 第1个:文件类型(- 普通文件,d 目录)
- 第2-4个:所有者权限
- 第5-7个:所属组权限
- 第8-10个:其他人权限
2. 三种权限
- r(读)= 4
- w(写)= 2
- x(执行)= 1
数字加起来就是权限值:
- 7 = 4+2+1 = rwx
- 6 = 4+2 = rw-
- 5 = 4+1 = r-x
- 4 = 4 = r--
3. 修改权限 chmod
# 给所有者加执行权限
chmod u+x file.txt
# 给所有人只读权限
chmod 444 file.txt
# 所有者读写执行,组和其他人只读
chmod 744 file.txt
4. 修改所有者 chown
# 修改文件所有者
chown user:group file.txt
# 递归修改目录
chown -R user:group /data/www
5. 常用权限
- 普通文件:644(所有者读写,其他人只读)
- 目录:755(所有者读写执行,其他人读执行)
- 脚本文件:755(所有者能执行)
6. 安全建议
- 网站目录不要用 root 所有者
- 上传目录禁止执行权限
- 配置文件权限设为 600,只有所有者能读
总结
Linux 权限核心就是三组(所有者、组、其他人)× 三种(读、写、执行),用数字表示就是 r=4、w=2、x=1。搞懂这个,日常权限管理基本够用了。
Linux 进程管理命令
Linux 进程管理常用命令
服务器上跑了多少进程?哪个进程占内存多?怎么杀进程?这些命令必须会。
1. 查看进程
# 查看所有进程
ps aux
# 查找指定进程
ps aux | grep nginx
# 实时查看
top
2. top 命令详解
top 是最常用的进程查看工具:
- 第一行:系统负载
- 第二行:任务数
- 第三行:CPU 使用率
- 第四行:内存使用
- 第五行:Swap 使用
按 q 退出,按 k 杀进程。
3. 杀进程
# 按 PID 杀
kill 1234
# 强制杀
kill -9 1234
# 按名字杀
pkill nginx
# 杀掉所有同名进程
killall nginx
4. 查看端口占用
# 查看端口被谁占了
netstat -tlnp | grep 80
# 或者用 ss
ss -tlnp | grep 80
5. 查看进程树
# 查看进程父子关系
pstree
# 查看某个进程的子进程
pstree -p 1234
6. 后台运行
# 后台运行
nohup ./script.sh &
# 查看后台任务
jobs
# 把任务调到前台
fg %1
7. 查看资源占用
# 内存占用排行
ps aux --sort=-%mem | head
# CPU 占用排行
ps aux --sort=-%cpu | head
总结
日常运维就这几个命令:ps、top、kill、netstat、nohup。学会这些,服务器进程管理基本够用了。
Linux 常用命令:从文件操作到进程管理的完整指南
前言
Linux 是后端开发的必修课。很多新手面对黑窗口就发怵,其实只要掌握常用命令,日常开发就够用了。本文整理最常用的 Linux 命令。
一、文件操作
1. 查看目录
# 列出当前目录文件
ls
# 详细信息
ls -l
# 包括隐藏文件
ls -la
# 按时间排序
ls -lt
2. 切换目录
# 进入目录
cd /home/user
# 回到上一级
cd ..
# 回到用户主目录
cd ~
# 回到上次目录
cd -
3. 创建目录
# 创建目录
mkdir test
# 递归创建多级目录
mkdir -p a/b/c
4. 创建文件
# 创建空文件
touch test.txt
# 写入内容
echo "hello" > test.txt
# 追加内容
echo "world" >> test.txt
5. 复制文件
# 复制文件
cp test.txt test2.txt
# 复制目录
cp -r dir1 dir2
6. 移动/重命名
# 移动文件
mv test.txt /tmp/
# 重命名
mv old.txt new.txt
7. 删除文件
# 删除文件
rm test.txt
# 删除目录
rm -rf dir1
警告:rm -rf 很危险,一定要确认路径!
二、查看文件内容
1. cat
# 查看整个文件
cat test.txt
2. less
# 分页查看
less test.log
# 快捷键:
# 空格:下一页
# b:上一页
# /关键字:搜索
# q:退出
3. head / tail
# 看前 10 行
head -10 test.txt
# 看后 10 行
tail -10 test.txt
# 实时看日志(最常用)
tail -f /var/log/nginx/access.log
三、查找文件
1. find
# 按文件名查找
find / -name "nginx.conf"
# 按大小查找(大于 100M)
find / -size +100M
# 按修改时间查找(7 天内修改的)
find / -mtime -7
2. grep
# 在文件里搜索
grep "error" test.log
# 不区分大小写
grep -i "error" test.log
# 显示行号
grep -n "error" test.log
# 递归搜索目录
grep -r "function" /var/www/
# 配合管道使用
ps aux | grep nginx
四、系统状态
1. 查看进程
# 所有进程
ps aux
# 查找进程
ps aux | grep nginx
2. 杀死进程
# 按 PID 杀
kill 1234
# 强制杀
kill -9 1234
# 按名字杀
pkill nginx
3. 查看端口
# 查看所有监听端口
netstat -tlnp
# 查看某个端口
netstat -tlnp | grep 80
4. 查看磁盘
# 磁盘使用情况
df -h
# 当前目录大小
du -sh .
# 每个子目录大小
du -sh *
5. 查看内存
free -h
五、权限管理
1. chmod
# 给文件加执行权限
chmod +x test.sh
# 755:所有者可读写执行,其他人可读执行
chmod 755 test.sh
# 644:所有者可读写,其他人只读
chmod 644 test.txt
2. chown
# 修改文件所有者
chown www:www test.txt
六、压缩解压
1. tar
# 压缩
tar -zcvf website.tar.gz /var/www/html
# 解压
tar -zxvf website.tar.gz
2. zip
# 压缩
zip -r website.zip /var/www/html
# 解压
unzip website.zip
七、网络相关
1. curl
# 访问网页
curl https://www.baidu.com
# 查看响应头
curl -I https://www.baidu.com
# 发 POST 请求
curl -X POST -d "name=张三" https://api.example.com
2. wget
# 下载文件
wget https://example.com/file.zip
八、常用快捷键
| 快捷键 | 作用 |
|---|---|
| Ctrl + C | 终止当前命令 |
| Ctrl + Z | 暂停当前命令 |
| Ctrl + D | 退出终端 |
| Tab | 自动补全 |
| Ctrl + R | 搜索历史命令 |
| !命令 | 执行最近一次的某命令 |
九、常用操作速查
| 操作 | 命令 |
|---|---|
| 看文件 | cat / less / tail -f |
| 找文件 | find / grep |
| 看进程 | ps aux / top |
| 看端口 | netstat -tlnp |
| 看磁盘 | df -h / du -sh |
| 改权限 | chmod / chown |
总结
Linux 常用命令的核心要点:
- 文件操作:ls / cd / mkdir / cp / mv / rm
- 查看内容:cat / less / tail -f
- 查找搜索:find / grep
- 进程管理:ps / kill / netstat
- 系统状态:df / du / free
不用背,用多了自然就记住了。先把这几个常用的练熟,日常开发基本够用。
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 条全部过一遍。
安全不是一次性的工作,而是一个持续的过程。定期更新系统、监控日志、检查异常,才能真正把服务器守好。