Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
為什麼我不能在 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 年前
- 已提問 3 年前
- 已提問 1 年前
- 已提問 1 年前

