配置导入的映像

向 Compute Engine 导入现有映像后,请优化这些映像,以便它们能够使用 Compute Engine 环境专有的功能。

目录

安装 Compute Engine Linux 客机环境

必须安装 Linux 客机环境才能使用 Compute Engine 的主要功能

导入现有映像后,在您创建的正在运行的虚拟机实例上安装 Linux 客机环境。要执行安装,请使用您在导入该映像前创建的用户帐号通过 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 守护进程。此守护进程无法为虚拟机实例上的客机操作系统正确平衡 IRQ 请求。请改为使用 Linux 客机环境中的脚本来正确平衡虚拟 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
      
      # Google 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 as ssh keys are more secure.
      PasswordAuthentication no
      
      # Disable root login, using sudo provides better auditing.
      PermitRootLogin no
      
      PermitTunnel no
      AllowTcpForwarding yes
      X11Forwarding no
      
      # Compute 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 暴力登录尝试。
  • 执行默认安装时,移除所有不必要的非用户帐号。
  • 将所有非用户帐号的 shell 设置为 /etc/passwd 中的 /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
    

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档