WordPressでサイト作ったけど、SSH接続できなくなりました!
っていうヘルプがきたので対処してみました。
historyに残ってた最後のコマンド***(絶対うたないでね)***
sudo chown -R ec2-user /
恐怖ですね...数年に一度は見るLinux事故です。
以下、私が対処した流れです。
あくまで私が対処した流れで、ベストな手順ではないので注意してください。
実施の前にはデグレを防ぐため、スナップショットを取得しておきましょう。
###①全体的なパーミッションの変更(実際に対処するときは項目4までで良いかも?)
不幸中の幸いか、EBSはデタッチ/アタッチができるので復旧の余地が大いにあります。
1、EC2停止→EC2→ボリューム→該当のボリュームを選択→アクション→デタッチ
2、アタッチ→復旧用のインスタンス(停止済)を選択
復旧用インスタンスを用意します。
復旧用インスタンスは同じAZであること。
この時/dev/以下はデフォルトでOK。
3、復旧用インスタンスにログインし、マウント用ディレクトリ作成
作成はどこでもいいです。私はわかりやすくルート配下に作りました。
mkdir ディレクトリ名
4、マウント
ここでアタッチ時の/dev/XXXXを確認
cat /proc/partitions
マウント
mount /dev/XXXX ディレクトリ名
5、パーミッション変更(実際に変更するかどうかは検討してください)
ec2-userにかえられてしまったディレクトリをrootに戻しました。
chown -R root XXX
6、EBSの戻し(実際にやるのは③の後でOK)
1と2を元のインスタンスに対して実行します。
このときボリュームは起動用ボリュームになる**/dev/xvda**を選択すること。
この時点でログインのエラーがかわるだけで、まだログインできてません。
###②/home/ec2-user 配下のパーミッション変更
以下のbashやssh関連の隠しファイルをユーザーをそれぞれec2-userに戻しました。
.bash_history .bash_logout .bash_profile .bashrc .ssh
隠しファイル確認
ls -la
パーミッション変更
chown -R ec2-user XXX
この時点でとりあえずSSHログインができます。
###③sudoの復活
ログインはできましたが、sudoが使えません。
sudo: /usr/bin/sudo は所有者が uid 0 である必要があり、かつ setuid が設定されている必要があります
/usr/binの下にいるsudoの権限を変更します。
chmod 4111 /usr/bin/sudo
頭の4でSUIDになります。
これでファイル所有者権限で動作させることができるようになるみたいです。
実際にsudoの実行、rootユーザへの切り替えができるようになります。
ここまでくれば以降はボリュームのデタッチ、アタッチ不要なので楽になりました。
###④MySQLの復活
WordPressで使われるMySQLがあがらなくなっていたので、ここも最後に権限変更が必要です。
1、systemctlでエラー確認
systemctl status mysqld
わかりやすいログがでてました。
ログが出力できなくてあがらないようです。
[ERROR] [MY-010187] [Server] Could not open file '/var/log/mysqld.log'
2、/var/log/mysqld.logの権限変更
これも権限問題です。
chown mysql:mysql mysqld.log
※mysqld.logに/var/lib配下のエラーもでていたので、
以下のディレクトリもchown mysql:mysqlしています。
mysql mysql-files mysql-keyring
3、MySQL起動
systemctl start mysqld
これで無事WordPressのサイトが見れるようになりました!
デタッチ/アタッチを繰り返しながら検証していたので、結構大変でした...
参考にした記事
EBSデタッチ/アタッチ
https://qiita.com/hardreggaecafe/items/de9bac1d9ba42f25378e
sudoの復活
https://qiita.com/lmond/items/33cd8f6d58e4932f589f
感謝です。