問題は、これらの許可は最も一般的な許可(その他->グループ->ユーザー)から始まって互いに崩壊すると常に考えていました。
その場合、「その他」の権限が全員に適用されます。
言い換えれば、o = rwxの場合、グループとユーザーの権限が何であるかを気にしますか?
前の文とは異なります。ここでは、パーミッションが一緒になっていることを意味しています。たとえば、userXがファイルを所有し、ファイルがユーザー読み取り可能な場合、またはuserXが属するグループがファイルを所有し、ファイルがgroupである場合、userXには読み取りパーミッションがあります-読み取り可能、またはファイルが他の読み取り可能な場合。しかし、それはそれがどのように機能するかではありません。実際には、o=rwx
意味rwx
の権限が他の人に適用されますが、それは他の人ではないエンティティについては何も言いません。
まず、ユーザーがどのグループに属しているかは直接関係ありません。カーネルには、グループに属するユーザーという概念がありません。カーネルが維持するのは、すべてのプロセスについて、ユーザーID(有効なUID)とグループIDのリスト(有効なGIDおよび補足GID)です。グループは、ログイン時にログインプロセスによって決定されます/etc/group
。グループデータベースを読み込むのはログインプロセスです(例)。ユーザーIDとグループIDは子プロセスに継承されます¹。
プロセスが、従来のUnixアクセス権でファイルを開こうとするとき:
- ファイルの所有ユーザーがプロセスの実効UIDである場合、ユーザー許可ビットが使用されます。
- それ以外の場合、ファイルの所有グループがプロセスの実効GIDまたはプロセスの補助グループIDのいずれかである場合、グループ許可ビットが使用されます。
- それ以外の場合、他の許可ビットが使用されます。
使用されるrwxビットは1セットのみです。ユーザーは、他よりも優先されるグループよりも優先されます。ある場合は、アクセス制御リストは、アルゴリズムは、上記の一般化されています。
- プロセスの有効なUIDのACLがファイルにある場合は、アクセスが許可されているかどうかを判断するために使用されます。
- それ以外の場合、プロセスの実効GIDまたはプロセスの補助グループIDのいずれかのファイルにACLがある場合、グループ許可ビットが使用されます。
- それ以外の場合、他の許可ビットが使用されます。
マスクの効果など、ACLエントリの使用方法の詳細については、ユーザーが複数のグループに属している場合のACLSの優先順位も参照してください。
したがって-rw----r-- alice interns
、Aliceが読み取りおよび書き込みができ、インターンを除く他のすべてのユーザーが読み取り可能なファイルを示します。許可と所有権を持つファイル----rwx--- alice interns
は、Alice以外のインターンのみがアクセスできます(インターンかどうかは関係ありません)。Alice chmod
はアクセス許可を変更するために呼び出すことができるため、これはセキュリティを提供しません。それはエッジケースです。ACLを備えたシステムでは、一般化されたメカニズムにより、特定のユーザーまたは特定のグループから権限を削除できます。これは便利な場合があります。
各アクション(読み取り、書き込み、実行)のすべてのビットを論理和するのではなく、単一のビットセットを使用することには、いくつかの利点があります。
- ACLを備えたシステムで、ユーザーまたはグループのセットから許可を削除できるという便利な効果があります。ACLのないシステムでは、1つのグループから権限を削除できます。
- 実装がより簡単です。複数のビットセットを結合するのではなく、1つのビットセットをチェックします。
- 関与する操作が少ないため、ファイルの権限を分析する方が簡単です。
¹ これらは、setuidまたはsetgidプロセスが実行されるときに変更できます。これは当面の問題とは関係ありません。