制限付きのアクセス許可を持つルートフォルダがある場合、たとえば600で、子フォルダ/ファイルに777のアクセス許可がある場合、ルートフォルダに600がある場合でも、誰でも子ファイルの読み取り/書き込み/実行ができますか?
承認された回答:
正確なルールは次のとおりです。ディレクトリの実行権限がある場合にのみ、ディレクトリをトラバースできます。
たとえば、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
にアクセスする必要がある動的にリンクされたバイナリ 、したがって、実際に使用するには、さらに深く掘り下げる必要があります。 setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib
。
ディレクトリの読み取り権限は、エントリを列挙する権利を与えます。読み取り権限を付与せずに実行権限を付与すると便利な場合があります。エントリの名前は、エントリにアクセスするためのパスワードとして機能します。実行権限なしでディレクトリに読み取りまたは書き込み権限を与えることには何の役にも立ちません。