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


255

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

サーバー障害(OSの再インストール)に既に多くの参照が存在するため、この問題を修正する方法を尋ねているわけではありません。なぜ破壊的なことをするのですか?

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


2
この質問を見たとき、私は息を止めました。
アリレザサヴァン

回答:


344

まず第一に、小さな用語nitpick:パーミッションを削除chmodしません。それはCHANGESそれらを。


問題の要点-モード777は「誰でもこのファイルの読み取り、書き込み、実行ができる」ことを意味します-あなたは誰でも(事実上)何でも好きなことを行うための許可与えました

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

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

すでに実行されているシステムの部分は引き続き実行されますか?おそらく、少なくともしばらくの間。
しかし、次にプログラムを起動する必要があるとき、またはサービスを再起動する必要があるとき、または上記の#2と#3がtheirい頭を立てるので、あなたが傷ついた世界のためにボックスを再起動するのを禁じます。


1
少なくとも一部のシステムで/tmpは、再起動後に修正されます。他の多くのすべてが壊れているように見えますが。少なくとも私がテストしたVMでは、再起動により/tmp権限が修正されたようです。起動スクリプトには何かがあるはずです。
ゾレダチェ

@Zoredacheシステムはtmpfs通常、それ自体を修正します。ディスクに/ tmpがあるシステム(起動スクリプトによって異なります)
voretaq7

45
setuidとsetgidが削除されることを指摘した+1。これは非常に破壊的な側面です。実行find / -perms -4000 -type ffind / -perms -2000 -type fて、これらのフラグに依存するさまざまなバイナリを確認してください。
カイルスミス

2
「less foo.txt」などのように入力しても、実行ビットが設定されているかどうかに関係なく、less.txtというファイルは実行されません。パスにless.txtディレクトリが含まれている必要があり、「less.txt foo.txt」と入力する必要があります-実際に偶然ではありません。シェル補完を使用していたとしても、停止は少なくなり、.txtを追加する必要があります。実行可能ビットが設定されたランダムテキストファイルを呼び出すには、。/ nameoffile.txtを使用する必要があります。
リアル法案

3
@Dejiはeveryone(:文字通り3進許可桁ファイルを所有しているユーザーは、ファイルを所有するグループのユーザー、およびそれらの基準のいずれかを満たしていないユーザーを含む集合の和集合として定義されUserGroup、およびOther)。言い換えれば、システムへのアクセス権を持つユーザー。(このコンテキストでの「アクセス」はシェルアカウントである可能性があり、これは通常の対処方法ですが、ディスクにデータを書き込むWebフォーム/ CGIを介したアクセスも含まれます。wwwユーザーはシステム上の任意のファイルに書き込むことができます、これはランダムな訪問者もできることを意味します。)
voretaq7

102

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

したがって、システムが破壊されるのは実際にはありません。多くのツールは、アクセス許可が間違っているとすぐに失敗するように設計されています。

実行後にシステムを再起動すると、システムchmod 777 -R /が起動し、明示的な権限チェックを持たないプロセスを開始できます。そのため、システムは実際には死んでいるわけではなく、設計上多少使用できないだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.