手动配置导入的磁盘

将虚拟磁盘手动导入 Compute Engine 后,您需要优化这些映像,以便它们能够使用 Compute Engine 环境特有的功能。

目录

安装 Compute Engine 访客环境

您必须先安装客机环境,然后才能使用 Compute Engine 的主要功能。要了解何时需要手动安装客机环境,请查看何时手动安装或更新客机环境

请在手动导入现有映像后,在您创建的运行中虚拟机实例上安装访客环境。要执行这项安装工作,您可以使用您在导入映像前创建的用户帐号通过 SSH 来访问该虚拟机实例,或者通过与串行控制台互动来访问该实例。

针对 Compute Engine 配置已导入的映像

您无需额外更改即可在 Compute Engine 中运行启动磁盘映像,但您也可以进一步优化该映像,使其在 Compute Engine 中以最佳方式运行,并且能够使用 Compute Engine 的全部功能。

  • 修改 ntp.conf 文件,使其仅包含 server metadata.google.internal iburst Google NTP 服务器条目。

  • 将时区设置为 UTC:

    sudo ln -sf /usr/share/zoneinfo/UTC /etc/localtime
  • 为确保网络维持高性能运作,请使用以下建议的网络配置:

    • 使用 ISC DHCP 客户端
    • 将 DHCP MTU 设置为 1460。Compute Engine DHCP 服务器会将此参数用作 interface-mtu 选项,大多数客户端都支持这种用法。
    • 停用在 Compute Engine 上不受支持的 IPv6。
    • 移除永久性网络规则,防止实例记住 MAC 地址。例如:

      rm -f /etc/udev/rules.d/70-persistent-net.rules
    • 停用操作系统防火墙,除非您有 Compute Engine 防火墙规则不支持的特定要求。 Compute Engine 会为入站和出站流量提供防火墙。如需详细了解防火墙,请参阅防火墙规则概览

  • 为确保网络和磁盘维持高性能运作,请停用或移除 irqbalance 守护进程。此守护进程无法为虚拟机 (VM) 实例上的访客操作系统正确平衡 IRQ 请求。请改为使用访客环境中的脚本来正确平衡虚拟 CPU 的 IRQ 设置。

  • 配置对基础映像的 SSH 访问权限:

    • 停用根 ssh 登录。
    • 停用密码身份验证。
    • 停用基于主机的身份验证。
    • 启用严格的主机密钥检查。
    • 使用 ServerAliveInterval 保持连接的开放状态。
    • 从映像中移除 SSH 密钥,使其他人无法访问您映像中的公钥或私钥。请改用 Compute Engine 来管理对实例的访问权限

    • 修改 /etc/ssh/ssh_config 文件以使用以下配置:

      Host *
      Protocol 2
      ForwardAgent no
      ForwardX11 no
      HostbasedAuthentication no
      StrictHostKeyChecking no
      Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
      Tunnel no
      
      # Compute Engine times out connections after 10 minutes of inactivity.
      # Keep alive ssh connections by sending a packet every 7 minutes.
      ServerAliveInterval 420
      
    • 修改 /etc/ssh/sshd_config 文件以使用以下配置:

      # Disable PasswordAuthentication because ssh keys are more secure.
      PasswordAuthentication no
      
      # Disable root login. Using sudo provides better auditing.
      PermitRootLogin no
      
      PermitTunnel no
      AllowTcpForwarding yes
      X11Forwarding no
      
      # Compute Engine times out connections after 10 minutes of inactivity.
      # Keep alive ssh connections by sending a packet every 7 minutes.
      ClientAliveInterval 420
      

在 Compute Engine 上配置和优化启动磁盘后,基于该启动磁盘创建一个映像,如此您便可以通过该映像的完全优化版本创建实例,而无需每次创建实例时都进行配置。

安全配置最佳做法

您应始终提供安全的操作系统环境,但在环境的安全性和可访问性之间是很难取得平衡的。 容易遭到攻击的虚拟机会占用昂贵的资源。Google 强烈建议您的映像遵循以下安全最佳做法:

  • 最大限度地减少默认安装的软件数量(例如,执行操作系统的最小安装)。
  • 启用自动更新。
  • 默认情况下,停用除 SSH、DHCP 和 NTPD 之外的所有网络服务。如果邮件服务器(如 Postfix)仅接受来自本地主机的连接,则可以允许其运行。
  • 不允许除 sshd 之外的外部侦听端口。
  • 安装 denyhosts 软件包,帮助防止 SSH 暴力登录攻击。
  • 移除默认安装中所有不必要的非用户帐号。
  • /etc/passwd 中,将所有非用户帐号的 shell 设置为 /sbin/nologin/usr/sbin/nologin(具体取决于 nologin 在您的操作系统上的安装位置)。
  • /etc/shadow 中,将操作系统的密码配置为使用加盐 SHA512 算法。
  • 设置和配置 pam_cracklib,检测密码是否为安全系数高的密码。
  • 设置并配置 pam_tally,以在登录帐号失败 3 次后锁定帐号 5 分钟。
  • /etc/shadow 中,将根帐号配置为默认处于锁定状态。请运行以下命令来锁定根帐号:

    usermod -L root
  • 添加以下行以拒绝 /etc/ssh/sshd_config 中的根登录:

    PermitRootLogin no
  • 为所有默认运行的面向网络的服务创建 AppArmorSELinux 配置文件。

  • 尽可能使用文件系统功能,以消除对 S*ID 位的需求并提供更精细的控制。

  • 在编译面向网络的软件时,启用编译器并采用运行时漏洞缓解措施。例如,下面是 GNU 编译器集合 (GCC) 提供的一些缓解措施及其启用方式:

    • 堆栈粉碎保护:使用 -fstack-protector 来启用此选项。默认情况下,此选项使用长度超过 8 个字节的堆栈分配缓冲区来保护函数。如要使用至少 4 个字节的缓冲区涵盖函数以增强保护,请添加 --param=ssp-buffer-size=4
    • 地址空间布局随机化 (ASLR):通过使用 -fPIC -pie 构建与位置无关的可执行文件来启用此选项。
    • Glibc 保护:使用 -D_FORTIFY_SOURCE=2 来启用这些保护措施。
    • 全局偏移表 (GOT) 保护:使用 -Wl,-z,relro,-z,now 来启用此运行时加载程序功能。
    • 编译时发生的缺失格式字符串错误:-Wformat -Wformat-security -Werror=format-security
  • 停用允许加载和卸载内核模块的 CAP_SYS_MODULE。Linux 内核已弃用此功能。要停用此功能,请使用以下命令:

    echo 1 > /proc/sys/kernel/modules_disabled
  • 移除内核符号表

    sudo rm /boot/System.map

后续步骤