Этот вопрос задавали много раз, но я не нашел решения для такого типа разрешения.
У меня есть VPS с несколькими веб-сайтами в chroot, каждый из которых работает с уникальным пользователем без привилегий root. Я пытаюсь реализовать сценарий развертывания, который запускает главный пользователь (не root), который может получить доступ ко всем веб-сайтам и изменить все файлы.
Общая группа
Первый совет, который я обычно вижу, - это создать группу, в которую войдут как мастер, так и все пользователи сайта.
Насколько я понимаю, мне придется изменить разрешения для моих файлов и папок на 770 (или что-то подобное, что дает группе равные права с владельцем). Однако я часто сталкиваюсь с тем, что эти разрешения «сбрасываются» до 700 (или аналогичного, когда группа теряет разрешения). Большинство моих сайтов построены на Wordpress, который может иметь некоторые автоматические средства безопасности, сбрасывающие чрезмерно раздутые разрешения. Кроме того, если разработчик локально изменяет разрешения группы и загружает их, разрешения будут изменены.
Ищу более стабильное решение - есть подсказки?
Ура :)
Почему бы вам не использовать инструмент развертывания, например капистрано написать задачу, которая подключается ко всем серверам с переменными пользователями и загружает материалы с помощью scp или sftp или даже извлекает из репозитория git?
Вы можете сделать что-то близкое, используя сценарий оболочки и SSH, но существуют инструменты развертывания для решения таких проблем.
Если у веб-сервера нет разрешения на изменение files.dirs, он не может изменить владельца.
Хотя здесь недостаточно информации для разработки модели безопасности, в целом я считаю, что использование uid-доступа веб-сервера на основе «других» разрешений часто является лучшим подходом - следовательно, каталоги должны быть drwxrwSr-x (принадлежать группе, в которую входят пользователи требуется доступ на изменение, но исключая uid веб-сервера, обратите внимание на использование бита setgid) и файлы -rw-rw-r-- (и если вам нужно, чтобы файлы редактировались с помощью uid веб-сервера, тогда drwxrwxrwx).
Но это не обязательно лучшая / полная модель для вашего случая - когда вы говорите, что веб-сайт находится в chroot, вы имеете в виду, что все они находятся в одном chroot? Или у вас есть несколько экземпляров веб-серверов, каждый из которых работает в собственном chroot? Во втором сценарии разделение идентификаторов пользователей является избыточным, и модель, которую я описал выше, является подходящей.
Конечно, вы не хотите, чтобы uid веб-сервера мог записывать любые файлы в корне документа, кроме специально предназначенных для этой цели.
Таким образом, похоже, что, возможно, вам следует иметь все файлы / каталоги, принадлежащие вашему пользователю развертывания и с групповым владением группой всего с 2 членами - пользователем развертывания и uid веб-сервера - и создавать свои каталоги / файлы как drwxr-S-- - / -rw - r ----- (снова с назначенными каталогами / файлами для загрузки как drwxrwS --- / -rw - rw ----)