Comportamento do Linux ACL: configurações a máscara altera a saída 'ls', mas não as permissões reais

2

Pode ser a hora da noite, mas isso está me intrigando. Imagine o seguinte.

[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

Em palavras: eu crio um diretório foo , com o modo 0750 , root como proprietário e testuser como o grupo. ( testuser é o grupo privado de testuser , mas isso não importa.)

O comando getfacl mostra corretamente nenhuma ACL neste diretório e ainda não há máscara. A máscara será definida de acordo com as permissões do grupo se eu adicionar um grupo ou usuário nomeado agora.

Se eu definir explicitamente a máscara para rwx agora, as permissões de grupo, conforme mostrado por ls , também serão alteradas. Eu sei que acontece o contrário (a máscara muda quando as permissões do grupo mudam), mas isso parece intrigante.

Quanto mais intrigante, porque a saída getfacl não mostra as permissões do grupo como rwx , mas - como dito - ls faz.

Qual é o certo? Aparentemente, a saída de getfacl está correta, porque testuser não pode gravar em foo . Como esperado, a propósito, porque eu não concedi ao grupo testuser nenhuma permissão para fazer isso.

Continua. Não posso permitir as permissões de gravação do grupo testuser em foo usando apenas chmod . Eu tenho que definir explicitamente uma ACL usando setfacl -m g:testuser:rwx foo para permitir que testuser toque em foo/bar .

Alguém pode explicar a lógica por trás da diferença nas saídas de getfacl e ls ? Eu sei que pode ser difícil ter permissões normais junto com as ACLs, mas isso parece errado. (Embora eu espere estar faltando algo claramente óbvio;))

Eu já vi Por que o chmod (1 ) no grupo afetam a máscara ACL?

    
por wzzrd 09.02.2012 / 22:19

2 respostas

4

Da página man (5) do acl

    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.

e mais tarde:

  1. else if the effective group ID or any of the supplementary group IDs of the process match the file group or the qualifier of any entry of type ACL_GROUP, then
          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.

Isso significa que rwx CAN pode ser concedido no diretório, mas os chmod bits devem concordar com ele.

    
por 10.02.2012 / 14:58
0

Eu gostaria de acrescentar que quando as ACLs são usadas em um objeto, as permissões listadas por ls -l são um pouco diferentes.

De acordo com o homem ACL (5):

CORRESPONDENCE BETWEEN ACL ENTRIES AND FILE PERMISSION BITS

The permissions defined by ACLs are a superset of the permissions specified by the file permission bits.

There is a correspondence between the file owner, group, and other permissions and specific ACL entries: the owner permissions correspond to the permissions of the ACL_USER_OBJ entry. If the ACL has an ACL_MASK entry, the group permissions correspond to the permissions of the ACL_MASK entry. Otherwise, if the ACL has no ACL_MASK entry, the group permissions correspond to the permissions of the ACL_GROUP_OBJ entry. The other permissions correspond to the permissions of the ACL_OTHER_OBJ entry.

Portanto, ao usar ACLs, você deve considerar a seção de permissão de grupo da saída ls -l como a máscara de ACL .

    
por 29.12.2017 / 17:49