Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
為什麼我不能在 EC2 Linux 執行個體上執行 sudo 命令?
當我在 Amazon Elastic Compute Cloud (Amazon EC2) Linux 執行個體上執行 sudo 命令時,收到錯誤。
簡短描述
當您嘗試在 Amazon EC2 Linux 執行個體上執行 sudo 命令時,可能會發生下列錯誤:
- 「/usr/bin/sudo must be owned by uid 0 and have the setuid bit set」
在非根使用者擁有 /usr/bin/sudo 檔案時,會發生此錯誤。/usr/bin/sudo 檔案的擁有者必須是 root:root。
- 錯誤 "sudo: /etc/sudoers is world writable"
在 /etc/sudoers 檔案具有不正確的許可時,會發生此錯誤。sudoers 檔案不能為全域可寫入。如果檔案為全域可寫入,則每個人都可以寫入此檔案。依預設,sudoers 檔案的檔案模式為 0440。這可讓擁有者和群組讀取檔案,並禁止任何人寫入檔案。
若要更正這些錯誤,請使用 Amazon EC2 序列主控台或使用者資料指令碼。
解決方法
使用 EC2 序列主控台
如果您已啟用適用於 Linux 的 EC2 序列主控台,可以使用它來對支援的 Nitro 型執行個體類型進行疑難排解。序列主控台可協助您對開機問題、網路組態和 SSH 組態問題進行疑難排解。序列主控台無需正常運作中的網路連線,就能連線至您的執行個體。您可以使用 Amazon EC2 主控台或 AWS Command Line Interface (AWS CLI),來存取序列主控台。
使用序列主控台之前,先在帳戶層級授予對主控台的存取權。然後,建立 AWS Identity and Access Management (AWS IAM) 政策,以授予 IAM 使用者存取權。此外,每個使用序列主控台的執行個體都必須包含至少一個密碼型使用者。如果您無法存取執行個體或序列主控台,請遵循方法 2: 使用使用者資料指令碼部分中的指示進行操作。如需有關設定適用於 Linux 的 EC2 序列主控台的詳細資訊,請參閱設定 EC2 序列主控台的存取權。
**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確定您使用的是最新版本的 AWS CLI。
使用使用者資料指令碼
使用使用者資料指令碼來修正下列發行版上的 sudo 錯誤:
- Red Hat 型發行版,例如 SUSE、CentOS、Amazon Linux 1、Amazon Linux 2、Amazon Linux 2023 和 RHEL
- Debian 型發行版,例如 Ubuntu
**重要:**此程序要求您停止並啟動 EC2 執行個體。這可能會導致資料遺失、其他停止的執行個體,以及公有 IP 位址變更。如需詳細資訊,請參閱停止執行個體時會發生何種情況。
-
開啟 Amazon EC2 主控台,然後選取您的執行個體。
-
選擇動作、執行個體狀態、停止。
注意:如果您無法選擇停止,則表示執行個體已停止,或者其根裝置是執行個體儲存體磁碟區。 -
選擇動作、執行個體設定、編輯使用者資料。
-
將下列指令碼複製並貼上編輯使用者資料欄位中,然後選擇儲存。請務必複製整個指令碼。貼上指令碼時,請勿插入額外的空格:
Red Hat 型發行版Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 --// Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="cloud-config.txt" #cloud-config cloud_final_modules: - [scripts-user, always] --// Content-Type: text/x-shellscript; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="userdata.txt" #!/bin/bash PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: rpm --setugids sudo && rpm --setperms sudo find /etc/sudoers.d/ -type f -exec /bin/chmod 0440 {} \; find /etc/sudoers.d/ -type f -exec /bin/chown root:root {} \; --//
**注意:**最後兩個命令列會復原目錄 /etc/sudoers.d/ 中自訂 sudo 安全政策外掛程式的許可、擁有者和群組。
Debian 型發行版Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 --// Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="cloud-config.txt" #cloud-config cloud_final_modules: - [scripts-user, always] --// Content-Type: text/x-shellscript; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="userdata.txt" #!/bin/bash /bin/chown root:root /usr/bin/sudo /bin/chmod 4111 /usr/bin/sudo /bin/chmod 644 /usr/lib/sudo/sudoers.so /bin/chmod 0440 /etc/sudoers /bin/chmod 750 /etc/sudoers.d find /etc/sudoers.d/ -type f -exec /bin/chmod 0440 {} \; find /etc/sudoers.d/ -type f -exec /bin/chown root:root {} \; --//
最後兩個命令列會復原目錄 /etc/sudoers.d/ 中自訂 sudo 安全政策外掛程式的許可、擁有者和群組。
重要:****/usr/bin/sudo 的許可在不同的 Linux 發行版中有所不同。在永久設定許可之前,從具有類似作業系統的執行個體驗證許可。執行 ls -l /usr/bin/sudo,然後使用此範例中的許可作為參考。
請確定您的參考執行個體是全新安裝而不是在生產環境,以便此檔案保持不變。 -
啟動執行個體,然後使用 SSH 連接至執行個體。
**注意:**如果您收到語法錯誤,請參閱我在 EC2 執行個體上編輯了 sudoers 檔案,現在嘗試執行 sudo 命令時收到語法錯誤。該如何修正此問題?
相關內容
- 已提問 2 年前lg...
- 已提問 5 個月前lg...
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 4 個月前
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 個月前