Linux権限障害を1回記録

2245 ワード

今日の誤操作を思い出すと本当に動悸がして、もう少しでシステムを再インストールするところだった./dataというディレクトリの所有者を変更しようとした結果、sudo chown zhi:zhi /が誤って実行され、システム全体の権限が現在のユーザーzhiにリセットされました.これで何が問題になりますか?このディスカッションを見てください:AskUbuntu:sudo権限エラーは、sudoコマンドが実行できず、SSHサーバが応答を停止し、ソフトウェアをインストールできず、リモートログインできません.残念なことに、このサーバはリモートホストであり、システムを直接再インストールしたり、root権限を修復したりすることはできません.今日作ったインフラが廃棄されると思って、本当に気分が悪いです.
この問題を解決するには、まず最高管理者権限の復元から始めます.現代のLinuxシステム、例えばUbuntu系は、sudoスキームを採用し、rootパスワードをランダムパスワードに設定しているため、直接suをrootに切り替えるのは現実的ではない.sudoを直接実行すると、次のようになります.
sudo: /usr/bin/sudo must be owned by uid 0

このエラーの多くは,/usrディレクトリまたはサブディレクトリの権限を誤って変更したためである.
解決の構想は簡単で、/usr/bin/sudoという命令の権限を復元することだ.1つの方法はrecovery modeに入ることです.このモードでは、基本的に好きなようにすることができます.詳細はAskUbuntu:sudo権限エラーを参照してください.しかし、リモートホストであれば、そうはいきません.では、いくつかの脆弱性を見つける必要があります.私は今回/dataという共有のNFSディレクトリから始めました(幸い前にNFSを構築する際に権限を設定していなかったので、そうしないとマウントできないかもしれません).
NFS共有ディレクトリは権限を保持できるため、別のマシンを使用してこのNFSディレクトリをマウントし、実行します.
$ sudo cp -a /usr/bin/sudo /data
$ sudo cp -a /usr/lib/sudo/* /data

すべての権限情報を保持するsudoコマンドおよび関連するライブラリファイルを取得します.
次に、元のホストで次のことを行います.
$ rm /usr/bin/sudo
$ mv /usr/lib/sudo /usr/local/lib/sudo.bak
$ ln -s /data /usr/lib/sudo
/usr/bin/sudoを削除し、/usr/libディレクトリを/dataに置き換えます.sudoコマンドを実行すると、実際には/usr/lib/sudoディレクトリを呼び出すライブラリに接続され、ライブラリファイルの権限がチェックされますが、/usr/lib/sudoディレクトリの形式や権限はチェックされず、脆弱性が感じられます.いずれにしても、今実行します.
$ /data/sudo

成功した!
次に、/data/sudoコマンドを使用して/usr/bin/sudoおよび/usr/lib/sudoをリカバリします.
$ /data/sudo cp -a /data/sudo /usr/bin/sudo
$ /data/sudo chown -R root:root /usr/lib/sudo.bak
$ /data/sudo cp -a /usr/lib/sudo.bak /usr/lib/sudo

これで、sudoコマンドの復元が完了しました.次に、元のUbuntuと照らし合わせて、残りの権限が間違っているディレクトリを元の権限に復元します.重要な権限の1つ:
$ sudo chown -R root:root /var/run/ssh*

SSHサービスを再開し、断線後に再接続できるようにします(ネットワークの状態は誰も予想できないので注意してください).その他のコマンドは、AskUbuntu:リカバリ/*ディレクトリ権限を参照してください.
原文は次のとおりです.http://yfwz100.github.io