Я не знаю, как лучше задать этот вопрос. За несколько лет я зашел в угол, и мне нужно кое-что разобраться. Я почти наверняка не следовал лучшим практикам до сих пор, но вот и все.
Я создаю и размещаю сайты Django на собственном сервере Linux (Ubuntu). Я управляю их версией с помощью Bazaar и загружаю через SSH + BZR. Все они попадают в родительский каталог, образно названный /websites/
. Производственные экземпляры - это всего лишь основные отделения БЗР (не на экспорт). Я не использую никаких FTP-серверов, только SSH.
Мой рабочий процесс: я редактирую локальную копию веб-сайта, фиксирую изменения. Поскольку все они связаны ветвями, коммит автоматически отправляется на сервер и имеет ловушку, которая затем запускает обновление, которое, в свою очередь, решает, нужно ли перезагружать сайт Django. Я только что написал сценарий, чтобы он работал на меня.
Все файлы веб-сайтов принадлежат моей учетной записи. oli
. В настоящее время все веб-сайты бегать под этой учетной записью тоже.
Иногда клиент хочет получить доступ к своим сайтам, что достаточно справедливо, но я не уверен, смогу ли я сделать это при текущей структуре. Я думаю, что нужно что-то изменить, чтобы я смог достичь следующих целей:
Я могу создать новую учетную запись пользователя для клиента, чтобы он мог войти в систему и играть с их сайты (и только их) сайты. Я действительно доверяю своим клиентам, но других моих клиентов не следует ставить в положение, когда я заставляю их доверять друг другу.
Я все еще могу работать на всех сайтах так же, как со своей учетной записью, в идеале в одном месте, но я бы выжил, если бы на сервере они были разделены на основе пользователей.
Если возможно, заставьте пользователей пройти через BZR, чтобы они не испортили производственную ветвь глупыми ошибками, которые нельзя легко откатить. Вы знаете, как это работает: если я даю клиенту доступ и что-то «загадочным образом» перестает работать, это моя вина, что бы ни случилось. Мне нужно иметь возможность отслеживать, что происходит, но точно так же клиенты должны иметь возможность вносить изменения без моего взаимодействия (модель привратника VCS для меня не работает).
Итак, если я могу сделать что угодно, чтобы изменить текущую настройку, как лучше всего это сделать?
Мои текущие мысли:
Установка простого FTP-сервера (и др.), Который работает как oli
чтобы сохранить какие-либо разрешения и попытаться заставить их использовать BZR, но в противном случае потребуется синхронизировать обновления.
Если вы считаете, что это жизнеспособно, существует ли безопасный эквивалент FTP, который система видит как одного пользователя, но аналогично то, что я могу произвольно ограничить определенными каталогами (например, пользователь client-a может просматривать только подмножество каталогов веб-сайта).
Встряхните его полностью, используйте отдельные логины SSH, держите веб-сайты у клиентов $HOME
dirs. Если это получит ваш голос, какова моя лучшая тактика, чтобы они ничего не делали, кроме доступа их файлы? Есть ли хорошая комбинация для ограничения ForceCommand internal-sftp
с механизмом chroot?
Но я усвоил дурные привычки, взламывая вещи вокруг. Как бы ты сделай это?
Я бы изменил владельца группы каждого каталога на группу для каждого соответствующего клиента (и установил липкий бит в каталоге, чтобы новые файлы наследовали этот gid), и дал им учетную запись только с доступом bzr + ssh, а затем попросил их использовать bzr проверить их сайт и работать над ним так же, как и вы. Очевидно, добавьте себя во все группы клиентов.