Назад | Перейти на главную страницу

Разрешить пользователю разработчика редактировать файлы, которые иногда принадлежат www-data

Этот вопрос задают снова и снова, но, похоже, ни один из ответов не отвечает на мой конкретный вопрос - либо это, либо я не понимаю.

В любом случае, согласно названию, я пытаюсь ограничить наших веб-разработчиков определенной папкой, например: /var/www/site1.com и убедитесь, что они могут редактировать файлы, которые в конечном итоге принадлежат www-data.

Пока мне удалось это сделать, добавив правило соответствия в sshd_config для пользователей в группе sftp и chroting пользователя dev в их домашний каталог, где я mount --bind /var/www/site1.com/ /home/dev/site1.com и chown -R dev:www-data /var/www/site1.com/.
Затем я изменил все файлы на 644, а каталоги, в которые нужно записать, - на 775.

До сих пор это работало отлично, за исключением файлов, которые загружаются через сам сайт в /var/www/site1.com/public_html/uploads/ которые не редактируются пользователем dev потому что однажды загруженные посетителями сайта, в конечном итоге принадлежат пользователю www-data.

Я полагаю, что могу добавить cron для изменения разрешений на регулярной основе, но, конечно, есть лучшее, что я могу сделать?

Веб-сервер - это Nginx с php5-fpm в Ubuntu 14.04.

Спасибо!

Проблема

Для меня нет простого решения вашей проблемы: даже если вы отложите смену владельца, вам нужно будет дважды поменять местами его снова в следующий раз, когда вы захотите редактировать / поддерживать файл.

Это приводит к двуглавой среде: иногда разработчикам разрешено редактировать материал, иногда нет ... Почему так? Если это производственный сервер, они не должны использовать его в качестве игровой площадки, если это сервер разработки, они никогда не должны ограничиваться редактированием контента!

Предложенное решение

Я бы посоветовал вам переосмыслить, как устроена ваша установка:

  • Используйте производственную среду, в которой только инструменты автоматической публикации (Git? Rsync?) Имеют средства и права доступа для изменения (публикации) контента.
  • Используйте (а) среду (-ы) разработки, в которой разработчики счастливы все испортить
  • Кроме того, обычно используется `` промежуточная '' среда, в которой тестовое содержимое используется в настройке, имитирующей производство, просто для того, чтобы убедиться, что все работает хорошо и где запустить тест, имитирующий реальный мир.

Чтобы решить проблему множественного доступа к файлам, я бы рекомендовал использовать механизмы контроля доступа, встроенные в управление файловой системой Linux, с правами по умолчанию:

  1. user (владелец) имеет rw права -> Использовать его для модификаторов контента, то есть разработчиков в среде разработки, инструмента публикации в стадии / производстве
  2. group имеет r права -> Используйте его для доступа к контенту (например, веб-сервера, серверных приложений и т. д.), убедившись, что все они принадлежат group

Особые случаи, такие как каталоги, в которых веб-серверу / приложениям требуется доступ на запись, например каталог загрузки, делают исключение, добавляя w для group разрешение на этот каталог (или сделать этот конкретный каталог заблокированным для кого-либо еще, сделав его владельцем group)

Теперь, чтобы автоматически сделать новые файлы доступными для чтения веб-серверу / приложениям, вы можете использовать setgid флаг из разрешений файловой системы. Это автоматически изменит группу любого добавленного файла на group.

Подвести итог

Вот краткий пример, так что резюмируйте все:

Ваш веб-сервер и любое внутреннее приложение принадлежат www-data группа.

У тебя есть /srv/www/ Веб-корень в 2 средах:

  1. Развитие, с собственниками dev:www-data и права 4755 rwxr-sr-x
  2. Производство, с собственниками git:www-data и права 4755 rwxr-sr-w

Чтобы обновить контент в разработке, используйте dev аккаунт или любой инструмент, использующий этого пользователя.

Чтобы обновить содержимое в рабочей среде, используйте инструмент git, правильно настроенный для отправки данных в нужное место, используя git пользователь.