ファイルシステムのアクセス許可

ほとんどのファイル システムには、ユーザーがファイル システムの内容を読み取り、変更、移動、実行できるかどうかを制御するファイルとディレクトリの属性が含まれています。場合によっては、ユーザーの権限レベルに応じて、メニュー オプションまたは機能が表示または非表示になることがあります。この種のユーザー インターフェイスは、権限主導型と呼ばれます

POSIXファイル システム アクセス許可と、より具体的な制御が可能な アクセス制御リスト(ACL)の 2 種類のアクセス許可が広く利用可能です。

ファイルシステムのバリエーション

元のファイル アロケーション テーブルファイル システムには、ファイルごとの全ユーザー読み取り専用属性があります。

Microsoft Windows NTとその派生製品に実装されているNTFS は、ACL [1]を使用して複雑なアクセス許可のセットを提供します。

OpenVMS は、 Unix と同様の権限スキームを使用します。4 つのカテゴリ (システム、オーナー、グループ、ワールド) と 4 種類のアクセス権限 (読み取り、書き込み、実行、削除) があります。カテゴリは互いに素ではありません。世界にはグループが含まれ、さらにグループには所有者が含まれます。システム カテゴリには、システム ユーザーが独立して含まれます。[2]

Classic Mac OSオペレーティング システムに実装されているHFSとその後継のHFS+は、アクセス許可をサポートしていません。

macOS はPOSIX 準拠のアクセス許可を使用します。バージョン 10.4 (「Tiger」) 以降では、POSIX 準拠のアクセス許可に加えて、NFSv4 ACL の使用もサポートされています。Apple Mac OS X Server バージョン 10.4+ ファイル サービス管理マニュアルでは、可能であれば従来の Unix 権限のみを使用することを推奨しています。macOS は、Classic Mac OS の「保護」属性も引き続きサポートします。

Solaris ACL のサポートは、使用されているファイルシステムによって異なります。古いUFSファイルシステムは POSIX.1e ACL をサポートしますが、ZFS はNFSv4 ACL のみをサポートします。[3]

Linux は、 ext2ext3ext4Btrfsおよびその他のファイル システムをサポートしており、その多くには POSIX.1e ACL が含まれています。ext3 [4]および ext4 ファイルシステムの NFSv4 ACL は実験的にサポートされています

FreeBSD は、 UFS では POSIX.1e ACL をサポートし、UFS および ZFS では NFSv4 ACL をサポートします。[5] [6]

IBM z/OS は、 RACF (リソース アクセス制御機能) を使用してファイル セキュリティを実装します[7]

AmigaOS ファイルシステム、AmigaDOS は、シングルユーザー OS としては比較的高度な権限システムをサポートしています。AmigaOS 1.x では、ファイルにはアーカイブ、読み取り、書き込み、実行、および削除 (総称して ARWED と呼ばれる) 権限/フラグがありました。AmigaOS 2.x 以降では、ホールド、スクリプト、および純粋な権限/フラグが追加されました。

POSIX 権限

Unix のようなファイル システムのアクセス許可は、POSIX.1-2017 標準[8]で定義されており、 usergroup、およびotherとして知られる 3 つのスコープまたはクラスを使用しますファイルが作成されると、そのアクセス許可は、ファイルを作成したプロセスの umaskによって制限されます。

クラス

ファイルディレクトリはユーザーによって所有されます。所有者はファイルのユーザー クラスを決定します。所有者には個別の権限が適用されます。

ファイルとディレクトリには、ファイルのグループ クラスを定義するグループが割り当てられますファイルのグループのメンバーには個別のアクセス許可が適用されます。所有者はファイルのグループのメンバーである可能性があります。

所有者でもグループのメンバーでもないユーザーは、ファイルのother クラスを構成します。個別の権限が他のユーザーに適用されます。

有効な権限は、ユーザーが属する最初のクラスに基づいて、ユーザー、グループ、その他の順に決定されます。たとえば、ファイルの所有者であるユーザーは、グループ クラスまたはその他のクラスに割り当てられた権限に関係なく、ユーザー クラスに与えられた権限を持ちます。

権限

