EC2 Linux インスタンスで sudo コマンドを実行できないのはなぜですか?

最終更新日: 2020 年 3 月 27 日

Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスで sudo コマンドを実行しようとすると、「sudo: /usr/bin/sudo be owned by uid 0 and the setuid bit set」または「sudo: /etc/sudoers is world writable」というエラーが表示されます。この問題を解決する方法を教えてください。

簡単な説明

エラー sudo: 「/usr/bin/sudo must be owned by uid 0 and have the setuid bit set」は、非 root ユーザーが /usr/bin/sudo ファイル所有している場合に発生します。/usr/bin/sudo ファイルの所有者として root:root が必要です。

エラー「sudo: / etc/sudoers is world writable」は、 /etc/sudoers ファイルのアクセス許可が正しくない場合に発生します。sudoers ファイルは誰でも書き込み可能であってはなりません。ファイルが誰でも書き込み可能な場合、ファイルに書き込める人に制限がかかりません。デフォルトでは、sudoers ファイルのファイルモードは 0440 です。これにより、所有者とグループはファイルを読み取ることができ、誰もがファイルに書き込むことができなくなります。

これらのエラーは、ユーザーデータスクリプトを使用して、SUSE、CentOS、Amazon Linux 1、Amazon Linux 2、RHEL または Debian ベースのディストリビューション (Ubuntu など) などの Red Hat ベースのディストリビューションで修正できます。

解決方法

1.    Amazon EC2 コンソールを開き、インスタンスを選択します。

2.   [Actions]、[Instance State]、[Stop] の順に選択します。

注: [Stop] が無効になっている場合は、インスタンスがすでに停止しているか、そのルートデバイスがインスタンスストアボリュームになっています。

3.     [Actions]、[Instance Settings]、[View/Change User Data] の順に選択します。

4.     次のスクリプトをコピーして [User Data] フィールドに貼り付けて、[Save] を選択します。必ずスクリプト全体をコピーしてください。スクリプトを貼り付けるときに、追加のスペースを挿入しないでください。

Red Hat ベースのディストリビューション

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
--//

Debian ベースのディストリビューション

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
--//

5.    インスタンスを起動し、SSH を使用してインスタンスに接続します

注: sudoers ファイルを編集した後に SSH を使用してインスタンスに接続しようとすると構文エラーが発生する場合は、EC2 インスタンスで sudoers ファイルを編集して、 sudo コマンドを実行しようとすると、構文エラーを受け取ります。この問題を解決する方法を教えてください


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合