手動設定匯入的磁碟


當您手動匯入虛擬磁碟至 Compute Engine 後,您必須將那些映像檔最佳化,才能使用 Compute Engine 環境的特定功能。

目錄

安裝 Compute Engine 客體環境

您必須先安裝客體環境,才能使用 Compute Engine 的主要功能。如要瞭解何時需要手動安裝訪客環境,請參閱「手動安裝或更新訪客環境的時機」。

請在手動匯入現有映像檔之後,在您建立的執行中 VM 執行個體上安裝客體環境。如要執行安裝程序,請使用匯入前建立的使用者帳戶,經由 SSH 存取 VM 執行個體來執行,或是透過與序列主控台互動進行。

針對 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 設為網路 MTU。Compute Engine DHCP 伺服器會將這個參數做為 interface-mtu 選項使用,多數用戶端接受這種做法。如要進一步瞭解網路 MTU,請參閱最大傳輸單位總覽
    • 如果您不打算設定 IPv6 位址,請停用 IPv6。
    • 移除永久性網路規則,以免執行個體記住 MAC 位址。例如:

      rm -f /etc/udev/rules.d/70-persistent-net.rules
    • 除非您有 Compute Engine 防火牆規則不支援的特定需求,否則請停用作業系統的防火牆。Compute Engine 會提供傳入與傳出流量的防火牆。如要進一步瞭解防火牆,請參閱防火牆規則總覽

  • 為確保網路與磁碟維持高效能運作,請停用或移除 irqbalance Daemon。這個 Daemon 在虛擬機器 (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 強烈建議您讓映像檔符合下列的安全性最佳做法:

  • 盡量減少預設安裝的軟體 (例如僅執行最基本的 OS 安裝)。
  • 啟用自動更新。
  • 預設即停用 SSH、DHCP、NTPD 以外的所有網路服務。如果郵件伺服器 (如 Postfix) 僅接受 localhost 連線,您可以允許郵件伺服器執行這項網路服務。
  • 禁止 sshd 以外的外部接聽通訊埠。
  • 安裝 denyhosts 套件,以防範 SSH 暴力登入攻擊。
  • 移除預設安裝中所有不必要的非使用者帳戶。
  • /etc/passwd 中,將所有非使用者帳戶的殼層設為 /sbin/nologin/usr/sbin/nologin (視 OS 安裝 nologin 的位置而定)。
  • /etc/shadow 中,將 OS 設定為使用加工 SHA512。
  • 設定 pam_cracklib,檢測密碼是否為高強度密碼。
  • 設定 pam_tally,在登入帳戶失敗 3 次後鎖定帳戶 5 分鐘。
  • /etc/shadow 檔案中,將根帳戶設定為預設即鎖定,請執行下列指令來鎖定根帳戶:

    usermod -L root
  • 加入下列的指令列以拒絕在 /etc/ssh/sshd_config 中進行根登入:

    PermitRootLogin no
  • 針對所有預設執行且面對網路的服務建立 AppArmorSELinux 設定檔。

  • 盡可能使用檔案系統功能來減少使用 S*ID 位元的需求,並提供更精細的控制。

  • 編譯面對網路的軟體時,啟用編譯器與執行階段漏洞攻擊緩解措施。以下為 GNU Compiler Collection (GCC) 提供的部分緩解功能與啟用方法:

    • 堆疊溢位保護:使用 -fstack-protector 啟用這項功能。根據預設,這個選項會保護堆疊分配緩衝區超過八個位元組的函式。如要將緩衝區為四個或更多位元組的函式也納入涵蓋範圍內,進一步提升保護程度,請加入 --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,如要停用這項功能,請編輯 /etc/sysctl.conf 檔案,並加入下列設定:

    kernel.modules_disabled = 1
  • 移除核心符號表

    sudo rm /boot/System.map

後續步驟