Precedência do ACLS quando um usuário pertence a vários grupos

5

Se um arquivo tiver entradas de ACL para dois grupos, dando-lhes permissões diferentes, como esta:

group:admin:rw-
group:staff:r--

quais permissões um usuário possui se ele pertencer a ambos os grupos? Qual entrada tem precedência? O experimento parece mostrar que as permissões mais restritivas são aplicáveis. Em caso afirmativo, qual é a melhor maneira de lidar com situações em que eu realmente quero que os membros de um grupo tenham privilégios elevados, mesmo se pertencerem a outros grupos mais restritos também?

    
por Bryan Wright 24.03.2017 / 15:18

1 resposta

4

De o padrão :

In words, Common Access Determination Algorithm is to be interpreted as follows (this description is a loose paraphrase of the common access determination algorithm which is specified in detailed pseudocode in ACL Managers ):

  • Match (in the sense defined in the pseudocode in ACL Managers ) the incoming PAC against the ACL's access ACLEs (in the top-to-bottom order shown, namely: UO, U, FU, GO/G/FG, O, FO, AO), stopping at the first such match (except that all matches are considered "simultaneously" in the case of the indicated group-like ACLEs), and note the permissions granted by the matched ACLE (or, in the case of the group-like ACLEs, the union of the permissions granted by all the matched ACLEs).

  • Mask (that is, intersect) the acquired permissions against the permissions in the ACL's mask ACLEs, as necessary (namely, mask with MASK_OBJ permissions if the match occurred in the center column1, and/or mask with UNAUTHENTICATED permissions if the PAC is unauthenticated). (If the ACL Manager doesn't support these two mask ACLEs, this step is a null operation.)

(ênfase no original, nota de rodapé adicionada)

Ou seja, se houver um arquivo com usuário e grupo root e permissões 0600 chamado acl-test , contendo a única linha read possible , então:

$ getfacl acl-test
# file acl-test
# owner: root
# group: root
user::rw-
group::---
other::---

Agora, se eu (como usuário fox ) tentar cat this:

$ cat acl-test
cat: acl-test: Permission denied

Permissões de grupo são unidas

Por acaso, estou nos grupos users e wheel , por isso podemos adicionar ACLs específicas para esses grupos:

# setfacl -m g:users:--- -m g:wheel:r-- acl-test
$ cat acl-test
read possible

Isso ocorre porque as entradas group (consideradas simultaneamente) permitem permissão de leitura para um dos meus grupos. Estes podem ser combinados:

# setfacl -m g:users:-w- acl-test
$ getfacl acl-test
# file: acl-test
# owner: root
# group: root
user::rw-
group::---
group:wheel:r--
group:users:-w-
mask::rw-
other::---
$ printf '%s\n' 'write possible' >> acl-test
$ cat acl-test
read possible
write possible

Agora, posso ler e gravar o arquivo, mesmo que os grupos que permitem essas permissões não sejam do mesmo grupo.

Permissões específicas do usuário substituem todos os grupos

Como as regras do usuário se aplicam antes das regras do grupo, ainda podemos restringir um determinado usuário de ler e / ou escrever o conteúdo:

# setfacl -m u:fox:--- acl-test
$ getfacl acl-test
# file: acl-test
# owner: root
# group: root
user::rw-
user:fox:---
group::---
group:wheel:r--
group:users:-w-
mask::rw-
other::---
$ cat acl-test
cat: acl-test: Permission denied

Uma máscara, se configurada, substitui quase tudo

Se um arquivo for realmente de leitura para qualquer pessoa, exceto o proprietário:

# setfacl -x u:fox -m g::rw- -m m:r-- acl-test
$ getfacl acl-test
# file: acl-test
# owner: root
# group: root
user::rw-
group::rw-          #effective:r--
group:wheel:r--
group:users:-w-     #effective:---
mask::r--
other::---
$ printf '%s\n' 'now writing is impossible' >> acl-test
bash: acl-test: Permission denied
# printf '%s\n' 'owner can still write' >> acl-test

Curiosamente, a máscara não substitui as permissões outras , portanto:

# setfacl -x g:users -x g:wheel -m o:rw- -n acl-test
$ getfacl acl-test
# file: acl-test
# owner: root
# group: root
user::rw-
group::rw-          #effective:r--
mask::r--
other::rw-
$ printf '%s\n' 'others can write now' >> acl-test
# chown :users acl-test
$ printf '%s\n' 'but not members of the owning group' >> acl-test
bash: acl-test: Permission denied

1 A "coluna central" refere-se a esta imagem e contém tudo, exceto UO e O, para que o usuário proprietário e outros não sejam afetados por uma máscara. Todos os grupos e usuários não proprietários com regras definidas são afetados.

    
por 24.03.2017 / 17:53