通常、ファイルシステムは、保存されている各項目(一般的にはファイルとディレクトリ)に対してアクセス権限設定を保持しており、ファイルシステム項目の操作を許可または拒否します。多くの場合、これらの設定により、読み取り、変更、ナビゲーション、実行などの機能に基づいて、また異なるユーザーやユーザーグループに対してアクセスを制御できます。
確立された技術の 1 つはUnix用に開発され、後にPOSIXによってコード化され、Linuxで使用されています[ 1 ]。もう 1 つの一般的な技術はアクセス制御リスト(ACL) で、ファイルシステムに実装されている複数のバリアントがあり、そのうちの 1 つは POSIX によってコード化されています。POSIX は古い Unix ベースの技術と ACL の両方を定義しているため、前者はよく知られた用語ではありませんが、明確化のために従来の POSIX パーミッションと呼ばれています。
権限駆動型のユーザーインターフェースは、ファイルシステム項目の権限に基づいて、ユーザーが利用できる機能をカスタマイズします。たとえば、項目に保存されている権限に基づいて、許可されていないメニューオプションを非表示にすることができます。
初期のタイムシェアリングシステムである互換タイムシェアリングシステム(CTSS)は、複数のユーザーをサポートしていました。各ユーザーのアカウントには「問題番号」と「プログラマー番号」がありました。[ 2 ]
CTSSファイルシステムの最初のバージョンでは、2つの「読み取り専用」ファイルモードのみがサポートされていました。そのうちの1つはユーザーが解除でき、もう1つはコンピュータセンターに提出された編集カードでのみ解除できます。[ 2 ]: 45-46ファイルは、同じプロジェクトのユーザー間で共有できます。共有ファイルはプログラマ番号0に割り当てられます。[ 2 ]: 24読み取り専用ビットによって提供される保護以外に保護はありません。
ファイルシステムの2番目のバージョンには、「読み取り専用」と「書き込み専用」の別々のパーミッションビットがあり、後者はファイルへの追記のみを許可します。また、ファイルの作成者のみがアクセスできる「プライベート」ビットと、ファイルの作成者のみがファイルのパーミッションを変更できる「保護」ビットもあります。[ 3 ]
Multicsタイムシェアリングシステムのユーザーには「Person_id」が、プロジェクトには「Project_id」が割り当てられています。ユーザーはPerson_idとProject_idを使用してシステムにログインします。ファイルにはアクセス制御リスト(ACL)があり、エントリにはPerson_idまたは「*」、Project_idまたは「*」、および「インスタンスタグ」または「*」が含まれます。インスタンスタグはプロセスの種類を表し、たとえば「a」は通常の対話型セッションのプロセスを表します。ACLのエントリは、プロセスのPerson_id、Project_id、およびインスタンスタグと照合されます。「*」は、すべてのPerson_id、Project_id、またはインスタンスタグに一致するワイルドカードです。ワイルドカードの数が最も少ないACLエントリが使用されます。[ 4 ]: 6-2、6-46-8
ファイルに対するACLには「読み取り」、「書き込み」、「実行」のアクセス権限があり、ディレクトリに対するACLには「ステータス」(ディレクトリ内のファイルとディレクトリの属性の読み取りを許可)、「変更」(ディレクトリ内のファイルとディレクトリの属性の変更およびディレクトリからの項目の削除を許可)、「追加」(ディレクトリへの新しい項目の追加を許可)のアクセス権限がある。[ 4 ]: 6-3
TENEXのユーザーは、複数のグループに属している。[ 5 ]: 44
ファイルまたはディレクトリには、一連のパーミッションビットがあり、ファイルまたはディレクトリの所有者に対するパーミッションに6ビット、ファイルまたはディレクトリのグループ内の他のユーザーに対するパーミッションに6ビット、その他のユーザーに対するパーミッションに6ビットが割り当てられています。ファイルの場合、パーミッションビットは「読み取り」、「書き込み」、「実行」、「追加」、および「ファイルの各ページには独自のパーミッションがある」であり、6番目のビットは使用されません。ディレクトリの場合、パーミッションビットは「アクセス許可」(設定されていない場合は、ディレクトリへのアクセスは許可されません)、「ディレクトリ内のファイルを開くことができる」(ファイルのパーミッションビットに従う)、「ファイルのパスワードなしで所有者と同様の機能を実行できる」、および「ディレクトリにファイルを追加できる」であり、5番目と6番目のビットは使用されません。[ 5 ]: 42-44
TOPS-10のユーザーアカウントには、プログラマー番号とプロジェクト番号が付与されています。
ファイルには一連のアクセス許可ビットがあり、3ビットはファイルの所有者のアクセス許可、3ビットは所有者と同じプロジェクト番号を持つ他のユーザーのアクセス許可、そして残りの3ビットはその他のすべてのユーザーのアクセス許可を表します。オペレーティングシステムは、包含ディレクトリのプログラマー番号と同じプログラマー番号を持つアカウントを所有者として扱うか、包含ディレクトリと同じプログラマー番号とプロジェクト番号を持つアカウントのみを所有者として扱うように構成できます。アクセス許可ビットの値は次のとおりです。
所有者は常に権限を変更することができます。[ 6 ]
Unixの初期バージョン(v1)のファイルには、5ビットのパーミッションがありました。
そして、set-UID ビットがありました。[ 7 ]グループの概念はありませんでした。これは第 3 版 (v3) まで続きました。[ 8 ]第 4 版 (v4) でグループが導入され、v4 のファイルには 9 ビットのパーミッションがありました。
set-UID およびset-GID ビットも同様です。[ 9 ]これはPOSIXで指定され、現在の Unix およびUnix ライクなシステムによって提供されるパーミッションと同じセットです。
ファイルシステムのパーミッションは、さまざまな方法で実装されてきました。ここでは、その代表的な例をいくつか紹介します。
現在のバージョンを含む多くのバージョンのWindowsに搭載されているNTFSは、ACLを使用してアクセス許可ベースのアクセス制御を提供します。NTFS ACLは強力ですが複雑であると考えられています。[ 10 ]
ext2、ext3、ext4、BtrfsなどのLinuxファイルシステムは、POSIXパーミッションとPOSIX.1e ACLの両方をサポートしています。ext3 [ 11 ]およびext4ファイルシステムでは、NFSv4 ACLの実験的なサポートがあります。
FreeBSD はUFS 上で POSIX.1e ACL をサポートし、UFS および ZFS 上で NFSv4 ACL をサポートしています。[ 12 ] [ 13 ]
クラシックMac OSオペレーティングシステムに実装されているHFS、およびその後継であるHFS+は、パーミッションをサポートしていません。
macOS はPOSIX 準拠のパーミッションをサポートしており、HFS+ とAPFS の両方でサポートしています。バージョン 10.4 ("Tiger") 以降では、POSIX 準拠のパーミッションに加えて NFSv4 ACL の使用もサポートしています。Apple Mac OS X Server バージョン 10.4+ ファイル サービス管理マニュアルでは、可能な限り従来の Unix パーミッションのみを使用することを推奨しています。macOS は、Classic Mac OS の "Protected"/"Locked" 属性を、 4.4BSD flags フィールドの "user immutable" フラグとして引き続きサポートしています。[ 14 ]
ファイル割り当てテーブル(オリジナル版)には、すべてのユーザーに適用されるファイルごとの読み取り専用属性があります。
OpenVMS は、読み取り、書き込み、実行、削除の 4 つのアクセス機能と、システム、所有者、グループ、ワールドのユーザー選択を定義しています。ワールドにはグループが含まれ、グループには所有者が含まれ、システムにはシステム ユーザーが選択されます。この設計は Unix に似ていますが、削除機能とシステムという追加のユーザー選択という注目すべき拡張機能があります。[ 15 ] ACL は VMS 4.0 以降でサポートされています。[ 16 ]
SolarisのACLサポートは、使用するファイルシステムによって異なります。古いUFSファイルシステムはPOSIX.1e ACLをサポートしていますが、ZFSはNFSv4 ACLのみをサポートしています。[ 17 ]
IBM z/OS はRACF (リソース アクセス コントロール ファシリティ) を使用してファイル セキュリティを実装しています[ 18 ]
AmigaOSファイルシステム(AmigaDOS)は、シングルユーザーOSとしては比較的高度なパーミッションシステムをサポートしています。AmigaOS 1.xでは、ファイルにはアーカイブ、読み取り、書き込み、実行、削除(総称してARWED)のパーミッション/フラグがありました。AmigaOS 2.x以降では、ホールド、スクリプト、ピュアのパーミッション/フラグが追加されました。
OpenHarmonyオペレーティングシステムは、Oniro OSおよびHarmonyOS (HarmonyOS NEXTバージョンを含む)のクライアントサイドエコシステム、およびLinuxベースのopenEulerサーバーOSとともに、アクセストークンマネージャ(ロールベースのアクセス制御)とCore File Kit API機能ベースのきめ細かい権限管理をサポートするHarmony Distributed File System(HMDFS)をネイティブに使用しています。ただし、openEulerは例外で、きめ細かい権限管理が可能です。 [ 19 ]
従来、Unix ベースのファイルシステムのファイル権限は POSIX.1 で定義されています。[ 20 ] POSIX.1 では、権限をユーザーにマッピングできる 3 つのクラス (ユーザー、グループ、その他) と、各クラスに対して許可または拒否できる 3 つの操作 (読み取り、書き込み、実行) が指定されています。ファイルが作成されると、その権限はumaskコマンドでアクセスできるデフォルトの権限になります。
Unixベースのファイルシステムでは、ディレクトリやその他の特殊ファイルも含め、すべてがファイルです。
これらのクラスは、ユーザーに対するアクセス許可のマッピング方法を決定します。ユーザー クラスのアクセス許可は、ファイルの所有者であるユーザーに適用されます。グループ クラスの アクセス許可は、ファイルの所有グループに属するユーザーに適用されます。その他クラスは、その他のユーザーに適用されます。
有効なアクセス許可とは、ユーザーが属するクラスのアクセス許可であり、その順序は「ユーザー」「グループ」「その他」の順になります。例えば、所有ユーザーは、所有グループに属していても、ユーザークラスの有効なアクセス許可を持ちます。
以下の権限は、ファイルおよびディレクトリに対する対応する操作を許可します。
ディレクトリ内のファイルまたはディレクトリの内容にアクセスするには、以下が必要です。
ファイルから読み込むには、以下が必要です。
ファイルへの書き込みには以下が必要です。
ファイルを実行するには、以下が必要です。
必要なファイルの名前を知るには:
ファイルを追加、削除、または名前変更するには、以下が必要です。
ファイルまたはディレクトリのメタデータには、通常、inode ID、ファイルの種類、サイズ、所有者(GUIおよびUID)、およびパーミッションビットが含まれます。
ファイルではなくディレクトリにアクセス許可を設定することの影響は、「最も誤解されやすいファイルアクセス許可の問題の1つ」である。[ 21 ]
ACLベースのシステムとは異なり、これらのアクセス許可は継承されません。ディレクトリ内に作成されたファイルは、必ずしもそのディレクトリと同じアクセス許可を持つとは限りません。
ファイルごとに、アクセス権限に関連する3つの追加の1ビット属性が適用され、これらはアクセス権限とともにファイルモードに格納されます。
権限は一般的に、記号表記または8進数表記で表されます。
コマンドの長い出力形式では、記号表記が使用されますls -l。
出力の最初の文字はUnixファイルタイプを示します。これは、パーミッション情報のすぐ隣に表示されますが、パーミッションではありません。残りの9文字は、ユーザー、グループ、その他のクラスに対する読み取り、書き込み、実行の操作権限のグループとして、権限付与を表します。操作は、ダッシュで表示される場合は拒否され、r読み取り、w書き込み、x実行のいずれかで許可されます。
例:
-rwxr-xr-x: 最初は-通常のファイルを示し、次の 3 つはrwxユーザー クラスがすべての権限を持ち、グループとその他のクラス (両方r-x) は読み取りと実行のみの権限を持つことを示しますcrw-rw-r--: 初期値はc文字特殊ファイルを示し、ユーザーおよびグループクラス(両方rw-)は読み取りおよび書き込み権限を持ち、その他のクラス(r--)は読み取り権限のみを持ちます。dr-x------: initial はdディレクトリを示し、ユーザー クラス ( r-x) は読み取りと実行の権限を持ち、グループとその他のクラス (両方---) は権限を持ちませんsetuid、setgid、およびsticky/text属性を表すために 、クラスの3番目の位置の文字が変更されます。この位置は通常は実行専用であり、これらの属性はクラスに関係なくファイルに影響を与えますが、それでも変更されます。setuid属性はuserクラスの実行文字を変更し、setgid属性はgroupクラスの実行文字を変更し、stickyまたはtext属性はothersクラスの実行文字を変更します。setuidまたはsetgidの場合、xはとなりs、-はとなりますS。stickyまたはtext属性の場合、xはとなりt、-はとなりますT。たとえば、は-rwsr-Sr-t通常のファイルを示し、userクラスは読み取り、書き込み、および実行権限を持ち、groupクラスは読み取り権限を持ち、othersクラスは読み取りおよび実行権限を持ち、setuid、setgid、およびsticky属性が設定されています。
システムによっては、追加の権限設定機能が表示される場合があります。
権限は、例えばコマンド のように、 8進数stat -c %a表記で表示されることがよくあります。表記は少なくとも3桁の数字で構成されます。最後の3桁は、ユーザー、グループ、その他といったクラスごとの権限を表します。4桁目がある場合は、一番左の桁が、setuid、setgid、stickyという3つの特殊属性を表します。
各演算許可にはビット位置が割り当てられ、8進数の場合、その位置は次のようになります。
クラス権限の値は、付与された権限の合計、または論理和です。
例:
一部のシステムでは、ユーザーとグループの従来の POSIX モデルから逸脱し、各ユーザーに対して新しいグループ (「ユーザー プライベート グループ」)を作成します 。各ユーザーがそのユーザー プライベート グループの唯一のメンバーであると仮定すると、この方式では、通常のディレクトリに新しく作成されたファイルは作成者のプライベート グループに割り当てられるため、他のユーザーがそのファイルに書き込むことを許可せずに umask 002 を使用できます。ただし、ファイルの共有が望ましい場合は、管理者は目的のユーザーを含むグループを作成し、新しいグループに割り当てられたグループ書き込み可能なディレクトリを作成し、最も重要なことに、ディレクトリを setgid にすることができます。setgid にすると、ディレクトリ内に作成されたファイルはディレクトリと同じグループに割り当てられ、002 umask (ユーザー プライベート グループを使用することで有効になる) により、グループの他のメンバーがそれらのファイルに書き込むことができるようになります。[ 22 ] [ 23 ]
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)