古典的な誤り
誤って、sudo chown -R ubuntu:www-data /
Ubuntu 20.04 AWS EC2 サーバーで実行してしまいました。マシンを修復できず、新しいマシンを再インストールする必要があることを示す投稿が多数ありますが、このサーバーで実行されている postgres のコピーを取得したいと考えています。現在、sudo を使用してコマンドを実行できませんでした。そのため、postgres を起動したり、phppgadmin 経由でログインしたりできませんでした。
私たちは次のことを行いました:
- インスタンスを停止しました
- ボリュームを切り離しました
- 新しいインスタンスを作成しました
- ボリュームを添付しました
- ボリュームをマウントしました
- 新しいインスタンスでルートに変更されました
chown -R root:root /mnt/rescue
(これをroot:ubuntu
、などに変更しましたubuntu:ubuntu
)- しました
chmod -R 4755 /mnt/rescue
(また0755
、、ug-s
などもしました) - ルートを終了しました
umount /mnt/rescue
- レスキューインスタンスをシャットダウンする
- ボリュームを切り離す
- 破損したマシンにボリュームを接続します。マシンは新しい所有者を示しますが、sudo は機能しません。
- 新しいインスタンスを作成して、この修正されたボリュームを接続し、/etc/fstab を更新して、インスタンスを再起動しました。ボリュームはマシンとマージされました。再起動後も、同じ問題が続き、sudo が実行できません。
マシンを再作成したり、バックアップを取って復元したりすることは可能です。ただし、一部のミッション クリティカルなデータは postgres に存在します。sudo を実行するか、または停止した postgres からファイルを取得するにはどうすればよいでしょうか。
私たちは常に次のエラーに直面しています:
sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set
ただし、/usr または /usr/bin 内から任意の場所で ls -l を実行すると、すべてのファイルの所有権全体が ubuntu:ubuntu または試した他の組み合わせのままになります。
答え1
setuidビットを設定して、sudoのデフォルトの権限(rws)であるrootで実行できるようにしてください。
chmod u+s /mnt/rescue/usr/bin/sudo
chmod +x /mnt/rescue/usr/bin/sudo
これはシステムの復旧には役立ちますが、権限や所有権が異なるファイルやディレクトリが他にも多数存在し、それらを個別に設定するのが面倒な場合があります。