Разрешение на чтение запрещено пользователю с разрешением на чтение группы ACL

Введение

Обычный сценарий для веб-приложения, в котором есть две общие папки. Один заполнен кодом, который выполняется сервером приложений, например uwsgi, а другой - статическим контентом, непосредственно доставляемым веб-сервером, например nginx.

На сервере Debian учетная запись пользователя для веб-сервера - www-data в то время как сервер приложений обычно уникален для каждого приложения. Это означает, что в коде файл может иметь следующий acl:

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

В то время как статический файл может иметь следующий ACL:

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

Фактический вопрос

Как это возможно, что файл с этими разрешениями:

$ 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::---

не может быть прочитан 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

Когда пользователь www-data явно является членом группы с таким же name:

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

Фактически отказ от контроля и разрешение кому-либо читать ничего не помогает в ситуации:

$ 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

Изменение владельца и группы файла на www-data с помощью chown и chgrp не меняет результата. Я не нашел ничего интересного в dmesg, messages или auth.log.

Итак, что-то происходит, но у меня нет идей.

1
задан 5 December 2015 в 20:24
1 ответ

Ответ заключается в том, что группа пользователей должна иметь разрешения на перечисление или выполнение для каждой папки, ведущей к папке, содержащей файл.

Другими словами. решение было следующим:

$ 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
1
ответ дан 3 December 2019 в 23:55

Теги

Похожие вопросы