介绍
本指南描述了新 Rocky Linux 服务器的一些最佳安全实践。 您将学习
- 使用 SSH 密钥
- 创建一个新的标准用户帐户并授予它 sudo 特权
- 禁用 root 用户的 SSH 访问
- 更改默认 SSH 端口
- 禁用防火墙 区域漂移
先决条件
您应该有一个安装了 OpenSSH 的本地工作站,例如 Windows 10 或更高版本、macOS 或 Linux。
如果您没有 SSH 密钥,您应该在部署服务器之前创建一个并将其添加到您的 Vultr 帐户。
- 在本地工作站上打开终端会话。
采用
ssh-keygen
生成新的 SSH 密钥。$ ssh-keygen -t ed25519 -C [email protected] -f ~/.ssh/id_ed25519-vultr-example
- 这
-t
选项指定密钥类型。 ed25519 推荐,因为它比 RSA 更安全。 如果您更喜欢 RSA 或 DSA 密钥,请更改id_ed25519
到id_rsa
或者id_dsa
. - 这
-C
flag 指定键的注释。 这是可选的。 添加您的电子邮件地址是个好主意。 - 这
-f
flag 指定要保存密钥的文件。 这是可选的。 ed25519 格式的默认名称是~/.ssh/id_ed25519
. 您可能希望使用其他名称来标识密钥,如上所示。
- 这
这将创建一个私钥/公钥对。 假设您将密钥命名为如上所示,密钥对位于 ~/.ssh/
文件夹并命名:
- 私钥: id_ed25519-vultr-example
- 公钥: id_ed25519-vultr-example.pub
您应该对私钥保密。 您将上传 *.pub 文件到 Vultr 并将其安装在服务器上。
- 登录 客户门户.
- 点击右上角你的名字,然后选择 SSH 密钥 从下拉菜单中。
- 点击蓝色的“加号”按钮 添加密钥.
- Enter 键的描述性名称。
在终端中查看您的公钥。 它应该看起来像这样:
$ cat ~/.ssh/id_ed25519-vultr-example.pub ssh-ed25519 AAAAC3N/EXAMPLE/EXAMPLE/EXAMPLE/8Tlzou61bXpnMemiFfDbS/LRha7uFQu9iEWyI [email protected]
将输出字符串复制到 SSH 密钥 场地。 它看起来像这样:
点击 添加 SSH 密钥 按钮将其添加到您的帐户。
部署服务器
在 Vultr 客户门户中,部署一个新的 Rocky Linux 云服务器. 确保在部署时在客户门户中选择您的 SSH 密钥,Vultr 将自动为 root 用户安装该密钥。
本指南使用 192.0.2.123 在以下所有示例中作为服务器的 IP 地址。
从您的本地终端,以 root 身份通过 SSH 连接到服务器:
$ ssh [email protected]
如果您的私钥不在标准位置,请使用 -i
参数,像这样:
$ ssh -i /path/to/your/key/privatekeyfile [email protected]
如果一切正常,您将在不提示输入密码的情况下登录。
1.添加一个标准用户 sudo 使用权。
作为标准用户执行正常的维护任务是一种很好的安全实践,并使用 sudo
对于需要更高访问权限的命令。 在大多数情况下,您不应该经常以 root 身份登录。 以下是怎样做到这一点:
创建一个新的用户帐户。
# adduser example_user
为新用户指定一个强密码。
# passwd example_user Changing password for user example_user. New password: Retype new password: passwd: all authentication tokens updated successfully.
使用 usermod 将新用户添加到 wheel 组。
# usermod -aG wheel example_user
检查 sudoers 文件
visudo
.# visudo
寻找轮组。 如果该行被禁用,请删除注释。 当您准备好保存文件时,它应该看起来像这样。
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
Save 并退出 vi。 键入 ESC,然后:WQ,然后 ENTER。
笔记: visudo 实用程序在将您的编辑提交到文件之前执行语法检查。 格式错误的 sudoers 文件可能会破坏您的系统。 永远不要直接编辑 /etc/sudoers。 为了 example,如果你出错,你会在退出 visudo 时看到这个。
visudo: >>> /etc/sudoers: syntax error near line 64 <<< What now? Options are: (e)dit sudoers file again e(x)it without saving changes to sudoers file (Q)uit and save changes to sudoers file (DANGER!)
切换到新用户进行测试 sudo 使用权。
# su - example_user
验证您是新用户
whoami
然后测试 sudo 访问sudo whoami
,它应该返回根。$ whoami example_user $ sudo whoami [sudo] password for example_user: root
Exit 和 close 终端会话。
2.为新用户启用SSH访问
在本地工作站上打开一个新终端,然后使用 ssh-copy-id
将 SSH 密钥添加到新的标准用户。 这会将公共 SSH 密钥复制到新用户的 授权密钥 文件。
$ ssh-copy-id -i ~/.ssh/id_ed25519-vultr-example.pub [email protected]
切勿将您的私钥复制到服务器。
以新用户身份登录服务器。 如果一切正常,您将在不提示输入密码的情况下登录。
$ ssh [email protected]
3.配置SSH
最佳做法是为 root 帐户禁用 SSH,并禁用基于密码的 SSH 访问。
打开 SSH 服务器配置文件:
$ sudo nano /etc/ssh/sshd_config
为 root 禁用 SSH。 寻找 PermitRootLogin 行并将指令更改为 不.
PermitRootLogin no
禁用 SSH 密码验证。 更改 密码认证 指示 不.
PasswordAuthentication no
使用此设置,您必须使用 SSH 密钥进行身份验证。
Save 和 close 文件。
通过重新启动 SSH 来激活更改:
$ sudo systemctl reload sshd
从此时起,您必须以标准用户身份登录。 采用 sudo
对于需要更多访问权限的命令。
4.更改默认SSH端口
更改默认 SSH 端口是一项可选任务。 一些管理员建议这样做以减少服务器上的端口扫描尝试次数。 要更改它:
编辑 SSH 服务器配置文件。
$ sudo nano /etc/ssh/sshd_config
寻找 端口 22 行,取消注释,然后将端口号更改为您选择的端口。 像这样:
Port 22022
端口应该是:
- 大于 1024
- 小于 65535
- 未被系统上的其他服务使用
- 避免使用任何 IANA 注册端口.
Save 和 close 文件。
将此更改通知 SELinux,以便允许 SSH 绑定到新端口。
$ sudo semanage port -a -t ssh_port_t -p tcp 22022
验证端口通知是否成功。
$ semanage port -l | grep ssh ssh_port_t tcp 22022, 22
将防火墙配置为允许通过新端口的流量。
$ sudo firewall-cmd --add-port=22022/tcp --permanent
所有 SSH 流量都将通过新端口。 从防火墙中删除默认的 SSH 服务分配。
$ sudo firewall-cmd --remove-service=ssh --permanent
重新启动防火墙和 SSH。
$ sudo systemctl restart firewalld sshd
在本地工作站上打开一个新的终端会话以测试连接。 使用 -p
选项来指定新的 SSH 端口。
$ ssh -p22022 [email protected]
5.在防火墙中禁用区域漂移
防火墙D,用于 Rocky Linux 8 的防火墙应用程序已安装并处于活动状态。 使用以下方式查看状态:
$ sudo systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-03-22 02:08:57 UTC; 2h 18min ago
Docs: man:firewalld(1)
Main PID: 4712 (firewalld)
Tasks: 2 (limit: 5980)
Memory: 27.8M
CGroup: /system.slice/firewalld.service
└─4712 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
Mar 22 02:08:56 rocky8 systemd[1]: Starting firewalld - dynamic firewall daemon...
Mar 22 02:08:57 rocky8 systemd[1]: Started firewalld - dynamic firewall daemon.
Mar 22 02:08:57 rocky8 firewalld[4712]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option
该输出中的最后一行表示区域漂移是一种不安全的配置,应该禁用。 在像 FirewallD 这样的基于区域的防火墙中,根据配置,配置为通过一个区域的流量也可能通过它不打算用于的另一个区域。 这称为区域漂移。 FirewallD 的开发人员强烈建议禁用它。
要禁用它:
打开防火墙配置文件。
$ sudo nano /etc/firewalld/firewalld.conf
寻找 AllowZoneDrifting 行(在文件末尾)并将指令更改为 不.
AllowZoneDrifting=no
Save 和 close 文件。
重启防火墙。
$ sudo systemctl restart firewalld
更多信息
这些基本步骤极大地提高了系统的安全性。 要了解有关 Rocky Linux 8 和 Firewalld 的更多信息,请参阅以下资源:
注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com