共有マシン上のフォルダsecret
へのアクセスを制限したい場合、本当にそのフォルダに対して再帰的なchmod
が必要ですか?
chmod -R g=,o= secret
または、フォルダのchmod
で十分ですか?
chmod g=,o= secret
実用的な違いは何ですか?
ディレクトリの場合、「読み取り」アクセスではコンテンツを一覧表示でき、「実行」アクセスではディレクトリを走査してその子(ファイルまたはサブディレクトリ)の1つを開くことができます。だからあなたが削除した場合:
もちろん、再帰的な変更を行う場合、トップディレクトリへのアクセス権を誤って非再帰的にリセットしても、影響は少なくなります。
言うまでもなく、2日前にファイルを作成し(公開読み取りモードで)、誰かがそのファイルを昨日読んだり、コピーしたりした場合、そのファイルを非公開にするために今日できることはありません。
xenoidによると (やや単純化して)ディレクトリからグループやその他の権限を削除すると(現在は)、「その下にあるものはすべて到達不能になり、再帰的な変更を行う必要はありません。 」 (トップレベルの)ディレクトリを適切にchmod
した場合、自分以外はだれも同意しない1 将来的に(つまり、今から)それに入ることができるでしょう。しかし、いくつかの落とし穴があります。
2日前に作成したファイルを覚えていますか?攻撃者が昨日そのファイルへのハードリンクを作成したとします(コピーするのではなく)。 (最上位の)ディレクトリのみをchmod
した場合、そのファイルには、作成時に割り当てた公開読み取り可能な権限が引き続き付与されるため、悪意のあるユーザーは今後もそれを読み取ることができます—(潜在的に)後で変更した場合でも。再帰的にchmod
を実行すると、ファイルへのアクセス権が保護されます。これにより、リンクに影響します。悪意のあるユーザーは引き続きls -l
がオンになっているので、いつ変更したかとその大きさを確認できますが、再度読むことはできません。
secret
ディレクトリの下に、plans
ディレクトリがあり、それも一般公開されているとします。そして、5分前に、悪者がターミナルウィンドウを開いて、
cd/home/clemisch/secret/plans
これで、chmod
でsecret
を実行した後も、悪意のあるユーザーの作業ディレクトリはS /home/clemisch/secret/plans
のままであり、彼らは引き続きそのディレクトリをリストし、そこにあるファイルにアクセスすることができます。もちろん、他の場所でcd
したり、ウィンドウを閉じたり、ログアウトしたり、マシンを再起動したりすると、アクセスできなくなります。
chmod
を再帰的に実行すると、すべてのファイルとすべてのディレクトリの権限が保護され、不法占拠者はすぐにアクセスできなくなります。
マシンがコンソールからのみアクセスされるパーソナルコンピューターである場合、これはそれほど大きなリスクではありません。しかし、悪意のあるユーザーがscreen
またはtmux
セッションをバックグラウンドで残した可能性がある場合、この攻撃を使用する可能性があります。また、マシンがssh
(または他のリモートアクセスをサポートしている場合、おそらくFTPで十分です)をサポートしている場合、この攻撃を使用できます。
Xenoidが回答で指摘したように、今日chmod
に再帰的なsecret
を実行し、明日の翌日に誤ってchmod
(のみ)トップレベルディレクトリを実行した場合755に戻ると、今日の再帰的なchmod
によって引き続き保護されます。secret
の下のすべてのファイルとディレクトリは引き続き読み取り不能になります。 (もちろん、明日secret
にnewファイルを作成し、それを一般公開で読めるようにすると、権限を開くと公開されます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/file1
はsecret/plans/the/quick/brown/fox/file1
と同じ保護を受けるため、今日これが再帰的なchmod
を実行するもう1つの理由です。
悪意のあるユーザーが5分前に秘密ファイルの1つを開いて開いたままにしておくと、後で変更しても、潜在的に読み取ることができます。良い知らせは、これは実行するのがややトリッキーな攻撃であるということです。悪意のある人は、chmod
を実行する前に、いくつかの注意を払わなければなりません。悪いニュースは、この攻撃を防御するのが非常に難しいことです。再帰的なchmodは役に立ちません。
__________
1 そしてもちろん、特権ユーザーのプロセス
追伸コマンドを少し短くすることができます:chmod go=
はchmod g=,o=
と同等です。 (これにより、再帰的にchmod
が速くなることはありません)。