Por que não tenho acesso de leitura a arquivos com ACL modificada?

4

Meu objetivo é permitir o acesso de leitura à pasta /var/www/mysite/ apenas para usuários no grupo www-data usando uma ACL padrão.

Isso funciona para uma ACL normal, mas não para uma ACL padrão. Por quê?

Foi assim que eu fiz:

Estou logado como usuário www-data que está no grupo www-data . Estou no diretório /var/www .

Eu criei um diretório mysite e dei a permissão 0. Então eu adicionei permissões de ACL para que qualquer pessoa no grupo www-data tenha acesso de leitura ao diretório mysite / .

$ mkdir mysite
$ chmod 0 mysite
$ setfacl -m g:www-data:r-x mysite
$ ls -la
d---------+  2 root root 4096 Sep  6 11:16 mysite
$ getfacl mysite/
# file: mysite/
# owner: root
# group: root
user::---
group::---
group:www-data:r-x
mask::r-x
other::---

Neste ponto, o usuário www-data tem acesso à pasta. No entanto, se eu adicionar uma ACL padrão, o acesso será negado!

$ setfacl -m d:g:www-data:r-x mysite # <---- NOTE the default acl rule.
$ ls -la
d---------+  2 root root 4096 Sep  6 11:16 mysite
$ getfacl mysite/
# file: mysite/
# owner: root
# group: root
user::---
group::---
other::---
default:user::---
default:group::---
default:group:www-data:r-x
default:mask::r-x
default:other::---
    
por Hurrdurrfurr 06.09.2013 / 11:42

2 respostas

1

A ACL padrão é a ACL aplicada aos arquivos recém-criados nesse diretório. Ele também é copiado como a ACL padrão para subdiretórios criados nesse diretório, portanto, a menos que você faça alguma coisa para substituí-lo, ele será aplicado recursivamente.

A ACL padrão não tem efeito no diretório em si ou em nenhum arquivo existente quando você altera a ACL padrão.

Portanto, na sua situação, você precisa definir a ACL no diretório (para o próprio diretório) e definir a ACL padrão (para os arquivos que você criará no diretório).

    
por 08.09.2013 / 03:34
1

A semântica das listas de controle de acesso é complicada, aqui extraída de man -s 5 acl

 1.   If the effective user ID of the process matches the user ID of the
      file object owner, then

          if the ACL_USER_OBJ entry contains  the  requested  permissions,
          access is granted,

          else access is denied.

 2.   else if the effective user ID of the process matches the qualifier
      of any entry of type ACL_USER, then

          if the matching ACL_USER entry and the  ACL_MASK  entry  contain
          the requested permissions, access is granted,

          else access is denied.

 3.   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.

          else  (note  that  there  can be no ACL_GROUP entries without an
          ACL_MASK entry)

              if the ACL_GROUP_OBJ entry contains  the  requested  permis‐
              sions, access is granted,

              else access is denied.

     4.   else if the ACL_OTHER entry contains the requested permissions,
          access is granted.

     5.   else access is denied.

Sei que tenho dificuldade em entender qual regra se aplica ao seu problema específico. Se você as entendeu completamente, você não estaria fazendo uma pergunta aqui. Em particular, é difícil determinar se o usuário, grupo ou outro se aplica, e se o padrão tem precedência sobre o específico. Aqui está um exemplo usando sua ACL:

$ ls -ld mysite
drwxr-x---+ 2 www-data www-data 4096 Sep  6 08:22 mysite
$ getfacl mysite
# file: mysite
# owner: www-data
# group: www-data
user::rwx
group::r-x
other::---
default:user::rwx
default:group::rwx
default:group:www-data:r-x
default:mask::rwx
default:other::r-x

$ ls -l mysite
total 4
-rw-rw-r--+ 1 www-data www-data 56 Sep  6 08:15 example.html

usando seus parâmetros de ACL, tudo está bem, já que estou usando o www-data em meus grupos. Mas, se eu alterar o modo em mysite/ , desative meu acesso:

$ sudo chmod 000 mysite
$ ls -ld mysite
d---------+ 2 www-data www-data 4096 Sep  6 08:22 mysite
$ ls mysite
ls: cannot open directory mysite: Permission denied

note que eu não mudei o acl em tudo.

Em uma nota relacionada, o root nunca, nunca, deve possuir diretórios que farão parte de um serviço da web. Sempre. Mesmo. É por isso que existem contas e grupos sem privilégios como www-data .

O que você deve fazer para que as coisas funcionem da maneira que você acha que deseja? Eu não tenho ideia.

    
por 06.09.2013 / 14:41

Tags