Linux(Arch Linux)でのファイルのパーミッションに関して、(私にとって)予期しない何かに遭遇しました。基本的に私は持っています:
-
userX
groupX
で -
fileX userX:groupX ---rwx----
困惑すること:アクションを実行できません(rwx
)fileX
。これは正しいですか?誰かがこれが実際に期待される動作であることを確認できますか?
私が実行できるアクションはmv
だけです およびrm
親ディレクトリへの書き込み権限があるためです。
重要なのは、これらの権限は、最も一般的な権限(その他->グループ->ユーザー)から始めて、互いに崩壊すると常に思っていたということです。つまり、o=rwx
の場合 グループとユーザーの許可が何であるかを誰が気にしますか?
どうやらこれはそうではありませんが、私にはあまり意味がありません。直感に反しているようです。このアプローチが役立つと思われる唯一のことは、非常に特定の人物/グループを簡単に除外することです。これは、賢明な方法とは思えません(imho)。さらに、所有者(およびグループ?)はchmod
できる必要があります とにかくそうですか?この問題について何か考えはありますか?
承認された回答:
重要なのは、これらの権限は、最も一般的な権限(その他->グループ->ユーザー)から始めて、互いに崩壊すると常に思っていたということです。
その場合、「その他の」権限がすべての人に適用されます。
言い換えれば、o =rwxの場合、グループとユーザーの権限は誰が気にしますか?
それは前の文とは異なります。ここでは、権限が一緒になっている、または一緒になっていることを意味しています。 userXがファイルを所有し、ファイルがユーザー読み取り可能である場合、userXが属するグループがファイルを所有し、ファイルがグループ読み取り可能である場合、またはファイルが他の読み取り可能である場合、そのuserXは読み取り権限を持ちます。しかし、それはそれがどのように機能するかではありません。実際、o=rwx
rwx
を意味します 権限は他の人に適用されますが、他の人ではないエンティティについては何も述べていません。
まず、ユーザーがどのグループに属しているかは直接関係ありません。カーネルには、グループに属するユーザーの概念はありません。カーネルが維持するのは、すべてのプロセスについて、ユーザーID(有効なUID)とグループIDのリスト(有効なGIDと補足GID)です。グループは、ログイン時にログインプロセスによって決定されます。グループデータベースを読み取るのはログインプロセスです(例:/etc/group
)。ユーザーIDとグループIDは子プロセスに継承されます¹。
プロセスが従来のUnix権限でファイルを開こうとした場合:
- ファイルの所有ユーザーがプロセスの有効なUIDである場合、ユーザー権限ビットが使用されます。
- それ以外の場合、ファイルの所有グループがプロセスの有効なGIDまたはプロセスの補足グループIDのいずれかである場合、グループ許可ビットが使用されます。
- それ以外の場合は、他の許可ビットが使用されます。
これまでに使用されるrwxビットのセットは1つだけです。ユーザーは、他よりも優先されるグループよりも優先されます。アクセス制御リストがある場合、上記のアルゴリズムは一般化されます:
- プロセスの有効なUIDのACLがファイルにある場合、それはアクセスが許可されているかどうかを判断するために使用されます。
- それ以外の場合、プロセスの有効なGIDまたはプロセスの補足グループIDの1つに対するACLがファイルにある場合は、グループ許可ビットが使用されます。
- それ以外の場合は、他の許可ビットが使用されます。
したがって、-rw----r-- alice interns
アリスが読み書きでき、インターンを除く他のすべてのユーザーが読み取ることができるファイルを示します。権限と所有権を持つファイル----rwx--- alice interns
アリス以外のインターンのみがアクセスできます(彼女がインターンであるかどうかは関係ありません)。アリスはchmod
を呼び出すことができるので 権限を変更する場合、これはセキュリティを提供しません。エッジケースです。 ACLを備えたシステムでは、一般化されたメカニズムにより、特定のユーザーまたは特定のグループからアクセス許可を削除できます。これは便利な場合があります。
各アクション(読み取り、書き込み、実行)のすべてのビットをorするのではなく、単一のビットセットを使用することには、いくつかの利点があります。
- ACLを備えたシステムで、一連のユーザーまたはグループからアクセス許可を削除できるという便利な効果があります。 ACLのないシステムでは、権限を1つのグループから削除できます。
- 実装は簡単です。複数のビットセットを組み合わせるのではなく、1セットのビットをチェックします。
- 必要な操作が少ないため、ファイルの権限を分析する方が簡単です。
¹setuidまたはsetgidプロセスが実行されると変更される可能性があります。これは当面の問題とは関係ありません。