時々 (多くの場合、長い間)、Linux マシンを完全に壊してしまうコマンドを実行するという問題に遭遇します。
つい最近、ルート パーティションを誤ってマウントし (フォーマットしたばかりの新しい USB ドライブだと思い込んで)、その後、パーティションを再帰的に chown して自分自身にしました (これも、USB ドライブへのユーザー アクセスを自分に許可しようとしただけです)。自分が何をしたのかに気付いた直後 (進行中) に中止しましたが、被害は発生しました。多くのコア プログラムはルート所有ではなくなったため、マシンは実質的にゾンビ状態になりました。一部のユーザー機能 (ssh、rsync) は引き続き機能していましたが、管理レベルのものは完全にロックアウトされていました。マウント、アンマウント、スクリーン セッションへの再接続、再起動などはできませんでした。
もしこのマシンが私の家のリビングにあったら、それを「修理」(再インストール)するのはとても簡単だったでしょう。しかし、そうではありません。マシンは私の兄の家にあります。兄は私が修理や再インストールの手順を案内することをあまり好みませんし、私もその気持ちは理解しています。そこで、数日後に兄の家に行って、私が引き起こしたダメージを修復するつもりです(そして、できれば、管理者のミスに強いものをインストールします)。
私がここまで述べたのは、次の質問をするためです。管理者の不手際に対してインストールを強化するための推奨される方法は何ですか?
考慮されなかったもの、または考慮されてもすぐに放棄されたもの:
- 管理者が愚かなコマンドを実行しないように強化する: 素晴らしいアイデアですが、うまくいきません。なぜなら、人間である私は、後になって悪いアイデアだと気づくようなことを時々行うからです。私がやろうとしているのは、事前に自分の考えをまとめておくことです。そうすれば、愚かなことをしたときにマシンが拒否し、私は「やばい! それはとても悪い (TM) かもしれない! 二度とそんなことはしないようにしよう」と気づくでしょう。
私が検討した点:
- ルート パーティションを読み取り専用でマウントします。これにより、ルートが変更されるのを防ぐことができます。変更は、一部が書き込み可能であると予想されていても実際には書き込み可能でない場合、悪影響を及ぼす可能性があります。また、パーティションが他の場所に読み取り/書き込み可能として再度マウントされることを必ずしも防ぐわけではありません。
- 何らかの圧縮された読み取り専用ルート イメージを使用し、その上にユニオンのような書き込み可能なレイヤーを配置します。これにより、ルートに実際に変更が加えられることはなく、再起動によってエラーがクリアされます。ルートに変更を加える必要がなく、/etc を他の場所にある永続的なファイルから再読み込み/設定できる場合は、これで問題ありません。
- 定期的な(おそらく毎日)スナップショットで btrfs を使用すると、エラーが発生した場合の回復が容易になります。直接のユーザー介入が必要になるため、最適ではない可能性があります。また、他の人に変更を説明すれば、エラーをロールバックできるかどうかもわかりません。
- より一般的なディストリビューションではなく、安定性、予測可能性、セキュリティを考慮して設計された、より「ライブ」/「組み込み」のLinux/BSDディストリビューションを使用します。
現状では、オプション 4 を使用して、これまで使用していた完全な Debian インストールよりもやや制限されたシステムをインストールすることになりそうです。しかし、単なるファイル サーバーと Torrent クライアントとしては問題なく動作するはずですし、リモート マシンとして、マシンを自分自身から守ることはかなり大きな利点です。
答え1
厳しい現実は、自分の愚かさから身を守るものは何もないということです。DWIM (do what I mean) インターフェースはありません。コンピューターは意図的なものと偶発的なものを区別できません。どれだけ抽象化を積み重ねても、間違ったコマンドがすべてを台無しにする可能性があります。
簡単な答えはゆっくりして、自分が何をしているかに注意を払ってください。
答え2
仮想マシンでインストールを実行します。既知の良好な状態のスナップショットを作成します。リスクのあることを行う前にスナップショットを作成します。ホスト環境ではほとんど何も行わないでください。失敗した場合は、ホスト環境に接続してスナップショットを復元します。
答え3
自分で自分の足を撃ってしまうのを防ぐものは何もありません。ルート パーティションを USB スティックだと「考え」てしまったのです。重要なマシンを使い捨ての VM と間違えてしまう可能性も同じくらいあります (誰にでも起こり得ることです)。
重要なのは、コンピューターが提供するサービスを冗長化することです。
この場合、2 つの Linux バージョンを 2 つの別々のパーティションにインストールできます。弟にもう 1 つのパーティションで起動するように指示できます。(単なるアイデアです)
最も重要なのは、バックアップを取り、復元戦略を立てることです。
この場合、兄弟の PC の責任はあなたが負うことになりますので、可能な限りのデータのバックアップを継続的に取り、複数のコピーを保管しておく必要があります。
また、SSH サーバーとパスワードが設定された USB Linux ドライブを弟に提供して、そこから起動することもできます。そして、弟の PC を USB から起動するように設定します。そうすれば、緊急時には、弟に USB スティックを挿入して PC を再起動するように依頼するだけです。
答え4
ルート ユーザーとして操作しないでください。通常のアカウントでルート操作を実行できるように sudo を設定しますが、パスワードが必要です。これにより、実際に何をしているのかを確認する最後のチャンスが得られます。
ただし、root として実行する場合は、対話型の使用を強制する一般的なコマンドのエイリアスを設定します。たとえば、削除前にプロンプトalias rm="rm -i"
を表示します。本当に必要な場合は、(意識的な決定)rm
を使用して明示的に上書きできます(その場合は になります)。 -f
rm *
rm -f *
USB 上の FS が何であるかは述べていません。通常は VFAT です。オプションを使用してこれらをマウントすると、すべてのファイルが特定のユーザーによって所有されているように見せることができます。そうすれば、実際に実行する必要がなくなりchown -r ...
、間違いの可能性がなくなります。
ルート シェルのプロンプトを赤色にして、昇格された権限で実行していることを通知します。
一般的に、パスワードプロンプトなどの障害により、root として操作することが困難になります。
さて、事後にこれを修正するには、同様の別のマシンにアクセスし、 を使ってfind
SUID/SGID プログラムを表示することができます。次に、コマンドを使用して、破損したディスクをそのディスクと一致させますchmod
。