Проблемы безопасности при использовании git в качестве утилиты развертывания - PullRequest
1 голос
/ 14 февраля 2012

git - очень мощный инструмент, но его не так просто использовать

Например, я рад использовать git в качестве инструмента для обновления моего удаленного сайта из моего репозитория git. Проблема в том, что в корне моего сайта есть каталог .git, внешние пользователи могут просто зайти на него с помощью site / .git, что ужасно, поскольку они могут легко получить историю моего кода и, в основном, текущий код, они могут даже получить пароли и личную информацию из файлов конфигурации.

Так, как правильно использовать git, который может в полной мере использовать git, но без введения этих угроз?

Использование git clone git://repo site_root для инициализации веб-сайта и git pull для получения изменений очень удобно, но также создает огромные проблемы с безопасностью.

Существуют ли какие-либо методы, которые могут быть такими же удобными, как шаги, показанные выше, но без ошибок безопасности?

Ответы [ 6 ]

2 голосов
/ 14 февраля 2012

Apache, по крайней мере, по умолчанию конфигурирует запрет веб-доступа к любому файлу, начинающемуся с ., и это можно сделать и на любом другом веб-сервере.

Кроме того, лучше сохранять конфиденциальностьфайлы вне корневого веб-каталога, то есть:

.git/
config.file
public/
public/index.html

и корневым каталогом документа для сайта будет каталог public/.

1 голос
/ 14 февраля 2012

Ну, я не очень люблю использовать git для автоматического развертывания последней версии вашего кода, но это другой вопрос.

Что касается вашей проблемы безопасности, то самым простым решением было бы просто удалить доступ к вашему файлу .git (с файлами htaccess?).

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

1 голос
/ 14 февраля 2012

См. http://www.clientcide.com/best-practices/exporting-files-from-git-similar-to-svn-export/

Сверху:

Вот моя однострочная команда для взятия архива и отправки его в другое место:

git архив HEAD | (cd ~ / путь / где / я / хочу / это / && tar -xvf -)

Это извлечет ВСЮ библиотеку по указанному пути (без файлы .git и еще много чего).

Иногда, однако, я хочу вытащить только часть библиотеки. Git архив всегда дает вам всю энчилада, которая вроде как отстой, и в этом случае я использую rsync, например:

rsync путь / I / хочу / к / экспорт / -ri --del -m --exclude ". *" ~ / путь / где / я / хочу / это / | grep sT

Этот последний бит - grep sT ограничит вывод того, что я вижу так что я вижу только файлы, которые обновляются. Я использую это только для здравомыслия проверьте мой экспорт. Если я вижу тонну вещей, перейдите, чтобы обновить путь, который уже есть библиотека, и я знаю, что я изменил только один файл, то я знаю, что я неправильно понял путь.

0 голосов
/ 11 июня 2014

Я воскрешу этот вопрос, потому что я также изучаю проблемы безопасности.

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

0 голосов
/ 14 февраля 2012

Если требуется полное репо на производственном сервере, тогда есть решение.

Вы можете иметь всю историю где-нибудь в файловой системе и иметь git «точку» для нее.

$ cd /public                        # go to the public directory
$ git clone git://repo              # to initialize the web site
$ mv .git /private/repo.git         # move sensible information to a private place
$ export GIT_DIR=/private/repo.git  # make git "point" to the history
$ git pull                          # update changes

Если вы это сделаете, ваша история будет в /private/repo.git, который не доступен через Интернет, а ваш рабочий каталог будет в / public, обслуживая только версию файлов, которые вы указали.

Для получения дополнительной информации вы можете прочитать progit .

0 голосов
/ 14 февраля 2012

Сочетание комментария @ JaredPar и ответа @Chris Shain выше (+1 для архива git).

Я также использую git archive, а затем использую Chef для фактического развертывания. Не может быть проще.

  1. git archive <tag_name> | gzip > rc.tar.gz
  2. mv rc.tar.gz к моей кулинарной книге
  3. загрузить кулинарную книгу

Шеф-клиент, работающий на моем сервере, запускает рецепт, чтобы скопировать zip-файл в папку chache и извлечь его в каталог моего веб-сервера.

Примечание для себя: опубликуйте рецепт на github

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...