回答:
正確なルールは次のとおりです。ディレクトリの実行権限がある場合にのみ、ディレクトリを走査できます。
そのため、たとえばにアクセスするにはdir/subdir/file
、dir
およびに対する実行許可とdir/subdir
、必要なfile
アクセスの種類に対する許可が必要です。コーナーケースに入ると、相対パス(Linuxで行う)を介してファイルにアクセスするために、現在のディレクトリで実行権限が必要かどうかが一般的かどうかわかりません。
ファイルへのアクセス方法が重要です。たとえば、実行権限はある/foo/bar
が、ではない/foo
が、現在のディレクトリが/foo/bar
である場合/foo/bar
、絶対パスではなく相対パスでファイルにアクセスできます。/foo/bar
このシナリオではに変更できません。おそらく、特権のないプロセスは、cd /foo/bar
特権のない状態になる前に行われているでしょう。ファイルに複数のハードリンクがある場合、そのファイルへのアクセスに使用するパスによってアクセス制限が決まります。
シンボリックリンクは何も変更しません。カーネルは、呼び出しプロセスのアクセス権を使用してそれらを走査します。たとえばsym
、がディレクトリへのシンボリックリンクである場合dir
、dir
にアクセスするための実行権限が必要ですsym/foo
。シンボリックリンク自体のアクセス許可は、OSとファイルシステムに応じて重要な場合と重要でない場合があります(一部はそれらを尊重し、一部は無視します)。
ルートディレクトリから実行権限を削除すると、ユーザーはディレクトリツリーの一部(より特権のあるプロセスに変更する必要がある)に効果的に制限されます。これには、アクセス制御リストを使用する必要があります。例えば、場合/
や/home
立ち入り禁止にしているjoe
(setfacl -m user:joe:0 / /home
)と/home/joe
あるjoe
のホームディレクトリ、その後joe
でシェルスクリプト実行など(システムの残りの部分にアクセスすることはできません/bin/sh
アクセスする必要がリンクしたバイナリまたは動的に/lib
あなたので、 " d実際に使用するには、さらに深くする必要があります(例setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib
)。
ディレクトリの読み取り許可は、エントリを列挙する権利を与えます。読み取り権限を付与せずに実行権限を付与すると便利な場合があります。エントリの名前は、それらにアクセスするためのパスワードとして機能します。実行権限なしでディレクトリに読み取りまたは書き込み権限を付与する用途は考えられません。