ファイルのアクセス許可/属性はどのように機能しますか?カーネルレベル、FSレベル、またはその両方?


8

以前に私に発生した質問:ファイルのアクセス許可/属性はOS(つまりカーネル)に依存していますか、それともファイルシステムに依存していますか?2番目の選択肢の方がより論理的であるように思えreiserfsますが、ファイルのアクセス許可については聞いたことがありません。たとえば、「Unixファイルのアクセス許可」のみです。一方、ウィキペディアの記事から引用するには:

Windowsの新しいバージョンがリリースされると、MicrosoftはNTFSファイルシステム使用可能な属性の一覧に追加しました

これは、Windowsファイル属性が何らかの形でファイルシステムに関連付けられていることを示唆しているようです。

誰かが私を啓発してくれますか?

回答:


7

カーネルとファイルシステムの両方が役割を果たします。アクセス許可はファイルシステムに格納されるため、情報をファイルシステム形式で格納する場所が必要です。権限はカーネルによって適用され、アプリケーションに伝達されるため、カーネルはファイルシステムに格納されている情報が何を意味するかを決定するルールを実装する必要があります。

「Unixファイル権限」とは、3つの役割タイプ(ユーザー、グループ、その他)を介して制御される3つのアクション(読み取り、書き込み、実行)を含む従来の権限システムを指します。ファイルシステムの仕事は、3×3 = 9ビットの情報を格納することです。カーネルの仕事は、これらのビットを許可として解釈することです。特に、プロセスがファイルに対する操作を試みる場合、カーネルは、プロセスが実行されているユーザーとグループに基づいて、ファイルの許可ビットと要求された操作を許可するかどうかを決定する必要があります。(「Unixファイルのアクセス権」には通常、厳密にはアクセス権ではないsetuidおよびsetgidビットも含まれます。)

最近のUNIXシステムは、他の形式の権限をサポートしている場合があります。最新のUNIXシステム(Solaris、Linux、* BSD)は、アクセス制御リストをサポートしており、ファイルごとに複数のユーザーと複数のグループに読み取り/書き込み/実行権限を割り当てることができます。ファイルシステムには、この追加情報を保存する余裕がなければなりません。また、カーネルには、この情報を検索して使用するためのコードが含まれている必要があります。Ext2、reiserfs、btrfs、zfs、および他のほとんどの最新のUNIXファイルシステムフォーマットは、そのようなACLを格納する場所を定義します。Mac OS Xは「追加」や「サブディレクトリの作成」など、従来とは異なる権限を含む別のACLセットをサポートしいます。HFS +ファイルシステム形式はそれらをサポートします。LinuxにHFS +ボリュームをマウントする場合、Linuxカーネルがサポートしていないため、これらのACLは適用されません。

逆に、アクセス制御をサポートしていないオペレーティングシステムとファイルシステムがあります。たとえば、FATとバリアントはシングルユーザーオペレーティングシステムとリムーバブルメディア用に設計されており、その権限は読み取り/読み取り/書き込みと非表示/表示に制限されています。これらは、DOSによって適用される権限です。ext2ファイルシステムをDOSにマウントした場合、ext2権限は適用されません。逆に、LinuxでFATファイルシステムにアクセスすると、すべてのファイルに同じ権限が付与されます。

Windowsの後続バージョンでは、より多くの権限タイプのサポートが追加されています。NTFSファイルシステムは、これらの追加の権限を格納するように拡張されました。古いオペレーティングシステムで新しいアクセス許可を使用してファイルシステムにアクセスする場合、OSはこれらの新しいアクセス許可を認識しないため、適用されません。逆に、新しいオペレーティングシステムで古いファイルシステムにアクセスする場合、新しいアクセス許可は含まれず、適切なフォールバックを提供するかどうかはOSに依存します。


「カーネルの仕事はこれらのビットをパーミッションとして解釈することです。特に、プロセスがファイルに対する操作を試みるとき、カーネルは決定する必要があります[...]」カーネルが理論的にはそれをすべて無視して、とにかくデータを読み取りますか?(一種の直接ディスクアクセス)それともそれを妨げている何か他のものはありますか?
2017

@Overmindもちろん。カーネルコードはすべてにアクセスできます。ディスクは、プロセス、ユーザー、またはアクセス許可について何も認識していません。カーネルはディスクに「Give me block 232876」と伝え、ディスクはブロックの内容で応答します。どのプロセスがどのブロック(またはブロックのどの部分)にアクセスできるかを決定することは、カーネルの仕事です。
Gilles「SO-邪悪なこと

4

特定の権限を使用するに、カーネルファイルシステムの両方がそれらをサポートしている必要があります。ファイルシステムが最も基本的なアクセス権さえサポートしていない場合、ファイルシステムコードはそれらを偽造する必要があります(たとえばumask、vfatのマウントオプションを使用)。


3

私の理解では、カーネルはVFSにiノードを実装しています。iノードには、他のメタデータとともに許可情報(UNIXおよびACL)が含まれており、ファイルシステムはiノードを拡張して機能を追加できます。興味がある場合は、Linux VFSを読んでください。システムプログラマーでない場合は、ひどいことになります。


1

原則として、ファイルのアクセス許可とファイル属性はfilesistemに格納されます(正確な方法は問題のファイルシステム(ext3 / 4、ライザー、NTFSなど...)によって異なります)ですが、通常は何かを強制するためにカーネルによって使用されます。

たとえば、sistemaのような* nixのカーネルは、ファイル/ディレクトリに関連付けられたUIDの意味を知っている「もの」です。ファイルUIDは、ファイルシステムによってcertanファイルと一緒に保存される番号ですが、特定のユーザーへのそのような番号の「変換」(および対応する何かを行うかどうかの権限)は、カーネルによって行われます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.