web-dev-qa-db-ja.com

AmazonEC2インスタンスでSudo / suを失った

AmazonEC2インスタンスがあります。ログインは問題ありませんが、「su」も「Sudo」も機能しません(以前は問題なく機能していました)。

  • 「su」はパスワードを要求しますが、sshキーを使用してログインし、rootユーザーでさえhasパスワードだとは思いません。

  • 「須藤<anything> "これを行います:


Sudo: /etc/sudoers is owned by uid 222, should be 0 
Sudo: no valid sudoers sources found, quitting 

私はおそらく「chownec2-user/etc/sudoers」(または、rsyncの失敗にうんざりしていたので「chown-R ec2-user/etc」)を実行したので、これは私のせいです。

どうすれば回復できますか?インスタンスを停止し、AWS EC2コンソールで[ユーザーデータの表示/変更]オプションを試しましたが、これは役に立ちませんでした。

編集:私はこのインスタンスを強制終了して新しいインスタンスを作成できることに気付きましたが、極端なことは避けたいと思っていました。

8
barrycarter

そのような状況では、問題を修正するために2番目のインスタンスを使用できるはずだと思います。

  • 壊れたシステムを含むEBSディスクを取り外します
  • 別のEC2インスタンスを作成します
  • ディスクを新しいインスタンスに接続してマウントします
  • 権限を修正する
  • 元のインスタンスへのアンマウント、デタッチ、再アタッチ
8
varesa
  1. 現在のインスタンスを停止します
  2. 既存のボリュームを切り離します
  3. 新しいボリュームを作成する
  4. 「/ dev/xvda」としてインスタンスに新しいボリュームをアタッチします
  5. インスタンスを開始します
  6. 「/ dev/sdf」として実行されている間に、古いボリューム(Sudo特権の問題があるボリューム)をインスタンスにアタッチし直します
  7. PuTTYを使用してインスタンスにログインします
  8. lsblkコマンドを使用して、使用可能なディスクデバイスとそのマウントポイント(該当する場合)を表示し、使用する正しいデバイス名を決定します。

      ec2-user ~$ lsblk
      NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
      xvdf 202:80 0 100G 0 disk
      xvda1 202:1 0 8G 0 disk /
    

Lsblkの出力は、完全なデバイスパスから/ dev /プレフィックスを削除します。この例では、/dev/xvda1はルートデバイスとしてマウントされ(MOUNTPOINTはLinuxファイルシステム階層のルートである/としてリストされていることに注意してください)、/dev/xvdfが付いていますが、まだ取り付けられていません。

  1. 次のコマンドを使用して、ボリュームのマウントポイントディレクトリを作成します。マウントポイントは、ファイルシステムツリー内のボリュームが配置されている場所であり、ボリュームをマウントした後にファイルの読み取りと書き込みを行う場所です。/dataなどのmount_pointの場所を置き換えます。

    Sudo su
    cd /mnt
    mkdir other
    mount /dev/xvdf other
    cd /
    chown -R root:root /mnt/other/etc/
    exit
    
  2. AWSに戻り、インスタンスを停止します

  3. 両方のボリュームを切り離し、古い(現在は修正されている)ボリュームを/ dev/xvdaとして再接続します
  4. インスタンスを起動すると、権限が元の状態に戻るはずです。
5
Rekee

私も同じ問題を抱えていましたが、とても難しいので、解決策を説明するビデオを作りました。これは、ビデオチュートリアル形式のRekeeのソリューションとほとんど同じです。

http://youtu.be/gh5CDtRX7Ho

それが役に立てば幸い。 :)

1

自分で答えたようです...

私はおそらく「chownec2-user/etc/sudoers」(または、rsyncの失敗にうんざりしていたので「chown-R ec2-user/etc」)を実行したので、これは私のせいです。

いずれにせよ、ルートシェルを取得せずにこれを解決できるとは思いません。 (ec2でどのようなリカバリ方法が可能かわかりませんか?)

/ etcを再帰的にchownした場合は、サーバーを再構築するのが最善の方法だと思います。

0
Pricey