Этот вопрос задают снова и снова, но, похоже, ни один из ответов не отвечает на мой конкретный вопрос - либо это, либо я не понимаю.
В любом случае, согласно названию, я пытаюсь ограничить наших веб-разработчиков определенной папкой, например: /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.
Спасибо!
Для меня нет простого решения вашей проблемы: даже если вы отложите смену владельца, вам нужно будет дважды поменять местами его снова в следующий раз, когда вы захотите редактировать / поддерживать файл.
Это приводит к двуглавой среде: иногда разработчикам разрешено редактировать материал, иногда нет ... Почему так? Если это производственный сервер, они не должны использовать его в качестве игровой площадки, если это сервер разработки, они никогда не должны ограничиваться редактированием контента!
Я бы посоветовал вам переосмыслить, как устроена ваша установка:
Чтобы решить проблему множественного доступа к файлам, я бы рекомендовал использовать механизмы контроля доступа, встроенные в управление файловой системой Linux, с правами по умолчанию:
user
(владелец) имеет rw
права -> Использовать его для модификаторов контента, то есть разработчиков в среде разработки, инструмента публикации в стадии / производствеgroup
имеет r
права -> Используйте его для доступа к контенту (например, веб-сервера, серверных приложений и т. д.), убедившись, что все они принадлежат group
Особые случаи, такие как каталоги, в которых веб-серверу / приложениям требуется доступ на запись, например каталог загрузки, делают исключение, добавляя w
для group
разрешение на этот каталог (или сделать этот конкретный каталог заблокированным для кого-либо еще, сделав его владельцем group
)
Теперь, чтобы автоматически сделать новые файлы доступными для чтения веб-серверу / приложениям, вы можете использовать setgid
флаг из разрешений файловой системы. Это автоматически изменит группу любого добавленного файла на group
.
Вот краткий пример, так что резюмируйте все:
Ваш веб-сервер и любое внутреннее приложение принадлежат www-data
группа.
У тебя есть /srv/www/
Веб-корень в 2 средах:
dev:www-data
и права 4755 rwxr-sr-x
git:www-data
и права 4755 rwxr-sr-w
Чтобы обновить контент в разработке, используйте dev
аккаунт или любой инструмент, использующий этого пользователя.
Чтобы обновить содержимое в рабочей среде, используйте инструмент git, правильно настроенный для отправки данных в нужное место, используя git
пользователь.