Linux 安全管理与加固实践

前言

  • 介于上次被一个陌生的德国ip入侵之后不得已重置整个系统,所有已经部署的业务都得重来。由此可见做好安全管理多么重要!
  • 以下一些常见的操作来增加系统安全防止被恶意入侵
  • 系统环境:Debian 12

保持系统最新

  1. 更新软件源并升级所有软件包
1
2
3

sudo apt update && sudo apt upgrade -y
sudo apt dist-upgrade -y
  1. 清理旧内核和无用包
1
sudo apt autoremove --purge
  1. 启用自动安全更新
1
2
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades # 选择"Yes"启用
  • 选择”Yes”启用
    图片

Linux 防火墙配置

  • 开启防火墙,将不必要的端口关闭,缩小需要防范的范围。
  • 关于如何配置可以看我这篇文章Linux UFW防火墙使用教程,里面有详细的介绍。

Linux SSH服务安全

备份

  • 记得备份好你的SSHD的配置文件以防万一
1
# cp /etc/ssh/sshd_config /etc/ssh/backup.sshd_config

OpenSSH的路径

  • OpenSSH 服务的配置文件路径为 /etc/ssh/sshd_config ,要配置它,必须得使用系统管理员( root )权限或使用 sudo 命令临时获得的管理员权限。
  • 配置信息大概长这样的链接

这里默认你已经会用编辑工具没有的话请安装VIM

1
# apt-get install vim

编辑配置文件

  • 准备好就直接编辑
1
# vim /etc/ssh/sshd_config

重载使新配置生效

当配置更改完成,重启 SSH 后台服务使新的配置生效。

1
sudo systemctl reload sshd

关于SSH配置

禁用Root用户登录
  1. 添加其他用户
  1. 在刚刚创建的用户修改其密码
1
passwd username
  • 输入两遍密码后即成功修改

p.s.在添加用户的时候有些小问题例如切换用户不显示路径以及用户名可以查阅这篇

Linux 安装以及配置Sudo
  1. 安装sudo
1
# apt-get install sudo
  1. 修改 /etc/sudoers 文件属性为可写
    chmod命令
1
# chmod u+w /etc/sudoers
  1. 编辑sudo配置文件
1
# vim /etc/sudoers

然后找到root ALL = (ALL) ALL这一行,在下一行加入username ALL = (ALL) ALL。username指代你想加入sudo组的用户名。
图片
4. 修改/etc/sudoers 文件属性为只读

1
# chmod u-w /etc/sudoers

第二种方法:
直接执行命令添加用户到 sudo
登录后复制

1
# usermod -a -G sudo stayrabbit    //注意改成你自己的用户名
修改SSH配置文件
  • Linux 系统应该禁止 root 用户登录,因为这是有风险的,其不会留下审计信息。这就是 sudo 机制存在的原因。

如果系统添加了 sudo 用户,最好使用 sudo 用户通过 ssh 连接,而不是 root 用户。

要禁止 root 用户通过 ssh 访问,可以修改 PermitRootLogin 选项为 no:

1
# PermitRootLogin no
禁用空密码

在 Linux 中,用户账户可以不设置任何密码(或者为空密码)。这些用户尝试使用 ssh,也不需要密码。

这是一个极大的安全隐患,我们应该禁止使用空密码。方法是在配置文件 /etc/ssh/sshd_config 中,将 PermitEmptyPasswords 选项配置为 no:

1
PermitEmptyPasswords no

图片

修改ssh的默认端口

ssh 的默认端口为 22,大多数攻击脚本都是围绕这个端口写的。更改这个默认端口会增加 ssh 的安全性,因为会极大的减少攻击者的数量。

在配置文件中搜索端口信息,并将其更改为其他值

请注意!在此之前先将对应端口防火墙打开
以防连接不上在默认的22基础上加上你刚刚添加的端口,用该端口连接上之后再将Port 22注释掉
可以参考这篇“iptables 禁止除22端口外其他所有端口”
图片
和这篇“iptables允许22端口访问”
或者你觉得iptables麻烦可以参考我这篇Linux UFW防火墙使用教程
netstat -antp命令来检查开放的端口

