web-dev-qa-db-ja.com

フォルダーへのアクセスを制限するために、再帰的なchmodが本当に必要ですか?

共有マシン上のフォルダsecretへのアクセスを制限したい場合、本当にそのフォルダに対して再帰的なchmodが必要ですか?

chmod -R g=,o= secret

または、フォルダのchmodで十分ですか?

chmod g=,o= secret

実用的な違いは何ですか?

51
clemisch

ディレクトリの場合、「読み取り」アクセスではコンテンツを一覧表示でき、「実行」アクセスではディレクトリを走査してその子(ファイルまたはサブディレクトリ)の1つを開くことができます。だからあなたが削除した場合:

  • 読み取りアクセスだけで、ユーザーは自分の名前を推測することでサブディレクトリにアクセスできます
  • 実行フラグだけの場合、コンテンツにアクセスできない場合でも、コンテンツの名前を一覧表示できます。
  • ディレクトリーに対する読み取り特権と実行特権の両方、その下にあるものはすべて到達不能になり、再帰的な変更を行う必要はありません。

もちろん、再帰的な変更を行う場合、トップディレクトリへのアクセス権を誤って非再帰的にリセットしても、影響は少なくなります。

73
xenoid

言うまでもなく、2日前にファイルを作成し(公開読み取りモードで)、誰かがそのファイルを昨日読んだり、コピーしたりした場合、そのファイルを非公開にするために今日できることはありません。

xenoidによると (やや単純化して)ディレクトリからグループやその他の権限を削除すると(現在は)、「その下にあるものはすべて到達不能になり、再帰的な変更を行う必要はありません。 」 (トップレベルの)ディレクトリを適切にchmodした場合、自分以外はだれも同意しない1 将来的に(つまり、今から)それに入ることができるでしょう。しかし、いくつかの落とし穴があります。

ハードリンク

2日前に作成したファイルを覚えていますか?攻撃者が昨日そのファイルへのハードリンクを作成したとします(コピーするのではなく)。 (最上位の)ディレクトリのみをchmodした場合、そのファイルには、作成時に割り当てた公開読み取り可能な権限が引き続き付与されるため、悪意のあるユーザーは今後もそれを読み取ることができます—(潜在的に)後で変更した場合でも。再帰的にchmodを実行すると、ファイルへのアクセス権が保護されます。これにより、リンクに影響します。悪意のあるユーザーは引き続きls -lがオンになっているので、いつ変更したかとその大きさを確認できますが、再度読むことはできません。

作業ディレクトリ

secretディレクトリの下に、plansディレクトリがあり、それも一般公開されているとします。そして、5分前に、悪者がターミナルウィンドウを開いて、

cd/home/clemisch/secret/plans

これで、chmodsecretを実行した後も、悪意のあるユーザーの作業ディレクトリはS /home/clemisch/secret/plansのままであり、彼らは引き続きそのディレクトリをリストし、そこにあるファイルにアクセスすることができます。もちろん、他の場所でcdしたり、ウィンドウを閉じたり、ログアウトしたり、マシンを再起動したりすると、アクセスできなくなります。

chmodを再帰的に実行すると、すべてのファイルとすべてのディレクトリの権限が保護され、不法占拠者はすぐにアクセスできなくなります。

マシンがコンソールからのみアクセスされるパーソナルコンピューターである場合、これはそれほど大きなリスクではありません。しかし、悪意のあるユーザーがscreenまたはtmuxセッションをバックグラウンドで残した可能性がある場合、この攻撃を使用する可能性があります。また、マシンがssh(または他のリモートアクセスをサポートしている場合、おそらくFTPで十分です)をサポートしている場合、この攻撃を使用できます。

ヒューマンエラー

Xenoidが回答で指摘したように、今日chmodに再帰的なsecretを実行し、明日の翌日に誤ってchmod(のみ)トップレベルディレクトリを実行した場合755に戻ると、今日の再帰的なchmodによって引き続き保護されます。secretの下のすべてのファイルとディレクトリは引き続き読み取り不能になります。 (もちろん、明日secretnewファイルを作成し、それを一般公開で読めるようにすると、権限を開くと公開されますsecretディレクトリにあります。ただし、今日のchmodが再帰的かどうかに関係なく、それは当てはまります。)

mazunkiが作成した コメント 、「cpは権限を持っていると信じています。」彼らの意味はわかりませんが、このシナリオを考えてみましょう。 2つのファイル間でdiffを実行します。

  • secret/plans/the/quick/brown/fox/file1
  • secret/jumps/over/the/lazy/dog/file2

しかし、これらのファイルがどこにあるのか正確にはわからないため、ファイルを探して探す必要があります。あなたはやりたくなるかもしれません

cd plans
cd the/quick                            # looking for file1
cd brown/fox                            # found it!
cp file1 /tmp
cd ../../../../..
cd jumps/over
cd the                                  # looking for file2
cd lazy/dog                             # found it!
diff /tmp/file1 file2

これを行うと、/tmp/file1secret/plans/the/quick/brown/fox/file1と同じ保護を受けるため、今日これが再帰的なchmodを実行するもう1つの理由です。

もう一つ

悪意のあるユーザーが5分前に秘密ファイルの1つを開いて開いたままにしておくと、後で変更しても、潜在的に読み取ることができます。良い知らせは、これは実行するのがややトリッキーな攻撃であるということです。悪意のある人は、chmodを実行する前に、いくつかの注意を払わなければなりません。悪いニュースは、この攻撃を防御するのが非常に難しいことです。再帰的なchmodは役に立ちません。
__________
1 そしてもちろん、特権ユーザーのプロセス

追伸コマンドを少し短くすることができます:chmod go=chmod g=,o=と同等です。 (これにより、再帰的にchmodが速くなることはありません)。