本文以 openEuler / CentOS 环境为例(也可在 Metasploitable 2 靶机上练习命令),介绍四项常用安全加固措施:限制 SSH 远程登录、设置全局空闲自动注销、密码有效期策略、以及使用 MobaXterm 生成密钥对实现免密登录。每项操作均附命令示例及截图提示,适合初学者或运维人员参考。

1. SSH 服务安全加固(/etc/ssh/sshd_config

SSH 是 Linux 远程管理的核心服务,修改配置文件可大幅提升安全性。执行:

sudo vim /etc/ssh/sshd_config

执行这个命令后我们成功进入到了ssh服务的文件,后续我们对于ssh服务进行的安全加固就是在这个文件中进行修改配置。

1.1 禁止 root 用户直接远程登录

找到或添加:

PermitRootLogin no

这里有一点,我们发现没有某一行的配置的时候我们需要添加某一行,最好添加在文件末尾,因为如果前面其实是有这一样的话,我们写在后面的配置是可以覆盖的,并不会造成错误。但是为了避免混淆、难以维护,需要仔细检查到底有没有。我们通过搜索发现是有这一行的,将原本的yes置为no,保存重启ssh服务后就成功关闭了root的远程登录。

这样攻击者无法通过 root 身份尝试爆破,需先登录普通用户再提权。

1.2 修改默认端口

将 22 改为其他高位端口(例如 58222),减少被批量扫描的概率:

Port 58222

注意:修改后需在防火墙放行新端口,并确保 SELinux 策略允许(如果启用)。

我们通过搜索找到 Port 直接修改后面的端口,修改后ssh服务的端口就变了,这样就减少了被批量扫描的概率,增加了安全性。

1.3 设置空闲超时自动断开

防止用户离开后终端长时间被占用:

text

ClientAliveInterval 300     # 服务器每隔 300 秒向客户端发送一个加密的“心跳”请求,检测客户端是否仍在响应
ClientAliveCountMax 0    # 如果心跳请求没有得到回复,允许连续失败的次数为 0 —— 即第一次失败就立即断开连接。

文件中并没有这两行,所以我们直接在文件末尾添加上就行。

ClientAliveIntervalClientAliveCountMax 用于定期探测 SSH 客户端是否仍存活,若客户端异常断开未正常关闭连接,则服务器能及时发现并释放僵尸连接,长期保留着这些僵尸连接会占用大量资源,影响服务器运行效率。

1.4 限制最大认证尝试次数

避免攻击者短时间内尝试大量密码:

MaxAuthTries 3

文件中还是没有这一行,直接在文件末尾添加。

超过 3 次错误即断开连接。

1.5 添加用户白名单并限制来源主机

只允许特定用户从指定 IP 或网段登录,例如:

AllowUsers alice@192.168.1. 

我们直接在末尾加上这一行就行了。

这里是简写形式,可以支持通配符。

表示用户 alice 只能从 192.168.1.0/24 网段登录,bob 只能从 10.0.0.0/8 网段登录。

1.6 重启服务使配置生效

所有的ssh配置修改后需要重启ssh服务才可以,所以我们现在需要重启ssh服务。

sudo /etc/init.d/ssh restart

这里就成功重启了服务,刚才我们配置的已经生效了。

我们来试试是否成功生效。

断开连接后可以看到我们原来的会话不能用了,这是因为我们更换了端口,所以我们需要重新建立连接

我们更换端口后可以连接上了,并且尝试登录root就算输入了正确的密码也不能成功登录了,说明我们的ssh配置生效了。

2. 设置全局空闲超时自动注销(/etc/profile

通过系统环境变量 TMOUT 可对所有登录用户(包括本地和远程)设置空闲超时。编辑 /etc/profile

sudo vim /etc/profile

在末尾添加:

export TMOUT=30

保存后,新登录的会话将在无操作 30 秒后自动注销。当前会话执行 source /etc/profile 也可立即生效。

3. 密码有效期策略(/etc/login.defschage

3.1 对新用户生效的配置(/etc/login.defs

编辑 /etc/login.defs

bash

sudo vim /etc/login.defs

修改以下参数:

PASS_MAX_DAYS 90 # 密码最长使用天数
PASS_MIN_DAYS 0 # 密码最短使用天数(0 表示可立即修改)
PASS_WARN_AGE 7 # 过期前提醒天数

这些设置仅对新创建的用户生效。

这样就成功修改了密码策略,表示密码最多使用三天,最短使用0天,最后三天提醒修改密码。

值得注意的是这个配置只能对配置后创建的用户生效,如果要对已经存在的用户进行配置有其他的命令。

3.2 对已存在用户使用 chage 命令

查看某用户的密码有效期:

sudo chage -l 用户名

执行命令我们来看看root用户的密码有效期,可以看到是最多使用99999天,最少0天,最后七天提醒。

设置密码最大有效期(例如 90 天):

sudo chage -M 90 用户名

设置过期前提醒天数:

sudo chage -W 7 用户名

可以看到chage命令通过不同的参数来设置,同时也可以支持一次性设置多个参数来设置。下面我们看看有没有成功设置呢

我们输入查看命令,发现我们修改成功了的。

4. 使用 SSH 密钥对登录(免密码 + 提高安全性)

使用密钥登录可完全替代密码认证,有效防御暴力破解。以下以 MobaXterm 为例。

4.1 在 MobaXterm 中生成密钥对

  1. 打开moba中生成密钥的界面,可以直接点击图中的加号添加。

2.生成密钥,在新打开的界面输入命令ssh-keygen -t rsa 表示使用rsa来生成密钥,输入命令后会让输入一些选项,这里可以直接一直按enter确认使用默认值,各个选项的意思截图中有标注。

生成完成后我们可以使用ls命令查看密钥

ls .ssh​​​​​​​

这就是生成的密钥.pub结尾的就是公钥。

4.2 上传公钥到 Linux 服务器

使用 ssh-copy-id 工具(如果已安装且允许密码登录):

ssh-copy-id -i id_rsa.pub 用户名@服务器IP

可以看到我们成功上传了公钥,需要注意的是,之前我们修改了端口这里需要指向正确的端口,并且用户需要是能够成功登录的用户,之前我们设置了root不能远程登录,所以不可以用root

4.3 配置 MobaXterm 使用私钥登录

  1. 新建 SSH 会话,填入服务器 IP 和用户名。

  2. Advanced SSH settings 标签页中,勾选 Use private key,并选择之前保存的私钥文件。

  3. 保存会话,双击连接。若私钥无 passphrase 则直接登录;若有 passphrase 会弹出对话框。

设置好后点击是,然后进入登录页面输入可以登录的用户名,这时就会发现不用密码也可以直接登录了。

4.4 (可选)禁用密码登录

确认密钥登录成功后,可以彻底关闭密码认证。编辑 /etc/ssh/sshd_config

PasswordAuthentication no

重启 SSH 服务 sudo systemctl restart sshd

5. 总结

本文系统介绍了 Linux 系统中四项基础安全加固措施:

加固项 核心配置/命令 作用
SSH 安全 /etc/ssh/sshd_config 禁止 root 登录、改端口、限制尝试次数、白名单
空闲超时 /etc/profile 添加 TMOUT 自动注销空闲终端
密码有效期 /etc/login.defs + chage 强制定期改密
密钥登录 MobaXterm 生成密钥对 + authorized_keys 免密登录,可禁用密码认证

建议在测试环境中验证后再应用到生产服务器。坚持最小权限原则和纵深防御,可显著提升系统安全性。


原创作者:浅了

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