1
2
Port 22
Port 10086

修改完成后需要记住你修改的端口(毕竟你还需要使用这个端口来登录的)

禁用 ssh 协议 1

如果你使用的是比较旧的 Linux 版本,在某些低版本的 ssh 可能仍然有 ssh 协议 1 可用,该协议存在已知的漏洞,不能再使用。

较新版本的 ssh 会自动启用 ssh 协议 2,可以检查一下该配置:

1
# Protocol 2
配置空闲超时间隔

空闲超时间隔是 ssh 连接可以在没有任何活动的情况下保持活动状态的时间。这种空闲会话也是一种安全风险,所以需要配置合适的空闲超时时间间隔。

超时间隔以秒为单位,默认值是0。我们可以将其更改为300,即保持 5 分钟的超时间隔。

1
ClientAliveInterval 300

在此间隔之后,ssh 服务器将向客户端发送一条活动消息。如果没有得到响应,连接将关闭,最终用户将注销。
还可以配置在断开连接之前,发送活动消息的次数:

1
ClientAliveCountMax 2
禁用 X11 转发

X11 或 X 显示服务器是图形环境的基本框架。X11 转发允许您通过 ssh 使用 GUI 应用程序。

基本上,客户机在服务器上运行 GUI 应用程序,但由于 X11 转发,机器之间打开了一个通道,GUI 应用程序旧显示在了客户机上。

基于此,X11 协议是有安全隐患的。所以如果不需要它,应该禁用 ssh 中的 X11 转发。

1
X11Forwarding no
用户白板

可以配置哪些用户允许通过 SSH 登录。这就是白板列表。仅白板列表里的用户可连接登录。白板之外的用户将被禁止  。来看下如何设置允许 user 用户通过 SSH 远程登录。 加入以下语句:

1
AllowUsers user

您想让谁 SSH 登录,别忘了加其用户名到 AllowUser(允许用户) 列表里。


用私钥连接登录SSH

  1. 制作密钥对
    首先在服务器上制作密钥对。首先用密码登录到你打算使用密钥登录的账户,然后执行以下命令:
1
ssh-keygen  //建立密钥对

图片
现在,在 root 用户的家目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件。
id_rsa 为私钥,id_rsa.pub 为公钥
图片

  1. 在服务器上安装公钥
    键入以下命令,在服务器上安装公钥:
1
2
#cd .ssh
#cat id_rsa.pub >> authorized_keys

如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确:

1
2
# chmod 600 authorized_keys
# chmod 700 ~/.ssh
  1. 设置 SSH,打开密钥登录功能
    编辑 vim/etc/ssh/sshd_config 文件,进行如下设置:
1
2
RSAAuthentication yes
PubkeyAuthentication yes

然后重启 SSH 服务:

1
# service sshd restart
  1. 将私钥下载下来利用winscp或者直接用cat id_rsa 复制下来
    用PuTTYGen工具
    图片
    选择Load Private Key将刚才复制下来的私钥加载进去
    然后点保存
    图片
    后续当你使用 PuTTY 登录时,可以在左侧的 Connection -> SSH -> Auth 中的 Private key file for authentication: 处选择你的私钥文件,然后即可登录了,过程中只需输入密钥锁码即可。
  2. 保存好之后继续配置SSHD_config
    图片
    当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:
1
PasswordAuthentication no

最后,重启 SSH 服务:

1
service sshd restart

参考

  1. 如何配置安全的 SSH 服务?(OpenSSH 安全必知必会)
  2. 可以提高 ssh 安全性的几个配置|TIAP
  3. 设置 SSH 通过密钥登录|runoob
  4. SSH服务详解(二)–使用私钥登录 SSH 服务器(免密登录)|CSDN
  5. DenyHosts 简单使用 |cnblog
  6. 【第 4 章】安全防护篇 | Project X

Linux 安全管理与加固实践
https://blog.nyc1.xyz/2024/04/20/关于Liunx安全管理与加固/
作者
NgaiYeanCoi
发布于
2024年4月20日
更新于
2026年6月27日
许可协议