前言
服务器安全加固它们的核心目的都是为了增加攻击者的成本,并减少被自动化脚本攻破的概率
-
禁用 Root 用户登录
- 增加暴力破解的难度(最主要原因)
- 权限审计与责任追溯(区分团队用户)
- 防止误操作(最小权限原则)
-
修改 SSH 默认端口 (Port 22)
- 规避自动化扫描脚本(主要作用)
- 保持/var/log/secure日志干净
第一步:创建一个拥有sudo权限的普通用户
在禁用Root登录之前,你必须确保有一个普通用户可以登录并执行管理员命令(sudo)。
useradd -m adminuser
passwd adminuser
# 输入两次新密码
使用 SSH 密钥对登录(最强推荐)
目前最主流的SSH验证方式。在你的电脑生成一对密钥(公钥和私钥),把公钥放到服务器上。
- 配置: 在 /etc/ssh/sshd_config 中设置:
PubkeyAuthentication yes # 开启密钥登录
PasswordAuthentication no # 彻底关闭密码登录(!)
- 注意:在关闭密码登录前,务必确认密钥登录已经配置成功。
授予 sudo 权限:
关闭 sudo 密码: (可选-取消 sudo 密码虽然方便,但降低了安全性)
visudo
- 这会打开 /etc/sudoers 文件。
- 默认编辑器可能是 nano(下方有快捷键提示)或 vi/vim
你需要找到合适的位置(通常在文件末尾添加即可),根据你的需求选择以下 一种 方式:
方式 A:只针对特定用户(推荐)
假设你的用户名是 adminuser,在文件最后一行添加:
adminuser ALL=(ALL:ALL) NOPASSWD: ALL
- 请将 adminuser 替换为你实际的用户名。
- NOPASSWD: 是关键指令(注意冒号和空格)。
方式 B:针对整个用户组(例如 wheel 或 sudo 组)
如果你希望所有拥有管理员权限的用户都不需要密码:
找到类似下面这一行(以 % 开头表示组):
- CentOS / RHEL (通常是 %wheel):
## 找到这一行
%wheel ALL=(ALL) ALL
## 修改为:
%wheel ALL=(ALL) NOPASSWD: ALL
- Ubuntu/ Debian (通常是 %sudo):
## 找到这一行
%sudo ALL=(ALL:ALL) ALL
## 修改为:
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
保存并退出
-
如果你是在 nano 编辑器中 (屏幕下方有 ^O Write Out 等提示):
- 按 Ctrl + O,然后按 Enter(回车)保存。
- 按 Ctrl + X 退出。
-
如果你是在 vi 或 vim 编辑器中:
- 按 Esc 键退出编辑模式。
- 输入 :wq 并按回车(保存并退出)。
验证
无需重启服务,立即生效。可以输入一个 sudo 命令测试:
sudo ls /root
如果直接列出了文件而没有提示输入密码,说明配置成功。
第二步:修改用户密码
如果你需要修改当前用户(包括root)或其他用户的密码。
- 修改当前登录用户的密码:
passwd
- 修改特定用户的密码 (需要root权限) :
passwd 用户名
# 例如: passwd root 或 passwd adminuser
第三步:修改SSH配置文件 (端口与Root登录)
SSH的主配置文件通常位于 /etc/ssh/sshd_config。
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
vim /etc/ssh/sshd_config
修改 SSH ****端口: 找到 #Port 22 这一行。
禁用 Root 登录: 找到 PermitRootLogin 这一行。
保存并退出:
开启 SSH 空闲超时自动登出(常搭配使用-可选)
防止你离开电脑时,已经连接的SSH窗口被他人恶意操作。
- 做法:修改 /etc/ssh/sshd_config: (或者配置 TMOUT 环境变量 )
ClientAliveInterval 300 # 服务端每300秒向客户端发送一次心跳
ClientAliveCountMax 0 # 如果客户端没响应(或空闲),允许尝试0次后断开
- 作用:如果你去上厕所或下班忘记关终端,5分钟无操作后,连接会自动断开。
安装防暴力破解神器:Fail2Ban(可选)
Fail2Ban 是一个自动化保护工具,它会监控系统日志。
-
原理:如果检测到某个IP在短时间内连续输错密码 N 次(例如5次),它会立即修改防火墙规则,将这个IP封禁(Ban掉)一段时间(例如1小时或永久)。
-
安装:
- Ubuntu/Debian: sudo apt install fail2ban
- CentOS: sudo yum install fail2ban
-
作用:它是修改SSH端口的最佳搭档。即使你没改端口,有了Fail2Ban,暴力破解脚本试几次就被拉黑了,无法继续尝试
启用双因子认证 (可选)
给SSH登录加一把“动态锁”。
- 做法:在服务器安装 google-authenticator 模块。登录时,除了输入密码(或密钥),还需要输入手机 App(如 Google Authenticator 或 Microsoft Authenticator)上每30秒变化的 6 位数字验证码。
第四步:配置防火墙 (至关重要)
在 重启 SSH 服务之前,必须放行新 端口 ,否则你会被锁在外面!
根据你的操作系统选择对应的防火墙命令:
情况 A: 如果你是 CentOS 7/8/9 / RHEL (使用 firewalld)
firewall-cmd –permanent –add-port=2222/tcp
firewall-cmd –reload
# 安装管理工具 (如果没有)
yum install -y policycoreutils-python-utils # CentOS 8/Stream
# 或 yum install -y policycoreutils-python # CentOS 7
# 允许SSH使用新端口
semanage port -a -t ssh_port_t -p tcp 2222
情况 B: 如果你是 Ubuntu / Debian (使用 ufw)
ufw allow 2222/tcp
ufw reload
情况 C: 如果使用的是云服务器 (AWS, 阿里云, 腾讯云等)
- 务必去云服务商的控制台(网页端) ,找到“安全组”或“防火墙”设置。
- 添加一条入站规则:协议 TCP,端口 2222,源IP 0.0.0.0/0 (或指定你的IP)。
- 如果不做这一步,即使系统内部防火墙开了,外部也被云厂商拦截了。
第五步:重启 SSH 服务并验证
# CentOS / RHEL / Ubuntu / Debian 通用
systemctl restart sshd
验证 (关键步骤) :
ssh -p 2222 adminuser@你的服务器IP
结果测试:
历史命令记录优化(可选)
防止敏感信息泄露。
- 背景:你在终端输入的命令会被记录在 ~/.bash_history 中。如果你在命令里带了密码(比如 mysql -u root -p123456),这非常危险。
- 做法: 在 /etc/profile 或 ~/.bashrc 中设置:
export HISTTIMEFORMAT="%F %T " # 给历史记录加时间戳,方便审计
export HISTCONTROL=ignoreboth # 忽略空格开头的命令
- 技巧:如果你要输入敏感命令,在命令最前面加一个空格,这条命令就不会被记录到历史文件中。
总结:一套标准的加固方案
对于大多数生产环境服务器,做到以下 4 点通常就能阻挡绝大部分的攻击:
网硕互联帮助中心






评论前必须登录!
注册