Permissão de leitura negada ao usuário com permissão do grupo ACL para ler

1

Introdução

Um cenário comum para um aplicativo da Web que possui duas pastas gerais. Um preenchido com código que é executado pelo servidor de aplicativos, por exemplo, uwsgi, e um com conteúdo estático diretamente entregue pelo servidor web, por exemplo, nginx.

Em um servidor Debian, a conta de usuário para o servidor web é www-data, enquanto o servidor de aplicativos normalmente é único por aplicativo. Isso significa que no arquivo de código pode ter o seguinte acl:

# file: code/main.py
# owner: user
# group: user
user::rwx
group::rwx
group:app-server:rwx
other::---

Enquanto um arquivo estático pode ter a seguinte ACL:

# file: static/bootstrap.css
# owner: user
# group: user
user::rwx
group::rwx
group:app-server:rwx
group:www-data:r--
other::---

A pergunta atual

Como é possível que um arquivo com estas permissões:

$ sudo getfacl /srv/domain/django/static_files/bootstrap/css/bootstrap.css
getfacl: Removing leading '/' from absolute path names
# file: srv/domain/django/static_files/bootstrap/css/bootstrap.css
# owner: user
# group: user
user::rwx
group::rwx
group:www-data:r--
group:app-server:rwx
group:user-organization:rwx
mask::rwx
other::---

Não é legível por www-data:

$ sudo -u www-data cat /srv/domain/django/static_files/bootstrap/css/bootstrap.css
cat: /srv/domain/django/static_files/bootstrap/css/bootstrap.css: Permission denied

Quando o usuário www-data é claramente um membro do grupo com o mesmo nome:

$ id www-data
uid=33(www-data) gid=33(www-data) groups=33(www-data)

De fato, renunciar a todo o controle e permitir que alguém leia nada faz para ajudar a situação:

$ sudo chmod 774 /srv/domain/django/static_files/bootstrap/css/bootstrap.css
$ sudo getfacl /srv/domain/django/static_files/bootstrap/css/bootstrap.css
getfacl: Removing leading '/' from absolute path names
# file: srv/domain/django/static_files/bootstrap/css/bootstrap.css
# owner: user
# group: user
user::rwx
group::rwx
group:www-data:r--
group:app-server:rwx
group:user-organization:rwx
mask::rwx
other::r--
$ cat /srv/domain/django/static_files/bootstrap/css/bootstrap.css
cat: /srv/domain/django/static_files/bootstrap/css/bootstrap.css: Permission denied

Alterar a propriedade e o grupo do arquivo para www-data com chown e chgrp não altera o resultado. Não vejo nada de interesse em dmesg, messages ou auth.log.

Então, algo está acontecendo, mas estou sem ideias.

    
por Rovanion 05.12.2015 / 19:13

1 resposta

1

A resposta é que o grupo de usuários deve ter permissões de listagem ou execução em todas as pastas que levam à pasta que contém o arquivo.

Em outras palavras, a solução foi a seguinte:

$ sudo setfacl -m g:www-data:X /srv/domain
$ sudo setfacl -m g:www-data:X /srv/domain/django
$ sudo setfacl -R -m g:www-data:rX /srv/domain/django/static_files
    
por 06.12.2015 / 09:17