2
1

仮想環境のLinuxサーバーでrootパスワードを忘れた場合のリカバリー手順

Last updated at Posted at 2024-09-06

はじめに

実務の中で、重要なLinuxサーバーのrootパスワードを紛失してしまう事態が発生しました。

さらに、sudoersファイルに構文エラーが生じ、sudoコマンドが使用できないという厳しい条件下での解決が求められました。

前提条件

今回の前提条件は、以下となります。
・Amazon EC2: Red Hat Enterprise Linux (RHEL8)
・特権権限の「rootユーザ」のパスワード紛失: rootユーザでのログイン不可
・一般ユーザ: ssm-userでログインし管理者権限以外の操作は可能
・sudoersファイルに構文エラー: sudoコマンドが使えない
・sudoersファイルの編集: visudoコマンドなど管理者権限が必要

やりたいこと

今回発生した事象について、解決のためにやりたいことは以下の順序で作業を実施していきます。

1.リカバリー用のEC2を起動
2.パスワードを紛失したEC2のEBSを二次ボリュームとしてアタッチし、マウント
3.sudoersファイルの構文エラーを解消し、ssm-userでsudoコマンドを使用できるように修正
4.リカバリー用のEC2から二次ボリュームをデタッチし、元のEC2に再アタッチ
5.ssm-userでsudoコマンドを使い、rootユーザのパスワードを変更

解決策

以下、AWSのre:Postで紹介されていた手順を参考に問題を解決しました。
https://repost.aws/ja/knowledge-center/ec2-sudoers-syntax-errors-sudo

※sudoersファイルの修正はご自身の環境に合わせて実施してください。

手順の流れ

・同じVPC内にリカバリー用のEC2を作成し、起動
→パスワード紛失したEC2インスタンスと同じ環境で構築するのが望ましい

・パスワード紛失したEC2インスタンスを停止
→EC2のサービス画面からインスタンスの状態を「停止」にする

・パスワード紛失したEC2のルートボリュームをデタッチ
→EBSのサービス画面からデタッチする
参考画面
スクリーンショット 2024-09-07 7.14.06.png

・ルートボリュームをリカバリーインスタンスに二次ボリュームとしてアタッチ
→EBSのサービス画面からデタッチしたボリュームをリカバリー用のEC2に二次ボリュームとしてアタッチする
参考画面
スクリーンショット 2024-09-07 7.19.07.png

・アタッチされたボリュームをマウント
→以下のコマンドを実行して、アタッチされていることの確認およびマウントを行う

lsblk

出力結果の例:

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTxvda    202:0    0    8G  0 disk
└─xvda1 202:1    0    8G  0 part /
xvdf    202:80   0  500G  0 disk
└─xvdf1 202:81   0  500G  0 part

マウントするディレクトリを作成し、管理者権限でマウントを行う
Amazon Linux、Ubuntu、Debian:

sudo mount /dev/xvdf1 /mnt

Amazon Linux 2023、Amazon Linux 2、CentOS 7 または 8、SUSE Linux 12、および RHEL 7.x または 8.x:

sudo mount -o nouuid /dev/xvdf1 /mnt

・sudoersファイルの構文修正および、ssm-userの権限変更
subdoers ファイルを編集するには、visudo コマンドを使い実行する

visudo

→sudoersファイルの構文エラーについては、AMIから復元時にエラーとなることが発覚したので、AMIから復元時に都度、修正を行う運用に変更いたしました。

※パスワードを紛失したEC2インスタンスのssm-userの権限変更を実施した箇所は、以下で紹介いたします。

・リカバリー用のEC2インスタンスからアンマウントを行い、パスワード紛失EC2に再度アタッチ
sudoersファイルの編集が完了後、以下のコマンドでアンマウントを実施する

for dir in {/dev,/dev/pts,/sys,/proc}; do umount /mnt$dir; donesudo umount /mnt

→マウントが解除されたことを確認し、パスワード紛失EC2にEBSをアタッチし、「ssm-user」で次のコマンドを使いパスワードをリセットする

sudo passwd root

まとめ

今回のトラブルは、重要なサーバーのrootパスワードの紛失とsudoersファイルの構文エラーという二重の問題が重なったものでした。

しかし、AWS EC2の特性を利用し、別のEC2インスタンスでルートボリュームをマウントすることで、問題を解決することができました。

何よりも、サーバー管理者として改めてrootパスワードの管理を徹底することが重要だと痛感しました。

おまけ

私の環境では、/etc/sudoersファイルを以下のように変更することで解決しました。

# Created by cloud-init v. 23.1.1-12.el9_3 on Sun, 25 Feb 2024 02:00:44 +0000

# User rules for ec2-user
#ec2-user ALL=(ALL) NOPASSWD:ALL

# User rules for ssm-user
ssm-user ALL=(ALL) NOPASSWD:ALL

この変更により、ssm-userがパスワードなしで全ての操作を行えるようになり、システム全体における管理者権限を持って操作できることとなります。

参考記事

https://repost.aws/ja/knowledge-center/ec2-sudoers-syntax-errors-sudo
https://jr4marine.hatenablog.com/entry/2020/11/23/232801
https://dev.classmethod.jp/articles/ec2-attach-to-another-volume/
https://aws.taf-jp.com/blog/52550
https://qiita.com/SAITO_Keita/items/909e2bdbeec04341fe32

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1