ファイル権限:カーネルまたはファイルシステム?

ファイル権限:カーネルまたはファイルシステム?

「ファイル権限」とは、カーネル内部の権限を意味しますか、それともファイルシステムの機能を意味しますか?これらの権限が保存される場所は、どの階層で決定されます。どのレベルのファイル権限が存在するか混乱しています。境界を明確にするのに役立つ人はいますか?

ユーザーの観点からこれがどのように機能するかはわかりますがchown chmod、実装方法や実際に「権限拒否」エラーが発生する理由は何かわかりません。

touch foo
chmod 000 foo
cat foo
cat: foo: Permission denied

カーネル、ファイルシステム、io、ビットが上記の順序にどのように適合するかを教えてくれる人はいますか?

ベストアンサー1

この質問に対する最高の1つの単語の答えは次のとおりです。両方または

Unix オペレーティングシステムの設計では、ファイルシステム機能はカーネルによって提供されます。したがって、ファイル権限はカーネルから出て、カーネルによって強制されます。

カーネルの内部にはファイルアクセスを処理するサブシステムがあります。権限はこのサブシステムによって強制されます。サブシステムには明確に定義された境界がなく、システムの構造を理解するために人間が構成します。ファイルアクセスを処理するカーネル部分を2つの部分に分割することは本当に便利です。

  • アプリケーションのアクセスを処理し、パスを確認する仮想ファイルシステム(VFS)
  • 情報を特定の形式で保存する特定のファイルシステムへのアクセスを管理する別のファイルシステムドライバ。

各ファイルシステムドライバは、権限を保存して検索する方法を決定します。 VFS層は気にしません。その階層の使命は、要求を正しいドライバに転送することです。ディスクファイルのファイルシステムは、ディスクのどこかに権限を保存します(サポートしている場合)。ファイル内の他のメタデータとともに、既存のUnixデザインリポジトリ権限に従うディスクファイルファイルシステムインデックスノード。プロトコルが権限をサポートしている場合、ネットワークファイルシステムはサーバーに権限が何であるかを尋ねます。形式やプロトコルがUnix権限をサポートしていない場合、すべてのファイルに対して同じ権限を報告するなどの補償はドライバによって異なります。 procfsやsysfsなどのメモリ内ファイルシステムは、メモリ内のデータ構造に権限を格納するか、動的に計算します。ヒューズファイルシステムなどを実装するプログラムの関数を呼び出します。

VFS層とファイルシステムドライバの両方がアクセス要求を承認するかどうかを判断するのに役立ちます。マウントポイントへのパスを巡回する場合は、要求に複数のファイルシステムドライバが含まれることがあります(たとえば、/foo/barマウントポイントの場合はその要求にアクセスするために、および巡回するために/foo/bar/qux1つのファイルシステムを照会する必要があります)。分割の詳細はUnixのバリエーションによって異なりますが、通常、VFSレイヤはファイル権限を呼び出しコンテキストに関連付け、他の制限(読み取り専用マウント、SELinuxなどのフレームワーク)を適用できます。個々のファイルシステムは追加の制限です。たとえば、ネットワークファイルシステムの場合、サーバーは常に拒否できます。//foo/foo/bar/foo/bar/qux

おすすめ記事