Назад | Перейти на главную страницу

Предотвращение взлома пушерами моего центрального репозитория Mercurial

Я использую центральный репозиторий Mercurial, и я понимаю, что обычная команда «push» остановится, если удаленный пользователь попытается принудительно отправить несколько «головок» в мой центральный репозиторий. Предполагается, что удаленный пользователь должен сначала выполнить извлечение и слияние, прежде чем пытаться снова отправить.

Однако, используя hg push --force переопределит это. Я хотел бы заблокировать такое поведение.

В настоящее время я использую hgwebdir.cgi плюс некоторые вещи apache-auth, чтобы ограничить возможности пользователей тянуть и толкать.

EDIT: крючок pretxnchangegroup решил проблему. Крюк сработал:

#!/bin/bash
# force-one-head
# add the following to <repository>/.hg/hgrc :
# [hooks]
# pretxnchangegroup.forceonehead = /path/to/force-one-head

if [[ `hg heads -q | wc -l` -gt 1 ]]; then
    echo "There are multiple heads."
    echo "Please 'hg pull' and get your repository up to date first."
    echo "Also, don't 'hg push --force' because that won't work either."
    exit 1
fi

Это не изменение Apache, но вы должны установить его в самом репозитории Mercurial.

Вы можете настроить хуки, которые запускают скрипт перед тем, как принять push в ваш репозиторий. В скриптах, запускаемых pretxncommit или pretxnchangegroup хуки, вы можете проверить, создают ли эти изменения новую голову, и отклонить их, если они это сделают.

Видеть глава о крючках в Hg Book Больше подробностей.

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

Рассмотрите возможность размещения репозитория на сервере с контролируемым доступом, а затем реализацию Меркуриальный сервер (ранее известный как hg-admin-tools). Пользователи проходят через SSH (из Windows или Linux) и подпадают под ваш контроль доступа.

Есть два файла разрешений, которые предоставят вам детальный контроль над тем, кто может читать, а не нажимать. Под одной системой управления можно настроить несколько репозиториев, поэтому вам не придется устанавливать ее снова и снова.