Вновь созданные файлы игнорируют разрешения ACL Linux

#linux #permissions #composer-php

Вопрос:

У меня проблема с ACL Linux. Вот мой рабочий процесс:

Установите разрешения ACL для пустого каталога:

 sudo setfacl -Rdm g:www-data:rw /var/www/mysite/html/vendor/
 

Изменить каталог:

 cd /var/www/mysite/html/
 

Установка пакетов composer:

 composer install
 

Проверьте права доступа к установленным файлам:

 ls -la vendor/
 

Все вновь созданные файлы и папки принадлежат моей группе пользователей, а www-data не группе, как должно быть…

 drwxrwxrwx   3 john john    4096
 

Что я здесь упускаю?

Примечание. Если мой пользователь создает файл или каталог, будет применено правильное разрешение группы. Проблема возникает только с командой composer.

Комментарии:

1. Неважно, почему это не работает. Делать это — плохая идея. vendor ваш веб-процесс PHP вообще не должен быть доступен для записи. То, что вы пытаетесь сделать, неправильно, так что вам повезло, что у вас это не получается.

2. Почему это проблема? Есть ли какая-то причина, по которой вам это нужно? Может быть, композитор настраивает разрешения самостоятельно?

3. @NicoHaase Хороший вопрос. Я думаю , что мне это нужно, потому что мой веб-сервер не может обслуживать файлы, созданные composer, поскольку он им не владеет и не принадлежит к их группе. Я всегда получаю ошибки разрешений после установки пакета. Мне нужно вручную добавить все файлы в группу www-данных, чтобы исправить это.

4. Пожалуйста, поделитесь более подробной информацией о сообщении об ошибке, с которым вы столкнулись. Как правило, вы никогда не должны передавать какие-либо файлы из vendor папки

Ответ №1:

Наконец-то я понял, что делал не так. Я перепутал «владение файлом» и «права доступа к файлу».

setfacl используется для установки «разрешений» по умолчанию для файлов, созданных в каталоге. Что мне на самом деле было нужно, так это установить «владение»по умолчанию. Это делается путем установки флага «setgid» с chmod помощью команды после правильной настройки группы каталогов и владельца пользователя.

Я хотел, чтобы все вновь созданные файлы в каталоге моего проекта принадлежали пользователю «джон» и группе «www-данные».

 chown -R john:www-data /srv/www/myproject
 

Теперь мы устанавливаем «флаг setgid» в каталоге, и все вновь созданные файлы будут принадлежать john:www-data :

 chmod  s /srv/www/myproject
 

Вот и все, и нет абсолютно ничего плохого в настройке группы www-данных для ваших обслуживаемых файлов, если вы правильно настроили все остальное. Фактически, самый популярный анализатор, связанный с разрешением на файл Laravel в Stackoverflow (800 upvote), рекомендует именно этот метод. Те, кто не согласен, никогда не предложат лучшего рабочего решения.

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