本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立共用 Linux 的建議 AMIs
使用下列指導方針來減少攻擊面,並改善AMIs您建立的可靠性。
重要
沒有任何一份清單可詳盡列出所有的安全性準則。AMIs 仔細建置共用的 ,並花時間考慮您可能會在何處公開敏感資料。
如果您要AMIs為 建置 AWS Marketplace,請參閱 AWS Marketplace 賣方指南中的建置最佳實務AMIs,以取得指導方針、政策和最佳實務。
如需AMIs安全共用的詳細資訊,請參閱下列文章:
停用根使用者的密碼型態遠端登入
對公有使用者使用固定根密碼AMI是可以快速得知的安全風險。即便仰賴使用者於第一次登入時變更密碼,都會留下一些可能遭到濫用的空窗。
若要解決此問題,請停用根使用者的密碼型態遠端登入。
停用根使用者的密碼型態遠端登入
-
使用文字編輯器開啟
/etc/ssh/sshd_config
檔案,並找出下行:#PermitRootLogin yes
-
將行變為:
PermitRootLogin without-password
此組態檔案的位置可能因分發而有所不同,或者如果您未執行 Open SSH。若是這種情況,請參閱相關文件。
停用本機根存取
當您使用共用 時AMIs,最佳實務是停用直接根登入。若要停用,請登入運作中的執行個體,然後發出下列命令:
[ec2-user ~]$
sudo passwd -l root
注意
此命令不會影響 sudo
的使用。
移除SSH主機金鑰對
如果您計劃共用AMI衍生自公有 的 AMI,請移除位於 的現有SSH主機金鑰對/etc/ssh
。當有人使用您的 啟動執行個體時,這SSH將強制產生新的唯一SSH金鑰對AMI,從而提高安全性並減少「man-in-the-middle」攻擊的可能性。
移除位在您系統中所有下列的金鑰檔案。
-
ssh_host_dsa_key
-
ssh_host_dsa_key.pub
-
ssh_host_key
-
ssh_host_key.pub
-
ssh_host_rsa_key
-
ssh_host_rsa_key.pub
-
ssh_host_ecdsa_key
-
ssh_host_ecdsa_key.pub
-
ssh_host_ed25519_key
-
ssh_host_ed25519_key.pub
您可以使用下列命令安全地移除所有這些檔案:
[ec2-user ~]$
sudo shred -u /etc/ssh/*_key /etc/ssh/*_key.pub
警告
像是 shred
等安全移除公用程式可能不會從儲存媒體中移除檔案的所有複本。可以透過日誌記錄檔案系統 (包括 Amazon Linux 預設 ext4)、快照、備份、 和臨時快取RAID來建立檔案的隱藏複本。如需詳細資訊,請參閱 shred
文件
重要
如果您忘記從公有 中移除現有的SSH主機金鑰對AMI,我們的例行稽核程序會通知您和所有執行 執行個體的客戶AMI,了解潛在的安全風險。在短暫寬限期後,我們會標記AMI私有。
安裝公有金鑰登入資料
設定 AMI以防止使用密碼登入後,您必須確定使用者可以使用其他機制登入。
Amazon EC2允許使用者在啟動執行個體時指定公有/私有金鑰對名稱。將有效的金鑰對名稱提供給RunInstances
API呼叫 (或透過命令列API工具) 時,公有金鑰 (Amazon 在呼叫 CreateKeyPair
或 後EC2保留在伺服器上的金鑰對部分ImportKeyPair
) 會透過針對執行個體中繼資料的HTTP查詢提供給執行個體。
若要透過 登入SSH,您的 AMI必須在開機時擷取金鑰值,並將其附加至 /root/.ssh/authorized_keys
(或 上任何其他使用者帳戶的同等值AMI)。使用者可以AMI使用金鑰對啟動 的執行個體,並登入,而不需要根密碼。
包括 Amazon Linux 和 Ubuntu 等許多發行版本皆使用 cloud-init
套件來注入所設定使用者的公有金鑰登入資料。如果您的發行版本不支援 cloud-init
,您可新增下列程式碼至系統啟動指令碼 (例如 /etc/rc.local
),以納入您在啟動時為根使用者指定的公有金鑰。
注意
在下列範例中,IP 地址 http://169.254.169.254/ 是 link-local 地址且僅在執行個體中有效。
這會套用到任何使用者;無需將其限制到 root
使用者。
注意
基於此項目的回收執行個體AMI包括啟動該執行個體的金鑰。若要避免加入金鑰,您必須清除 (或刪除) authorized_keys
檔案或將此檔案排除於重新綁定之外。
停用 sshd DNS檢查 (選用)
停用 sshd DNS檢查會稍微削弱您的 sshd 安全。不過,如果DNS解析失敗,SSH登入仍然有效。如果您未停用 sshd 檢查,DNS解決失敗會阻止所有登入。
停用 SSH DNS檢查
-
使用文字編輯器開啟
/etc/ssh/sshd_config
檔案,並找出下行:#UseDNS yes
-
將行變為:
UseDNS no
注意
如果未執行 Open ,則此組態檔案的位置會因分發或 而有所不同SSH。若是這種情況,請參閱相關文件。
移除敏感資料
我們建議您不要AMI將敏感資料或軟體存放在您共用的任何 上。啟動共用的使用者AMI可能可以將其重新綁定並註冊為自己的 。請按照以下準則幫助您避免一些容易遭到忽視的安全風險:
-
建議使用
--exclude
的directory
ec2-bundle-vol
選項跳過含有您不想加入到套件內之機密資訊的任何目錄和子目錄。特別是,在捆綁映像時,排除所有使用者擁有的SSH公有/私有金鑰對和SSHauthorized_keys
檔案。Amazon 公有將這些AMIs內容存放在 中/root/.ssh
,適用於根使用者,/home/
以及一般使用者。如需詳細資訊,請參閱ec2-bundle-vol。user_name
/.ssh/ -
綁定前務必刪除 shell 歷程記錄。如果您嘗試在相同的 中上傳多個套件AMI,則 Shell 歷史記錄會包含您的存取金鑰。以下範例應該是您在從執行個體內綁定之前執行的最後一項命令。
[ec2-user ~]$
shred -u ~/.*history
警告
上面警告中提及的
shred
限制同樣適用於此處。請注意,bash 會在退出時將目前工作階段的歷程記錄寫入到磁碟。如果您在刪除
~/.bash_history
後登出執行個體,然後再重新登入,您會發現~/.bash_history
已重新建立,並包含在先前工作階段中執行的所有命令。bash 以外的其他程式也會將歷程記錄寫入到磁碟。請小心使用,並移除或排除不必要以點開頭的檔案或以點開頭的目錄。
-
綁定執行中的執行個體需要您的私有金鑰和 X.509 憑證。因此請將這些憑證和其他登入資料放在不會加入綁定的位置 (例如執行個體存放區)。