AWS re:Postを使用することにより、以下に同意したことになります 利用規約

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

所要時間2分
0

Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスで sudo コマンドを実行しようとすると、「sudo: /usr/bin/sudo must be owned by uid 0 and have 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 です。これにより、所有者とグループはファイルを読み取ることができ、誰もがファイルに書き込むことができなくなります。

EC2 シリアルコンソールまたはユーザーデータスクリプトを使用して、これらのエラーを修正できます。

解決方法

方法 1: EC2 シリアルコンソールを使用する

Linux 用 EC2 シリアルコンソールをアクティブ化した場合は、それを使用して、サポートされている Nitro ベースのインスタンスタイプのトラブルシューティングを行うことができます。シリアルコンソールは、起動の問題、ネットワーク設定、および SSH 設定の問題のトラブルシューティングに役立ちます。シリアルコンソールは、正常に動作するネットワーク接続を必要とすることなく、インスタンスに接続します。シリアルコンソールには、Amazon EC2 コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を使用してアクセスできます。

シリアルコンソールを使用する前に、アカウントレベルでコンソールにアクセス権を付与します。その後、IAM ユーザーにアクセス権を付与する AWS Identity and Access Management (IAM) ポリシーを作成します。また、シリアルコンソールを使用するすべてのインスタンスには、パスワードベースのユーザーを 1 つ以上含める必要があります。インスタンスが到達不能で、シリアルコンソールへのアクセスが設定されていない場合は、「方法 2: ユーザーデータスクリプトを使用する」のセクションにある手順に従ってください。Linux 用の EC2 シリアルコンソールの設定の詳細については、「EC2 シリアルコンソールへのアクセスを設定する」を参照してください。

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

方法 2: ユーザーデータスクリプトを使用する

ユーザーデータスクリプトを使用して、次のエラーを修正します。

  • SUSE、CentOS、Amazon Linux 1、Amazon Linux 2、RHEL など、Red Hat ベースのディストリビューション。
  • Debian ベースのディストリビューション (Ubuntu など)。

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

2.    [Actions] (アクション)、[Instance State] (インスタンス状態)、[Stop] (停止) の順に選択します。

注: [Stop] (停止) がアクティブ化されていない場合は、インスタンスが既に停止しているか、そのルートデバイスがインスタンスストアボリュームになっています。

3.    [Actions] (アクション)、[Instance Settings] (インスタンス設定)、[Edit user data] (ユーザーデータを編集) の順に選択します。

4.    次のスクリプトをコピーして [Edit 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
find /etc/sudoers.d/ -type f -exec /bin/chmod 0440 {} \;
find /etc/sudoers.d/ -type f -exec /bin/chown root:root {} \;
--//

注: 最後の 2 つのコマンドラインは、ディレクトリ「/etc/sudoers.d/」にあるカスタム 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
/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 {} \;
--//

注: 最後の 2 つのコマンドラインは、ディレクトリ「/etc/sudoers.d/」にあるカスタム sudo セキュリティーポリシープラグインの許可、所有者、およびグループを復元します。

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

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


AWS公式
AWS公式更新しました 9ヶ月前