夜の時間かもしれませんが、これは私を困惑させます。次の図を描いてください。
[root@node1 acltest]# getfacl foo/
# file: foo
# owner: root
# group: testuser
user::rwx
group::r-x
other::---
[root@node1 acltest]# ls -la .
total 24
drwxr-xr-x 3 root root 4096 Feb 9 21:53 .
drwxr-xr-x 25 root root 4096 Feb 9 21:54 ..
drwxr-x--- 2 root testuser 4096 Feb 9 21:53 foo
[root@node1 acltest]# setfacl -m m::rwx foo
[root@node1 acltest]# getfacl foo/
# file: foo
# owner: root
# group: testuser
user::rwx
group::r-x
mask::rwx
other::---
[root@node1 acltest]# ls -la .
total 24
drwxr-xr-x 3 root root 4096 Feb 9 21:53 .
drwxr-xr-x 25 root root 4096 Feb 9 21:54 ..
drwxrwx---+ 2 root testuser 4096 Feb 9 21:53 foo
[root@node1 acltest]# su - testuser
[testuser@node1 ~]$ cd /acltest/foo/
[testuser@node1 foo]$ ls -la .
total 16
drwxrwx---+ 2 root testuser 4096 Feb 9 21:53 .
drwxr-xr-x 3 root root 4096 Feb 9 21:53 ..
[testuser@node1 foo]$ touch bar
touch: cannot touch `bar': Permission denied
つまり、ディレクトリfoo
を作成し、モード0750
、所有者としてroot
、グループとしてtestuser
を使用します。 (testuser
はtestuser
のプライベートグループですが、それは問題ではありません。)
getfacl
コマンドは、このディレクトリにACLが正しく表示されず、マスクがまだありません。名前付きグループまたはユーザーを今すぐ追加する場合、マスクはグループのアクセス許可に応じて設定されます。
ここでマスクを明示的にrwx
に設定すると、ls
で示されるグループのアクセス許可も変更されます。逆の場合(グループのアクセス許可が変更されるとマスクが変更される)に発生することはわかっていますが、これは不可解なようです。
getfacl
出力はnotとしてグループ権限をrwx
として表示しますが、-前述のように--ls
はします。
どちらが正しいですか?どうやら、getfacl
はtestuser
に書き込むことができないため、foo
の出力は正しいようです。ちなみに、予想通り、testuser
グループに許可を与えなかったためです。
それは続きます。 testuser
を使用するだけでは、foo
に対するchmod
グループの書き込み権限を許可できません。 setfacl -m g:testuser:rwx foo
を使用してACLを明示的に設定し、testuser
が最終的にfoo/bar
にアクセスできるようにする必要があります。
誰かがgetfacl
とls
の出力の違いの背後にある理論的根拠を説明できますか?通常のアクセス許可をACLと一緒に使用するのは難しい場合があることは知っていますが、これは明らかに間違っているようです。 (私は明白な何かを見逃していると思いますが;))
私はすでに見ました グループのchmod(1)がACLマスクに影響を与えるのはなぜですか?
Aclのman(5)ページから
ACL_MASK The ACL_MASK entry denotes the maximum access rights that can be granted by entries of type ACL_USER, ACL_GROUP_OBJ, or ACL_GROUP.
以降:
- それ以外の場合、プロセスの有効なグループIDまたは補足グループIDのいずれかが、ファイルグループまたはタイプACL_GROUPのエントリの修飾子と一致する場合。
if the ACL contains an ACL_MASK entry, then
if the ACL_MASK entry and any of the matching ACL_GROUP_OBJ
or ACL_GROUP entries contain the requested permissions,
access is granted,
else access is denied.
これは、rwx [〜#〜] can [〜#〜]がdirに付与されることを意味しますが、chmodビットはそれに同意する必要があります。
ACLがオブジェクトで使用される場合、ls-lによってリストされる権限が少し異なることを追加したいと思います。
男性ACL(5)によると:
ACLエントリとファイル許可ビット間の対応
ACLによって定義されたパーミッションは、ファイルパーミッションビットによって指定されたパーミッションのスーパーセットです。
ファイルの所有者、グループ、およびその他のアクセス許可と特定のACLエントリの間には対応関係があります。所有者のアクセス許可はACL_USER_OBJエントリのアクセス許可に対応します。 ACLにACL_MASKエントリがある場合、グループのアクセス許可はACL_MASKエントリのアクセス許可に対応します。それ以外の場合、ACLにACL_MASKエントリがない場合、グループのアクセス許可はACL_GROUP_OBJエントリのアクセス許可に対応します。その他の権限は、ACL_OTHER_OBJエントリの権限に対応しています。
したがって、ACLを使用する場合は、ls-l出力のグループ権限セクションをACLマスクと見なす必要があります。