Git для сайтов

9 ноября 2018

  • Исходная задача систем контроля версий, таких, как Git и Mercurial:
    • отслеживать историю изменений в исходных текстах при разработке программ,
    • обеспечивать коллективную разработку, упрощая обмен обновлениями между разработчиками.
    • Неплохая инструкция, написанная чайником для чайников, и комментарии к ней: https://dev.1c-bitrix.ru/community/webdev/user/23706/blog/12414/
  • Применительно к веб-сайтам, Git или Mercurial можно использовать, чтобы решать ещё две важных задачи:
    • резервное копирование,
    • обнаружение взломов.

Обнаружение взломов:

  • Создайте файл /etc/cron.daily/site-gitcheck со следующим содержимым:
  • #!/bin/sh
    cd /path/to/site
    git status | grep -qi 'nothing to do' && exit 0
    git status | mail -s "Achtung, site changed!" webmaster@example.org
  • Затем сделайте его исполняемым:
  • chmod +x /etc/cron.daily/site-gitcheck
  • В .gitignore имеет смысл добавить каталоги, в которые посетителям разрешена закачка файлов (изображений, видео и т.д.)
    Например, для Wordpress'a .gitignore будет таким:
  • wp-content/uploads/*

Резервное копирование:

  • Применительно к основному каталогу сайта должно вызываться только вручную после явных исправлений и просмотра git diff, чтобы не пропустить взломы.
  • Допустимо вызывать автоматически только применительно к каталогам, в которые разрешена закачка файлов.
  • Создайте файл /etc/cron.daily/site2git (и сделайте исполняемым через "chmod +x"):
  • #!/bin/sh
    cd /path/to/site/uploads
    git status | grep -qi 'nothing to do' && exit 0
    git add -A
    git commit -am "AutoBackup-$(date +%Y-%m-%d-%H%M)"
    git push

Правила безопасности:

  • Каталог .git содержит копии всех файлов на сайте, включая программный код, логины-пароли для подключения к базе данных и т.д.
  • Доступ к этому каталогу обязан быть закрыт! Это можно сделать разными способами, в т.ч. настройками операционной системы, веб-сервера или Git.
  • Если вы работаете в консоли сервера с правами суперпользователя, то СРАЗУ после создания или клонирования репозитория закройте веб-приложениям доступ к .git следующими командами:
  • chown root:root .git
    chmod 700 .git
  • В настройках веб-сервера блокируйте обращения ко всем файлам и каталогам, имя которых начинается с точки, за исключением явно перечисленных (например, к служебной папке .well-known, которую создают клиенты LetsEncrypt).
    • Пример настроек для Nginx:
    • location ~ /\.well-known/ { alias /path/to/letsencrypt; }
      location ~ /\. { deny all; }
  • Держите данные Git вместо подкаталога .git в отдельном внешнем каталоге, к которому нет доступа через Веб.
  • Читайте про тех, кто пренебрег вышеперечисленными рекомендациями:


← Назад в Блог