#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. Отнеситесь к ответам, которые вы читаете, с долей серьезности.