Unix 系システムは、各クラスに適用される 3 つの特定の権限を実装します。

  • 読み取り権限はファイルを読み取る機能を付与します。この権限をディレクトリに設定すると、ディレクトリ内のファイルの名前を読み取ることができますが、内容、ファイルの種類、サイズ、所有権、権限などのファイルに関する詳細情報を調べることはできません。
  • 書き込み権限はファイルを変更する権限を付与します。この権限をディレクトリに設定すると、ディレクトリ内のエントリを変更する権限が付与されます。これには、ファイルの作成、ファイルの削除、ファイル名の変更が含まれます。これには、executeも設定されている必要があります。これがないと、ディレクトリに対する書き込み権限は無意味になります。
  • 実行権限、ファイルを実行する機能を付与します。オペレーティング システムで実行可能プログラムを実行できるようにするには、この権限を実行可能プログラムに設定する必要があります。ディレクトリに設定されている場合、実行権限は検索権限として解釈されます。名前がわかっている場合はファイルの内容とメタ情報にアクセスする権限が付与されますが、読み取りも設定されていない限り、ディレクトリ内のファイルを一覧表示する権限は付与されませ

ファイルではなくディレクトリにアクセス許可を設定することの影響は、「最も誤解されやすいファイル アクセス許可の問題の 1 つ」です。[9]

権限が設定されていない場合、対応する権限は拒否されます。ACL ベースのシステムとは異なり、Unix 系システムのアクセス許可は継承されません。ディレクトリ内に作成されたファイルには、そのディレクトリと同じ権限が必要とは限りません。

setuid、setgid、およびスティッキー ビットを使用したアクセス許可の動作の変更

Unix 系システムでは通常、3 つの追加モードが使用されます。これらは実際には属性ですが、アクセス許可またはモードと呼ばれます。これらの特殊モードは、クラスごとではなく、ファイルまたはディレクトリ全体を対象としています。ただし、シンボリック表記 (以下を参照) では、setuid ビットはユーザーのトライアドに設定され、setgid ビットはグループのトライアドに設定され、その他のトライアドにはスティッキービットが設定されています。

これらの追加モードは、それぞれ 1 ビットのみを占有するため、 setuid bitsetgid bit、およびSticky bit とも呼ばれます。

従来の Unix 権限の表記

記号表記

Unix 権限は、記号表記または 8 進数表記のいずれかで表されます。

コマンドで使用される最も一般的な形式は、シンボリック表記ls -lです

3 つのパーミッション トライアド
最初のトライアド オーナーができること
2番目のトライアド グループメンバーができること
3番目のトライアド 他のユーザーができること
それぞれのトライアド
最初の文字 r: 読める
2番目の文字 w: 書き込み可能
3番目の文字 x: 実行可能
sまたはt: setuid / setgidまたはSticky (これも実行可能)
SまたはT: setuid/setgid または Sticky (実行可能ではない)

表示の最初の文字はファイルの種類lsを示し、権限とは関係ありません。残りの 9 文字は 3 つのセットで構成されており、それぞれが 3 つの文字でアクセス許可のクラスを表します。最初のセットはユーザークラスを表します。2 番目のセットはグループクラスを表します。3 番目のセットはその他のクラスを表します。

3 つの文字はそれぞれ、読み取り、書き込み、および実行のアクセス許可を表します。

  • r読み取りが許可されている場合、-許可されていない場合。
  • w書き込みが許可されている場合、-許可されていない場合。
  • x実行が許可されている場合、-許可されていない場合。

次に、記号表記の例をいくつか示します。

  • -rwxr-xr-x: ユーザー クラスが完全なアクセス許可を持ち、グループおよびその他のクラスが読み取りと実行のアクセス許可のみを持つ通常のファイル。
  • crw-rw-r--: ユーザー クラスとグループ クラスが読み取りおよび書き込み権限を持ち、その他のクラスが読み取り権限のみを持つ文字型特殊ファイル。
  • dr-x------: ユーザー クラスが読み取りおよび実行権限を持ち、グループおよびその他のクラスが権限を持たないディレクトリ。

一部の権限システムでは、ls -l表示内の追加のシンボルが追加の権限機能を表します。

  • + (プラス) 接尾辞は、追加のアクセス許可を制御できるアクセス制御リストを示します。
  • (ドット) サフィックスは、SELinuxコンテキストが存在することを示します。詳細はコマンドでリストできますls -Z
  • @ サフィックスは、拡張ファイル属性が存在することを示します。

setuidsetgid、およびSticky または Text属性を表すために 、実行可能文字 (xまたは-) が変更されます。これらの属性は 1 つのクラスのユーザーだけでなくファイル全体に影響しますが、setuid 属性はユーザーのトライアドの実行可能文字を変更し、setgid 属性はグループのトライアドの実行可能文字を変更し、sticky または text 属性は他の人にとってはトライアドの実行可能文字。setuid または setgid 属性の場合、最初または 2 番目のトライアドでは、 はxになりs、 は に-なりますSSticky または Text 属性の場合、3 番目のトライアドでは、 はxになりt、 は に-なります。T以下に例を示します。

  • -rwsr-Sr-t: ユーザー クラスが読み取り、書き込み、および実行の権限を持つファイル。そのグループ クラスが読み取り権限を持っています。他のクラスには読み取り権限と実行権限があります。setuid setgid およびSticky属性が設定されています。

