Рейтинг:0

Пользователь www-data не может открыть файл для записи в php

флаг bj

У меня есть сервер apache, работающий как www-data на Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-97-общий x86_64) В файле php следующая строка завершается с ошибкой: Отказано в доступе

$f=fopen("detekst.txt","a+");

Глядя на разрешения:

la-al detekst.txt
-rw-rw-r-- 1 L146584 leerlingen 1364 15 фев 15:12 detekst.txt

и контрольные группы

группирует www-данные 
www-данные : www-данные Леерлинген

Я также проверил с помощью exec('whoami'); что www-data запускает php.

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

Так что я действительно озадачен, почему www-data, будучи членом leerlingen, не может открыть файл?

Если я изменю разрешения detekst.txt на 0666:

-rw-rw-rw- 1 L146584 leerlingen 1364 15 фев 15:12 detekst.txt

PHP-код работает нормально!

Также при возврате к разрешению файла 664 и изменении группы на www-data все работает нормально.

-rw-rw-r-- 1 L146584 www-data 1478 15 фев 15:45 detekst.txt

Что я здесь делаю неправильно?

Рейтинг:0
флаг ru

Ваша групповая принадлежность файла, о котором идет речь, не www-данные когда вы впервые пытаетесь использовать файл, как таковой www-данные пользователь и группа не имеют прав на запись, когда 644 или же 664 являются разрешениями на файл. Если www-данные не имеет права пользователя или группы на файл, он попадает в категорию «другие» для разрешений, которые доступны только для чтения (4 = права только для чтения на языке chmod)

Исправить это, чтобы изменить владельца группы, как вы видели www-данные а затем убедитесь, что разрешения 664 хотя бы потому, что это добавляет разрешение на запись.

В качестве альтернативы, www-данные добавляются в другую группу, затем вы перезагружаете сервер, чтобы убедиться, что все службы перезапущены. правильно с новыми разрешениями. В Linux службы уже запущены и не будут наследовать новое членство в группе разрешений до тех пор, пока службы не будут полностью перезапущены под новым сеансом этого «пользователя», независимо от того, является ли он пользователем системного демона или нет. Таким образом, перезагрузка поможет обновить эти данные при следующем запуске веб-сервера.

John Val avatar
флаг bj
Спасибо, Томас, Но www-data является членом группы leerlingen, так почему же www-data не принадлежит? Другие члены leerlingen имеют права на запись, и я не хочу, чтобы все члены leerlingen были членами группы www-data
флаг ru
Вы не должны помещать www-данные в какие-либо другие группы, кроме www-data, потому что в противном случае им будут предоставлены разрешения на то, что вам, возможно, не нужно. Если вы добавили www-данные в группу, но не перезапустили свой сервер, чтобы все службы перезагрузились с новыми наборами разрешений, у него не будет доступа.
John Val avatar
флаг bj
Теперь я решил проблему, используя acl, добавив www-data в качестве дополнительного пользователя ко всем файлам в дереве каталогов.
флаг ru
@JohnVal ACL вступает в силу мгновенно, да, но вместо ACL просто перезапустите свои службы с помощью перезагрузки. Это гарантирует, что «www-data» унаследует соответствующие разрешения, которые ему были назначены.
John Val avatar
флаг bj
Еще раз спасибо, Томас, Возможно, перезагрузка или перезапуск службы apache2, вероятно, решили бы проблему, но я этого не пробовал. Каталог используется совместно с помощью Samba, и даже создание новых файлов дает мне дополнительного пользователя www-data с помощью acl. Так что на данный момент я счастливый человек. Всего хорошего,
John Val avatar
флаг bj
Томас, я перезагружу :)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.