web-dev-qa-db-ja.com

「chmod -R 777 /」はなぜ破壊的ですか?

これは 標準的な質問 ファイルのアクセス許可についてであり、理由777は「破壊的」です。

私はこの問題を修正する方法を尋ねていません。すでにサーバー障害(OSの再インストール)に関する参照が大量にあるためです。なぜ破壊的なことをするのですか?

このコマンドを実行したことがある場合は、オペレーティングシステムがすぐに破壊されます。制限の削除が既存のプロセスに影響を与える理由は明らかではありません。たとえば、何かへの読み取りアクセス権がなく、ターミナルですばやくタイプミスした後、突然私は適切にアクセスできるようになった場合...なぜLinuxが壊れるのですか?

258
samwise

まず最初に、マイナーな用語のnitpick:chmodは権限を削除しません削除。それ[〜#〜]変更[〜#〜]それらを変更します。


問題の要点-モード777は、「誰でもこのファイルを読み取り、書き込み、または実行できる」ことを意味します-誰でもできる権限が与えられています (事実上)彼らが望むものは何でも。

さて、なぜこれが悪いのですか?

  1. システムのすべてのファイルを全員に読み取り/変更させるだけです。
    • パスワードセキュリティに別れを告げる(だれでもシャドウファイルを読み取ってパスワードを解読することができますが、なぜわざわざ?パスワードを変更するだけです!はるかに簡単です!)。
    • バイナリのセキュリティに別れを告げましょう(誰かが新しいloginプログラムを書いて、毎回それらを許可するようにすることができます)。
    • ファイルに別れを告げる:1人のユーザーがrm -r /を誤って送信すると、それはすべて終わりです。 OSは、彼らに彼らがやりたいことを何でもできるように言われた!
  2. 開始前にファイルのアクセス許可をチェックするすべてのプログラムに腹を立ててきました。
    Sudosendmail、および他のホストはこれ以上起動しません。彼らは主要なファイルのアクセス許可を調べ、本来の権限ではないことを確認し、エラーメッセージを返します。
    同様にsshはひどく壊れます(キーファイルには特定の権限が必要です。そうでない場合、それらは「安全でない」ため、デフォルトでSSHはそれらの使用を拒否します)。
  3. あなたはそれらを持っているプログラムのsetuid/setgidビットを一掃しました。
    モード777は実際には0777です。その先頭の数字には、setuidビットとsetgidビットがあります。
    setuid/setgidであるほとんどのプログラムは、特定の特権で実行する必要があるため、そのビットが設定されています。彼らは今壊れています。
  4. あなたは/tmp/var/tmpを壊しましたゼロになった先頭の8進数字のもう1つはsticky bitです-これは/tmp(および/var/tmp)内のファイルを削除しないように保護しますそれらを所有します。
    (残念ながら)rm -r /tmp/*を実行して「クリーンアップ」する不正なスクリプトがたくさんあります。/tmpにスティッキービットを設定しないと、そのディレクトリのすべてのファイルにキスできます。
    スクラッチファイルを消去すると、不適切に記述されたプログラムが本当に混乱する可能性があります...
  5. /dev/procと同様のファイルシステムで大混乱を引き起こしました
    これは、/devが実際のファイルシステムである古いUnixシステムでの問題であり、それに含まれるものはmknodで作成された特別なファイルです。これは、アクセス許可の変更が再起動後も保持されるためです。デバイスのアクセス許可が変更されているシステムでは、明らかなセキュリティリスク(誰でもすべてのTTYを読み取ることができる)から、カーネルパニックのそれほど明白ではない潜在的な原因まで、重大な問題が発生する可能性があります。
    Credit to @Tonny for pointing out this possibility
  6. ソケットとパイプが壊れるか、他の問題が発生する可能性がありますソケットとパイプが完全に壊れるか、または誰でも書き込み可能になった結果、悪意のあるインジェクションにさらされる可能性があります。
    Credit to @Tonny for pointing out this possibility
  7. システムのすべてのファイルを実行可能にしました
    多くの人がPATH環境変数に.を持っています(あなたがすべきではありません!)-これは、誰もがコマンドのように便利な名前のファイルをドロップできるようになるため、不愉快な驚きを引き起こす可能性があります(たとえばmakeまたはlsにアクセスして、悪意のあるコードを実行する方法を試してください。
    Credit to @RichHomolka for pointing out this possibility
  8. 一部のシステムではchmodがアクセス制御リスト(ACL)をリセットします]
    これは、あらゆる場所で権限を修正することに加えて、すべてのACLを再作成しなければならない可能性があることを意味します(破壊的なコマンドの実際の例です)。
    Credit to @JamesYoungman for pointing out this possibility

すでに稼働しているシステムの一部は稼働し続けますか?おそらく、少なくともしばらくは。
しかし、次にプログラムを起動したり、サービスを再起動したりする必要があるとき、または天国は、上記の#2と#3が醜い頭を育てるので、傷ついた世界のためにあなたがいるボックスをREBOOTすることを禁じます。

348
voretaq7

主要なことの1つは、ssh/Sudoのような、主要な構成ファイルのファイルシステム権限をチェックする多くのツールがあることです。権限が間違っていると、これらのツールは失敗するように設計されています。これは、深刻なセキュリティ問題を示しているためです。私のDebianテストシステムや他のシステムでは、おそらくログインバイナリまたはPAM内の何かに権限チェックがあるため、ログイン機能が失敗します。

つまり、システムが破壊されるということではありません。多くのツールは、権限が間違っているとすぐに失敗するように設計されています。

chmod 777 -R /の実行後にシステムを再起動すると、システムが起動し、明示的な権限チェックのないプロセスを開始できます。したがって、システムは実際には死んでおらず、多少使用できないby-designです。

102
Zoredache