服务器安全加固怎么做?端口、账号、权限的加固清单

来源:互联网 时间:2026-09-29

一台新服务器刚上线,默认配置往往把门敞开着:一堆用不上的端口在监听、root 能直接远程登录、普通用户随手就能提权。攻击者扫描全网 IP 是常态,开放的服务越多,被攻破的概率越高。安全加固不是上线后才想的事,而是开机的第一件事。

下面这份清单按“端口—账号—权限”三层来,每一项都能直接照做,做完用最后一节的命令验一遍,确认该关的关了、该锁的锁了。

一、端口收敛:只留必须开的

先用 ss 看一眼当前在监听什么。很多服务器默认开着 23(telnet)、111(rpc)、6379(redis 无密码)这类高危或不必要的端口。原则只有一条:业务用不到的端口一律关掉,对外只暴露 80、443 和你的 SSH 端口。下面这段用防火墙把入站默认策略设为拒绝,再只放开需要的端口。要改的是把 2222 换成你实际使用的 SSH 端口。

# 用 firewalld 收敛端口:默认拒绝,只放行必要服务
#!/bin/bash
systemctl enable --now firewalld
firewall-cmd --set-default-zone=public
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --permanent --zone=public --add-port=2222/tcp # 你的SSH端口
firewall-cmd --permanent --zone=public --remove-service=telnet
firewall-cmd --reload
echo "防火墙已收敛,仅放行 http/https/ssh

跑完用 firewall-cmd --list-all 看一眼,确认 services 里只有 http、https、ssh,没有 telnet 之类多余项。redis、mysql 这类只允许本地访问的服务,配置里绑定 127.0.0.1,绝不对公网开放。

二、账号与 SSH 加固

禁止 root 直接远程登录,是性价比最高的一步。建一个普通运维账号,给它 sudo 权限,把 SSH 改为密钥登录并关掉密码登录。下面这段改 SSH 配置:禁用 root 登录、禁用密码认证、限定允许登录的用户。改完务必另开一个终端测试能登录再断开原连接,避免把自己锁在门外。

# 修改 /etc/ssh/sshd_config 关键项后重载
# 编辑前先 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
PermitRootLogin no
PasswordAuthentication no
AllowUsers opsuser
Port 2222
# 改完执行:
# systemctl restart sshd
# 注意:确认密钥能登录后再关密码,否则会进不去

配置生效前一定要先在另一个窗口用新账号和密钥登录成功,再结束当前会话。这是无数人踩过的坑:一重启 sshd,自己反而登不进去了。

三、文件权限与 sudo 收敛

网站目录不能让 Web 进程有写权限,否则上传漏洞就能改你的程序文件。一般把站点目录归属给运维账号,Web 用户(如 www-data)只给读和执行。sudo 也要收口:只给运维账号必要的命令,不要在 sudoers 里写 NOPASSWD:ALL 这种无限制放行。下面这段把站点目录权限设为 755、文件 644,并仅对上传目录放开写。

# 站点目录权限基线:目录755、文件644,上传目录单独放开
#!/bin/bash
SITE="/var/www/example.com"
chown -R opsuser:www-data "$SITE"
find "$SITE" -type d -exec chmod 755 {} \;
find "$SITE" -type f -exec chmod 644 {} \;
chmod 755 "$SITE/uploads" # 仅上传目录需要写
echo "权限基线已设置,Web用户无程序写权限

设完后用 ls -l 抽查几个目录,确认 Web 用户组没有写权限。这样即便程序有上传漏洞,攻击者也难以篡改核心代码。

验证加固效果

三步验证:一是从外部 nmap 扫自己,确认只看到该开的端口;二是尝试用 root 加密码登录,应该被拒;三是用普通账号 sudo 一条命令,确认提权受控。下面这段在本机跑,列出仍在监听的 TCP 端口,和你的预期清单逐一对账。

# 列出本机所有监听端口,核对是否只该开的还在
#!/bin/bash
ss -tlnp | awk 'NR==1 || /LISTEN/ {print $4, $6}'
# 期望输出仅含 :80 :443 :2222 及 127.0.0.1 上的内部服务

核对清单:公网可见端口只有 80、443、SSH;redis/mysql 只绑 127.0.0.1;root 不能远程登;sudo 受限制。四关都过,这台机器才算初步立住了。

相关阅读:

《服务器被扫端口只是时间问题,这几项不加固迟早出事》

《网站备份怎么做?本地加异地双备份与恢复演练》

《网站加载速度优化方法:从TTFB到首屏逐层拆解》

相关文章

标签:

A5创业网 版权所有