%20%D0%BF%D0%BE-%D0%BF%D1%80%D0%B5%D0%B6%D0%BD%D0%B5%D0%BC%D1%83%20%D0%BD%D0%B5%20%D0%BC%D0%BE%D0%B6%D0%B5%D1%82%20%D1%87%D0%B8%D1%82%D0%B0%D1%82%D1%8C%20%D1%84%D0%B0%D0%B9%D0%BB%D1%8B.png)
Моему PHP-скрипту нужен доступ к некоторым файлам, которые находятся в совершенно другом каталоге.
Я установил ACL для пользователя www-data с разрешением на чтение, но функция PHP file_get_contets() возвращает ошибку «Отказано в доступе».
Это работает только в том случае, если я задаю пользователя или группу www-data для этого каталога, чего я делать не хочу, если только списки контроля доступа не влияют на программы, работающие под заданными пользователями, а установка владельца — единственный способ сделать это.
Список ACL:
# owner: user1
# group: group1
# flags: -s-
user::rwx
group::rwx
other::---
default:user::rwx
default:user:www-data:rwx
default:user:user1:rwx
default:user:user2:rwx
default:group::rwx
default:mask::rwx
default:other::---
заранее спасибо
решение1
Ваш вывод показывает, что вы установили ACL "по умолчанию" (наследуемый) для каталога, но не "нормальный" (эффективный) ACL. Другими словами, записи с префиксом default:
существуют только для копирования во вновь созданные файлы, но ониненемедленно обратиться к этому каталогу.
Таким образом, единственными эффективными разрешениями являются следующие, и единственная запись ACE, соответствующая пользователям «www-data» и «user2», — это общая other::---
запись, которая вообще не предоставляет никаких разрешений:
# владелец: user1 # группа: группа1 # флаги: -s- пользователь::rwx группа::rwx другой::---
Поскольку «www-data» не соответствует ни одной записи ACE, которая бы предоставляла разрешение +x (обход) для каталога, ему не разрешается получать доступ ни к каким файлам внутри него, независимо от того, что могут указывать их собственные разрешения.
Чтобы исправить это, снова настройте ACL, на этот раз без добавления флага «по умолчанию»:
setfacl -m "u:www-data:rwx" the_directory