我们要做的安全防护有哪些?
【端口】、【用户名】、【密码】这三要素进行加强,来降低被攻破的风险:
【端口】:将 SSH 远程登录端口修改为【非 22 端口】
【用户名】:建立【非 root】的新用户、并禁用 root 用户 SSH 远程登录
【密码】:SSH 启用 RSA 密钥验证登录、同时禁用密码验证登录
切记记得按顺序来,
① 将 SSH 远程登录端口修改为非 22 端口
我们来解决【端口 = 22】的问题。(注意:有些 VPS 服务商,默认的端口已经是非 22 端口,那么你可以忽略这一步,当然也可以跟着本文改成别的端口)
编号
编号 | 命令名称 | 命令说明 |
---|---|---|
cmd-03 | nano | 文本编辑器 |
cmd-04 | systemctl restart | 重启某个服务 |
conf-01 | /etc/ssh/sshd_config | SSH 远程登录程序设置 |
一 我们要做的第一件事,当然就是【用nano这个文本编辑器打开SSH远程登录程序设置】,在 Windows 下,你会【找到文件并双击】,在 Linux 下该怎么办呢?
- nano /etc/ssh/sshd_config
{/card-list-item}
我们要做的第二件事,是【在打开的文件中找到Port这一项,并修改它的端口】。Port 后面的数字就是 SSH 的端口,一般建议把它改成一个大于1024小于65535的整数(本文以9753为例)。
使用 ctrl+w 进入搜索模式,然后输入 Port 22 并回车。删除 22 并改成 9753
说明:如果这一行开头有个#,证明这一行【不生效】(被注释掉了),你可像我一样在文件最后写一个不带#的,或者把#删掉就好。
正确的快捷键:保存是 ctrl+o + 回车,退出是 ctrl+x
我们最后要做的事,是【重启 ssh 服务,使变更生效】
- systemctl restart ssh
{/card-list-item}
3.修改 PuTTY 配置
现在新的端口已经生效,下次使用 PuTTY 登录时就要用9753了。所以现在请到 PuTTY 的设置中修改端口号码,然后保存 Session。
二 建立非 root 的新用户
第二步,我们来解决【用户名 = root】的问题。
首先你要理解, Linux 系统中的root,不仅仅是一个管理员账号那么简单。它是整个系统的【根基】、是系统的主宰.
编号 | 命令名称 | 命令说明 |
---|---|---|
cmd-05 | adduser | 给系统新增用户 |
cmd-06 | apt install | 安装某个软件 |
cmd-07 | visudo | 修改 sudo 权限设置专用编辑器 |
我们要做的是【新增一个用户并设定登录密码】,名字你可以随便起,我这里以vpsadmin为例:
- adduser vpsadmin
{/card-list-item}
执行命令后,根据提示操作即可。请务必设置一个用户密码(别忘记设置密码时你时看不到 的)。之后系统会询问你一些用户的附加信息,这些就可以无视,一路回车即可。
下一步我要做的是【安装sudo功能】(sudo 就是在关键时刻,让普通账户临时获得 root 的神力,战力全开拯救世界)
- apt update && apt install sudo
{/card-list-item}
这一行命令其实是两个命令。前一半 apt update 你之前已经见过并且用过了,是去服务器刷新软件版本信息。后面的 apt install 就是这一次要用到的【安装命令】。两条连接在一起,就是让系统去【刷新可用的最新软件,然后安装最新版的sudo程序】。 && 则是把两个命令连起来执行的意思。
下一步是【把vpsadmin用户加入sudo名单里,让他有资格借用root的神力】
- visudo
{/card-list-item}
在 User Privilege Specification 下加入一行 vpsadmin ALL=(ALL) NOPASSWD: ALL 即可。
如果你希望遵守传统习惯、每次使用sudo时需要输入密码,那么这一行改成 vpsadmin ALL=(ALL:ALL) ALL 即可。
三.禁用 root 用户 SSH 远程登录
1.用nano编辑器打开SSH远程登录程序设置
- nano /etc/ssh/sshd_config
{/card-list-item}
2.找到PermitRootLogin Yes这一项,然后把它后面的设定值改为no即可。
使用 ctrl+w 进入搜索模式,然后输入 PermitRootLogin 并回车
删除 yes 并改成 no
保存文件并退出。还记得怎么操作吗?
保存是 ctrl+o,然后 回车 确认
退出是 ctrl+x
重启 ssh 服务,让变更生效。
- systemctl restart ssh
{/card-list-item}
下次通过 PuTTY 远程 SSH 登录的时候,root用户已无法连接,用户名就要换成vpsadmin了!方便起见,我们可以在 PuTTY 中把vpsadmin设置成默认登录用户名。
四 使用 RSA 密钥登录并禁用密码登录
我们来解决【密码】可能被撞破的问题。
前面我说过,黑客并不是很蠢的用穷举法破解你的密码,而是会用一些比如“密码表”的作弊手段。除非你用的是随机生成的超长密码(比如借助 1Password,或者 macOS 的 keychain 等密码管理工具),否则很容易中招。
超长随机密码虽然安全性有所提高,但是基本上无法记忆,手动输入也十分麻烦易错。为了解决这个困境,我们可以直接弃用【密码验证】方式,改用更安全的【密钥验证】。
所谓的【密钥验证】,就是生成【一对】相关联的密钥文件(公钥和私钥),然后把【公钥】上传到 VPS 备用。每次登录时,SSH 会将【公钥】和【私钥】进行匹配,若验证是正确的【密钥对】,则验证通过。(换言之,你无需记忆和输入复杂的密码,只要保护好【私钥】这个文件不外泄即可)
其他的常见密钥还有:
DSA - 已经从数学层面被证明不安全,所以永远不要用它
ECDSA - 密钥小安全性高,但其算法被指留有 NSA 的后门,如果你的 VPS 上有值得 NSA 关注的东西就不要用它
Ed25519 - 这是一个与 ECDSA 十分类似的算法,故具有相似的性能优势。同时其文档全部公开,所以普遍认为无后门
所以,如果你的设备和软件都支持的话,我建议优先选择 Ed25519 密钥。
那我们现在就来配置【密钥验证】吧!
运行PuTTYgen (PuTTY 密钥生成器)。位置是 开始菜单 --> 所有程序 --> PuTTY (64-bit) --> PuTTYgen
点击Generate开始生成(在界面空白处乱晃鼠标增加随机数)
默认情况下,密钥存储在 ~/.ssh 目录中。大多数 SSH 客户端会自动使用以下默认文件名:
算法:ED25519(首选)
公钥:id_ed25519.pub
私钥:id_ed25519
算法:RSA(至少 2048 位密钥大小)
公钥:id_rsa.pub
私钥:id_rsa
算法:DSA(已弃用)
公钥:id_dsa.pub
私钥:id_dsa
算法:ECDSA
公钥:id_ecdsa.pub
私钥:id_ecdsa
你可以给私钥设置密码,增加一层安全性
点击 Save public key 保存公钥,文件名为 id_rsa.pub
点击 Save private key 保存私钥,文件名为 id_rsa (PuTTY 私钥自带.ppk后缀)
最重要的,将上方红框内的内容,向下滚动全部复制出来并保存,文件名为 authorized_keys。(用 vscode 保存,默认会变成带txt后缀的文本文件,这没关系,之后上传 VPS 时我们会把后缀名去掉)
将公钥上传至 VPS 的vpsadmin用户下
这一步就需要用到之前准备的WinSCP了。
会提示你导入 PuTTY 的设置,当然一键导入啦!
如果没有提示导入或者你已经提前安装好了,那按照下图进行配置即可
WinSCP 左边的目录就是本地电脑上的文件夹和文件,请定位到密钥所在的文件夹
WinSCP 右边的目录则是 VPS 服务器上的文件夹和文件,默认就在 /home/vpsadmin/ 文件夹,此时在请点击右下角 X hidden 来显示隐藏文件
在右边(VPS 中)点击右键并新建文件夹,起名 .ssh (注意有一个.)
将【公钥】authorized_keys上传到.ssh文件夹内
在上传时,将【公钥】从 authorized_keys.txt 改名为 authorized_keys(去掉.txt这个后缀名)
编号 | 命令名称 | 命令说明 |
---|---|---|
cmd-08 | sudo | 用root权限运行某个命令 |
cmd-09 | chmod | 修改目标文件/文件夹的权限 |
SSH 远程连接到 VPS 上(PuTTY)
修改 authorized_keys 文件权限为 600 (仅所有者可读可写)
- chmod 600 ~/.ssh/authorized_keys
{/card-list-item}
修改 SSH 配置。这个我们已经用了很多次,但现在我们已经从无所不能的root变成了普通用户vpsadmin,此时的我们是没有权限直接编辑 SSH 配置的。这时候就需要使用sudo命令了:
- sudo nano /etc/ssh/sshd_config
{/card-list-item}
找到(ctrl+w) PasswordAuthentication 改成 no
找到(ctrl+w) PubkeyAuthentication 改成 yes,然后保存(ctrl+o)退出(ctrl+x)
重启 SSH 服务。
- sudo systemctl restart ssh
{/card-list-item}
VPS 端已经设置好了公钥,现在要给 PuTTY 指定私钥位置供登录时使用
至此,【密钥登录】已成功开启、【密码验证】已成功关闭、并且还给 PuTTY 保存了默认的登录用户名和私钥。未来使用 PuTTY 登录时,载入VPS-SERVER配置后,点击Open就可以一键登录了。
如果你给私钥设置了密码保护,登录时当然还需要输入这个密码才能使用密钥,如下图
别忘了给WinSCP也做对应的密钥设置,否则之后想要传输文件时就无法登录了:
到这里为止,你的 VPS 已经完成了【端口】、【用户名】、【密码】这三要素的基本安全保障,虽然远称不上固若金汤,但一般的恶意脚本应该已经无法对你造成伤害了!
评论 (0)