数値表記

Unix 権限を表すもう 1 つの方法は、に示すように8 進数stat -c %a(base-8) 表記です。この表記は少なくとも 3 桁の数字で構成されます。右端の 3 桁はそれぞれ、所有者、グループなど、アクセス許可のさまざまなコンポーネントを表します。(4 桁目が存在する場合、左端 (上位) 桁は 3 つの追加属性、 setuid bitsetgid bit 、およびSticky bitを指定します。)

これらの各桁は、 2 進数体系における構成ビットの合計ですその結果、数値で表されるように、特定のビットが合計に加算されます。

  • 読み取られたビットはその合計に 4 を加算します (2 進数の 100)。
  • 書き込みビットはその合計に 2 を加えます (バイナリ 010)。
  • 実行ビットは、その合計に 1 を加えます (バイナリ 001)。

これらの値があいまいな組み合わせを生成することはありません。それぞれの合計は、特定のアクセス許可のセットを表します。より技術的に言えば、これはビット フィールドの 8 進数表現です。各ビットは個別の権限を参照し、一度に 3 ビットを 8 進数でグループ化することは、これらの権限をユーザー、グループ、その他ごとにグループ化することに対応します。

これらは、シンボリック表記セクションの 8 進数表記の例です。

記号
表記
数値
表記
英語
---------- 0000 権限がありません
-rwx------ 0700 所有者のみが読み取り、書き込み、実行できる
-rwxrwx--- 0770 所有者とグループの読み取り、書き込み、実行
-rwxrwxrwx 0777 所有者、グループなどに対する読み取り、書き込み、および実行
---x--x--x 0111 実行する
--w--w--w- 0222 書く
--wx-wx-wx 0333 書いて実行する
-r--r--r-- 0444 読む
-r-xr-xr-x 0555 読み取りと実行
-rw-rw-rw- 0666 読み書き
-rwxr----- 0740 所有者は読み取り、書き込み、実行が可能です。グループは読み取りのみ可能です。他の人には権限がありません

ユーザープライベートグループ

一部のシステムは、ユーザーごとに新しいグループ (「ユーザー プライベート グループ」) を作成することで、ユーザーとグループの従来の POSIX モデルから分岐しています。各ユーザーがそのユーザー プライベート グループの唯一のメンバーであると仮定すると、このスキームでは、通常のディレクトリに新しく作成されたファイルは作成ユーザーのプライベート グループに割り当てられるため、他のユーザーがそのファイルに書き込むことを許可せずに、umask 002 を使用できます。ただし、ファイルを共有することが望ましい場合、管理者は、必要なユーザーを含むグループを作成し、新しいグループに割り当てられるグループ書き込み可能なディレクトリを作成し、最も重要なこととして、ディレクトリを setgid にすることができます。[10] [11]

こちらも参照

参考文献

  1. ^ 「ファイルとフォルダーのアクセス許可」。マイクロソフト。
  2. ^ "OpenVMS ドキュメント". 2012 年 3 月 5 日にオリジナルからアーカイブされました2009 年 6 月 6 日に取得
  3. ^ 『Oracle Solaris ZFS 管理ガイド』(PDF)2010 年 9 月。
  4. ^ "Linux 上のネイティブ NFSv4 ACL". 2008 年 10 月 12 日にオリジナルからアーカイブされました2010 年 5 月 4 日に取得
  5. ^ "NFSv4_ACL – FreeBSD Wiki".
  6. ^ 「FreeNAS 9.1.1 ユーザーガイド」(PDF)2013年。
  7. ^ 「IBM Knowledge Center」。
  8. ^ "sys/types.h - データ型". pubs.opengroup.org 2023-01-12に取得
  9. ^ ハッチ、ブリ。「Linux File Permission Confusion pt 2」、「Hacking Linux Exped」、2003 年 4 月 24 日、2011 年 7 月 6 日にアクセス。
  10. ^ エプスタイン、ブライアン。「Unix におけるユーザー プライベート グループの方法とその理由」。security.ias.edu高等研究所ネットワークセキュリティ2014 年8 月 5 日に取得
  11. ^ 「Red Hat Enterprise Linux 7 システム管理者ガイド、4.3.4 グループディレクトリの作成」。Red Hat カスタマーポータルレッドハット。

外部リンク

  • Linux クックブック: グループとその中での作業方法 Michael Stutz 著 2004