保护 Rocky Linux 8 的初始步骤

介绍

本指南描述了新 Rocky Linux 服务器的一些最佳安全实践。 您将学习

  • 使用 SSH 密钥
  • 创建一个新的标准用户帐户并授予它 sudo 特权
  • 禁用 root 用户的 SSH 访问
  • 更改默认 SSH 端口
  • 禁用防火墙 区域漂移

先决条件

您应该有一个安装了 OpenSSH 的本地工作站,例如 Windows 10 或更高版本、macOS 或 Linux。

如果您没有 SSH 密钥,您应该在部署服务器之前创建一个并将其添加到您的 Vultr 帐户。

  1. 在本地工作站上打开终端会话。
  2. 采用 ssh-keygen 生成新的 SSH 密钥。

    $ ssh-keygen -t ed25519 -C [email protected] -f ~/.ssh/id_ed25519-vultr-example
    
    • -t 选项指定密钥类型。 ed25519 推荐,因为它比 RSA 更安全。 如果您更喜欢 RSA 或 DSA 密钥,请更改 id_ed25519id_rsa 或者 id_dsa.
    • -C flag 指定键的注释。 这是可选的。 添加您的电子邮件地址是个好主意。
    • -f flag 指定要保存密钥的文件。 这是可选的。 ed25519 格式的默认名称是 ~/.ssh/id_ed25519. 您可能希望使用其他名称来标识密钥,如上所示。

这将创建一个私钥/公钥对。 假设您将密钥命名为如上所示,密钥对位于 ~/.ssh/ 文件夹并命名:

  • 私钥: id_ed25519-vultr-example
  • 公钥: id_ed25519-vultr-example.pub

您应该对私钥保密。 您将上传 *.pub 文件到 Vultr 并将其安装在服务器上。

  1. 登录 客户门户.
  2. 点击右上角你的名字,然后选择 SSH 密钥 从下拉菜单中。
  3. 点击蓝色的“加号”按钮 添加密钥.
  4. Enter 键的描述性名称。
  5. 在终端中查看您的公钥。 它应该看起来像这样:

    $ cat ~/.ssh/id_ed25519-vultr-example.pub
    ssh-ed25519 AAAAC3N/EXAMPLE/EXAMPLE/EXAMPLE/8Tlzou61bXpnMemiFfDbS/LRha7uFQu9iEWyI [email protected]
    
  6. 将输出字符串复制到 SSH 密钥 场地。 它看起来像这样:

  7. 点击 添加 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 身份登录。 以下是怎样做到这一点:

  1. 创建一个新的用户帐户。

    # adduser example_user
    
  2. 为新用户指定一个强密码。

    # passwd example_user
    Changing password for user example_user.
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    
  3. 使用 usermod 将新用户添加到 wheel 组。

    # usermod -aG wheel example_user
    
  4. 检查 sudoers 文件 visudo.

    # visudo
    
  5. 寻找轮组。 如果该行被禁用,请删除注释。 当您准备好保存文件时,它应该看起来像这样。

    ## Allows people in group wheel to run all commands
    %wheel  ALL=(ALL)       ALL
    
  6. 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!)
    
  7. 切换到新用户进行测试 sudo 使用权。

    # su - example_user
    

    验证您是新用户 whoami然后测试 sudo 访问 sudo whoami,它应该返回根。

    $ whoami
    example_user
    $ sudo whoami
    [sudo] password for example_user:
    root
    
  8. 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 访问。

  1. 打开 SSH 服务器配置文件:

    $ sudo nano /etc/ssh/sshd_config
    
  2. 为 root 禁用 SSH。 寻找 PermitRootLogin 行并将指令更改为 .

    PermitRootLogin no
    
  3. 禁用 SSH 密码验证。 更改 密码认证 指示 .

    PasswordAuthentication no
    

    使用此设置,您必须使用 SSH 密钥进行身份验证。

  4. Save 和 close 文件。

  5. 通过重新启动 SSH 来激活更改:

    $ sudo systemctl reload sshd
    

从此时起,您必须以标准用户身份登录。 采用 sudo 对于需要更多访问权限的命令。

4.更改默认SSH端口

更改默认 SSH 端口是一项可选任务。 一些管理员建议这样做以减少服务器上的端口扫描尝试次数。 要更改它:

  1. 编辑 SSH 服务器配置文件。

    $ sudo nano /etc/ssh/sshd_config
    
  2. 寻找 端口 22 行,取消注释,然后将端口号更改为您选择的端口。 像这样:

    Port 22022
    

    端口应该是:

    • 大于 1024
    • 小于 65535
    • 未被系统上的其他服务使用
    • 避免使用任何 IANA 注册端口.
  3. Save 和 close 文件。

  4. 将此更改通知 SELinux,以便允许 SSH 绑定到新端口。

    $ sudo semanage port -a -t ssh_port_t -p tcp 22022
    
  5. 验证端口通知是否成功。

    $ semanage port -l | grep ssh
    ssh_port_t                     tcp      22022, 22
    
  6. 将防火墙配置为允许通过新端口的流量。

    $ sudo firewall-cmd --add-port=22022/tcp --permanent
    
  7. 所有 SSH 流量都将通过新端口。 从防火墙中删除默认的 SSH 服务分配。

    $ sudo firewall-cmd --remove-service=ssh --permanent
    
  8. 重新启动防火墙和 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 的开发人员强烈建议禁用它。

要禁用它:

  1. 打开防火墙配置文件。

    $ sudo nano /etc/firewalld/firewalld.conf
    
  2. 寻找 AllowZoneDrifting 行(在文件末尾)并将指令更改为 .

    AllowZoneDrifting=no
    
  3. Save 和 close 文件。

  4. 重启防火墙。

    $ sudo systemctl restart firewalld
    

更多信息

这些基本步骤极大地提高了系统的安全性。 要了解有关 Rocky Linux 8 和 Firewalld 的更多信息,请参阅以下资源:

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com