web-dev-qa-db-ja.com

Linux ACLの動作:マスクを設定すると「ls」出力が変更されますが、実際のアクセス許可は変更されません

夜の時間かもしれませんが、これは私を困惑させます。次の図を描いてください。

[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を使用します。 (testusertestuserのプライベートグループですが、それは問題ではありません。)

getfaclコマンドは、このディレクトリにACLが正しく表示されず、マスクがまだありません。名前付きグループまたはユーザーを今すぐ追加する場合、マスクはグループのアクセス許可に応じて設定されます。

ここでマスクを明示的にrwxに設定すると、lsで示されるグループのアクセス許可も変更されます。逆の場合(グループのアクセス許可が変更されるとマスクが変更される)に発生することはわかっていますが、これは不可解なようです。

getfacl出力はnotとしてグループ権限をrwxとして表示しますが、-前述のように--lsはします。

どちらが正しいですか?どうやら、getfacltestuserに書き込むことができないため、fooの出力は正しいようです。ちなみに、予想通り、testuserグループに許可を与えなかったためです。

それは続きます。 testuserを使用するだけでは、fooに対するchmodグループの書き込み権限を許可できません。 setfacl -m g:testuser:rwx fooを使用してACLを明示的に設定し、testuserが最終的にfoo/barにアクセスできるようにする必要があります。

誰かがgetfacllsの出力の違いの背後にある理論的根拠を説明できますか?通常のアクセス許可をACLと一緒に使用するのは難しい場合があることは知っていますが、これは明らかに間違っているようです。 (私は明白な何かを見逃していると思いますが;))

私はすでに見ました グループのchmod(1)がACLマスクに影響を与えるのはなぜですか?

2
wzzrd

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.

以降:

  1. それ以外の場合、プロセスの有効なグループ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ビットはそれに同意する必要があります。

4
AndreasM

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マスクと見なす必要があります。

0
ob_dev