web-dev-qa-db-ja.com

EC2で壊れた「etc / sudoers」所有権を修正するにはどうすればよいですか?

経歴:ノードを実行するためにPHPを取得しようとしましたが、おそらく必要以上のファイルとフォルダーのアクセス許可/所有権を変更することになりました。

ある時点で、/etc/sudoers/を設定するようにDefaults requirettyを変更するという誰かの提案に出くわしました。 nanoしようとしましたが、できませんでした。それで私はSudo chown ec2-user /etc/sudoersのアイデアを思いつき、それ以来この問題に悩まされてきました。

enter image description here

Nanoに戻ってテキストの変更を元に戻すことができましたが、ファイルの所有権が問題の原因になっています。

私は彼がここで最も一致する答えられた質問はこれだと思います:
AmazonWebサービスec2linux centOSでSudoが壊れています (ただし、これは解析エラー、私が想定しているファイルのタイプミスに関連しています)。

どうすればこれを修正できますか?このEC2インスタンスを永久に台無しにしましたか?

1
bigp

アマゾンのドキュメントを読むことは役に立ちましたが(@Ouroborusの回答によると)、私はついに自分が陥ったこの混乱を修復する方法を見つけました。

すべての手順を思い出せるかどうか見てみましょう...

  • 新しいインスタンスを準備する

    • 既存のインスタンスを可能な限り一致させる最も簡単な方法は、My AMIの下に移動し、問題のインスタンスで使用されているのと同じAMIイメージを選択することです。


      enter image description here

    • これはリカバリを目的とした単なるインスタンスであるため、Freeインスタンスタイプを選択します。

      enter image description here

    • このステップは非常に重要です!このリカバリインスタンスのサブネットマスクを問題のインスタンスと一致させてください(そうしないと、問題のEBSをリカバリインスタンスにマウントできません!難しい方法で見つかりました...)

      enter image description here

    • [次へ:ストレージの追加]をクリックし、そのページをそのままにして、[次へ:タグインスタンス]をクリックします。

    • [値]フィールドに「リカバリ」のように入力します(どのような名前でもかまいません。私の場合は、このインスタンスの目的をマークするだけです)。

      enter image description here

    • インバウンド/アウトバウンドセキュリティグループを作成するように求める最後のステップ/ポップアップが1つあるはずです。問題のインスタンスに対してすでに設定されているものと同じものを選択してください。つまり、同じSSHキーファイルを再利用して、このインスタンスにログインできます(PuTTYまたは任意のプログラムを介して)。

そのリカバリインスタンスが作成されたら...

  • EBSボリューム名を追跡するようにしてください(この一時インスタンス間で問題のボリュームをマウント/アンマウントしてから元のインスタンスに戻す必要があるため)。
  • problemインスタンスがボリュームにアクセスするパスをマークダウンします(例:/dev/xvda)。
  • さて、問題のインスタンスをStop(Terminateではありません!!!)します。
  • ブラウザを更新して、ブラウザが停止していることを確認する必要がある場合があります(数秒/分かかる場合があります)。
  • 次に、[EBSボリューム]セクションに移動します。

    enter image description here

  • 問題のあるインスタンスに現在接続されているボリュームをアンマウントします(右端の列の1つにstoppedとしてマークされたインスタンスのステータスが表示されます)。

  • 更新して、ボリュームが「使用可能」であることを確認します。
  • ボリュームを新しいリカバリインスタンスにマウントします(リストにリカバリインスタンスが表示されない場合は、上記の「サブネット」手順を見逃した可能性があります。そのサブネットに一致するように、リカバリインスタンスをもう一度やり直す必要があります。設定)。

  • 更新し、リカバリインスタンスで「使用中」になっていることを確認します。

  • 次に、楽しいコマンドラインの手順に進みます。

    • ログイン/ SSHでリカバリボックスにログインします(AWSのインスタンスセクションでリカバリインスタンスのIP /ホストアドレスを検索できます)。

    • 現在の作業ディレクトリをルートに設定します。
      cd /

    • 問題のあるEBSボリュームを保持するディレクトリを作成します。
      Sudo mkdir bad

    • マウント:Sudo mount /dev/xvdf /bad

      (注:これが機能しない場合は、私と同じ問題が発生している可能性があるため、代わりに次のことを試してください:Sudo mount /dev/xvdf1 /bad、この回答のおかげで https ://serverfault.com/a/632906/356372 )。

    • それがうまくいけば、その/badディレクトリにcdして、通常と同じファイル構造を見ることができるはずです。元の(現在問題のある)インスタンスにマウントされています。

    • 非常に重要次のいくつかの手順で、権限の変更を示すために./etcではなく/etcを使用していることに注意してください。このリカバリEBSボリュームではなく、/bad/etc/sudoersファイルの所有権です。壊れたボリュームは1つで十分ですよね?

    • 試してみてください:
      cd /bad
      ls -l ./etc/sudoers
      ...次に、次のようにします。
      stat --format %a ./etc/sudoers

    • このファイルの所有権やchmod値が実際に正しくないことを確認してください。

chownの所有権を修正するには、次のようにします。

Sudo chown root:root ./etc/sudoers

chmod値を修正するには、次のようにします。

Sudo chmod 0755 ./etc/sudoers

今では、手順を逆にするだけです!

  • それが終わったら、マウントを解除する時間:cd /
    Sudo umount /bad

  • AWS設定ページに戻り、「EBSボリューム」セクションに移動します。

  • fixedボリュームをRecoveryインスタンスからアンマウントします。
  • 更新して、availableであることを確認します。
  • 元のインスタンスにマウントし直します(忘れないでください。これらすべての手順の前に元のインスタンスが使用していたのと同じ/dev/whatever/ボリュームパスを使用してください)。
  • 更新して、in-useであることを確認します。
  • ここで、Instancesセクションに移動し、元のインスタンスをStartします。 (再起動には数秒/分かかる場合があります)。
  • すべて問題がなければ、EC2インスタンスにログインしてSSHで接続し、もう一度Sudoを使用できるようになります。

それがあなたのためにも働いたならおめでとう!

そうでなければ....私はそうです....とても申し訳ありませんがこれはあなたに起こっています:(

2
bigp

ええ、あなたはそれを本当にうまく壊しました。所有権のためにSudoを実行することはできず、AmazonのインスタンスはSudoアクセスなしでrootを許可しないように設定されています。

インスタンスの再起動が機能しなかった場合は、行った変更がアタッチしたEBSボリュームに保存されます。これを修正するには、別の新しいインスタンスを起動し、それを使用して、中断されたファイルがあるEBSボリュームをマウントおよび変更する必要があります。これを行うことは Amazon自身のドキュメントでここに説明されています および リンクした質問への回答に要約されています です。

これを修正した後、/etc/sudoersを再度編集する前に、/etc/sudoersがプリロードされたエディターにユーザーを配置するツールである visudo を読んでください。保存する前にサニティチェックを実行します。

2
Ouroborus