public_html
フォルダー内の公開されていないすべてのファイル (つまり、403 エラーの原因となるファイル)を再帰的に検索したいと考えています。そのための簡単なbashコマンドはありますか? 関連する場合、Apacheを実行しているLinuxサーバーを使用しています。ありがとう。
2 に答える
find
次のコマンドを使用します。
find . ! -perm -o=r
「others」グループがそのファイルを読み取ることができないように、ファイル権限を持つ現在のディレクトリとサブディレクトリ内のファイルを検索します。
のマニュアル ページにfind
は、これらのオプションの例がいくつか示されています。
次のコマンドをwww-data
ユーザーとして実行できます。
find . ! -readable
Web サーバーで読み取れないすべてのファイルを検索します。
注:この回答はもともとmcleod_ideafix の回答に次の壊れたコマンドが含まれていたときに書かれたものですfind . -perm -o-r
。この回答の最後のセクションでは、なぜ機能しないのかを説明しています。
find . ! -perm -o=r
- 現在のディレクトリのサブツリー (
.
) 内のすべてのファイルとディレクトリに一致します。- 一致をファイルのみに制限するには、
-type f
.
- 一致をファイルのみに制限するには、
- セキュリティ プリンシパル "others (world)" ( ) に対して読み取り権限 ( ) が設定されていない( )
!
r
o
これは、検査されたすべてのファイルが、Web サーバーが実行されているコンテキストのユーザー アカウントによって作成されておらず、Web サーバー アカウントがメンバーであるグループに属していない限り、意図したとおりに機能します。通常、これが当てはまります。
上記のコマンドはPOSIX 準拠です。
mcleod_ideafix の回答は、GNUの (非標準) テストで使用できるより堅牢なオプションを提供します。 find
-readable
Web サーバーのユーザー アカウント (Linux の場合) のコンテキストで実行すると、ファイルを所有しているユーザーとグループに関係なく、Web サーバーが実質的に読み取ることができないwww-data
ファイルとディレクトリのみが一致します。
sudo -u www-data find . ! -readable -prune
は、読み取り不能なサブディレクトリ-prune
に降りようとする試みを防止し、それによって警告を抑制することに注意してください。
- マッチングをファイルのみに制限したい場合は、さらに複雑になります。
sudo -u www-data find . ! -readable \( -type f -print -o -prune \)
うまくいかないことについて:
find . -perm 700
sやなどのコマンドは、その正確なモード( to 、to に変換) をfind . -perm 600
持つファイルのみに一致するため、目的のすべての一致を見つけるには、ユーザーおよびグループのアクセス許可のすべての可能なバリエーションのコマンドを作成する必要があります。700
u=rwx,go=
600
u=rw,go=
find . -perm -o-r
は根本的に壊れており、常に任意のファイルまたはディレクトリと一致します:-
に渡される値のプレフィックスは、-perm
それに続くすべての権限が一致するファイルに設定されることを指定します。-perm
許可の肯定的な一致 (設定されていないものとは対照的に設定されているもの)のみを許可するため、引数のみで「この許可が設定されていない場合にのみ一致する」ロジックを表現することは基本的に不可能です。-perm
-r
は構文的にサポートされていますが (これは有効なchmod
構文であるため)、ここでは無意味であり、ノーオペレーションになります。- 技術的には、照合に使用されるモード マスクの開始値から「その他」の読み取り許可ビットを減算
-o-r
(削除) するように指示します。その開始値は、または象徴的に であるため、そこからパーミッションを差し引こうとしてもノーオペレーション、つまり効果がありません。ビリー・プレストンとブルース・フィッシャーの不滅の言葉で言えば:-perm
000
a=
- 最終的な効果は、一致する可能性のあるファイルまたはディレクトリのアクセス許可に制限がまったく課されないため、すべてのアイテムが無条件に一致することです。
- したがって、唯一のオプションは、
-perm
それ自体を積極的に一致させ(-perm -o=r
)、その前にの否定演算子 ,を配置して結果を否定find
!
することです。