ファイル所有者が複数のグループに属している場合に表示するls -l
グループをどのように決定しますか?たとえば、MacOSでは次のようになります。
drwx------+ 48 flow2k staff 1536 Feb 5 10:11 Documents
drwxr-xr-x+ 958 flow2k _lpoperator 30656 Feb 22 16:07 Downloads
ここで、2つのディレクトリは異なるグループ(staff
および_lpoperator
)を示しています。これは何に基づいていますか?私は2つのグループのメンバーです。
答え1
私はこの問題がグループがどのように機能するかについての誤解に起因するものだと思います。リストされたグループではls -l
ありません。ユーザー所属することもできますが、グループ文書属します。各ファイルはユーザーとグループの所有です。通常、ユーザーはこのグループに属しますが、必須ではありません。たとえば、私のユーザーは次のグループに属します。
$ groups
audio uucp sparhawk plugdev
しかし、グループではそうではありませんcups
。それではファイルを作成しましょう。
$ touch foo
$ ls -l foo
-rw-r--r-- 1 sparhawk sparhawk 0 Feb 23 21:01 foo
これはユーザーが所有してsparhawk
いるとも呼ばれる私の基本グループですsparhawk
。それでは、ファイルのグループ所有者を変更してみましょう。
$ sudo chown sparhawk:cups foo
changed ownership of 'foo' from sparhawk:sparhawk to sparhawk:cups
$ ls -l foo
-rw-r--r-- 1 sparhawk cups 0 Feb 23 21:01 foo
現在ファイルを所有しているグループは、私が属しているグループではないことを確認できます。
この概念を使用すると、ファイル権限を正確に操作できます。たとえば、X、Y、Zメンバーでグループを作成し、3つのメンバー間でファイルを共有できます。 Xには書き込み権限を追加で付与できますが、他の人(グループ)には読み取り権限のみを付与できます。
答え2
既存の権限では、ユーザーが属するグループの数に関係なく、ファイルは1つのグループに属します。
ファイルが作成されると、グループはユーザーのデフォルトグループに設定されます。その後、ユーザーはそれを自分のグループに移動できます。
ACL(Posix ACL、MacOSのACLと異なる場合があります)がある場合
これにより、複数のグループがある可能性があります。ただし、lsは最初のグループのみを表示し、modeはグループマスクを表示します。 (混乱している可能性があります。ACLにグループ名が表示されている場合はより良いでしょう。)
ユーザーは、最初のグループを自分が属していないグループに変更することはできません。ただし、セカンダリグループとユーザー権限(すべてのグループまたはユーザーに対して)を追加できます。
これを行うには、root(sudo)権限は必要ありません。