Подтвердить что ты не робот

Могу ли я отключить git -clone через http?

Я использую git для управления крошечным проектом. Я выполнял все свои транзакции (клон, push, pull и т.д.) Через SSH, но недавно запустил git -update-server-info, потому что мне хотелось поэкспериментировать с запуском git -clone over http. Он отлично работал. Круто. Теперь я понимаю, что любой может клонировать мой репозиторий через http без каких-либо учетных данных. Я смутно знаю, как настроить HTTP-аутентификацию через gitosis, но это действительно не то, что я хочу. Я бы предпочел просто полностью отключить клонирование http.

Есть ли способ, которым я могу сказать git разрешать транзакции только через ssh? Или я могу отменить то, что я сделал, когда я запускал git -update-server-info, чтобы включить клонирование по http в первую очередь?

4b9b3361

Ответ 1

Для репозитория git, который будет доступен через транспорт HTTP, он должен быть "экспортирован" любым (любым) веб-сервером. Если ваш репозиторий (точнее его каталог .git) виден снаружи в веб-браузере, он может быть клонирован или анонимно получен через HTTP-протокол. git update-server-info используется для создания дополнительных вспомогательных (.git/objects/info/packs и .git/info/refs) для клонирования (или выборки), чтобы узнать, что доступно.

Итак, вам нужно либо удалить эти два файла (.git/objects/info/packs и .git/info/refs), либо просто сделать так, чтобы ваш репозиторий недоступен через Интернет, возможно, изменение разрешений таким образом, что пользователь, на котором работает веб-сервер (обычно "nobody" или "www" или "apache" ), не имеет доступа к репозиторию .git. Или настроить веб-сервер, чтобы он не экспортировал (сделать видимым) ваш репозиторий.

Протокол HTTP (в настоящее время) называется так называемым "тупым" протоколом, что означает, что он служит для файлов как есть, а управление доступом выполняется сервером [dumb], в этом случае используемым веб-сервером (или файловой системой).

Я предполагаю, что ваш репозиторий не экспортируется веб-сервером, поэтому вам не о чем беспокоиться: ваш репозиторий недоступен через HTTP.

Обратите внимание, что обычно для репозиториев git для анонимного неавторизованного доступа доступна только обычная запись и требуется аутентификация только для записи в репозиторий, то есть нажатие (по крайней мере для проектов с открытым исходным кодом)

Ответ 2

Есть ли способ, которым я могу сказать git разрешать транзакции только через ssh?

Через 6-8 лет git 2.12 (Q1 2017) предложит конфигурацию для разрешения или запрета протокола, используемого Git.

 git config protocol.http.allow never
 git config protocol.https.allow never
 git config protocol.git.allow never
 git config protocol.file.allow never

 git config protocol.ssh.allow always

См. commit abcbdc0 (14 декабря 2016 г.) Джефф Кинг (peff).
См. совершить a768a02, зафиксировать aeae4db, commit f1762d7, commit f962ddf, commit 85e4205 (14 декабря 2016 г.) Брэндон Уильямс (mbrandonw). < ш > (слияние Junio ​​C Hamano - gitster - в совершить 9d540e9, 27 декабря 2016 г.

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

git config теперь включает в себя:

protocol.allow

Если установлено, укажите пользовательскую политику по умолчанию для всех протоколов, которые явно не имеют политики (protocol.<name>.allow).
По умолчанию, если unset,

  • безопасные протоколы (http, https, git, ssh, file) имеют политику по умолчанию always,
  • Известно-опасные протоколы (ext) имеют политику по умолчанию never и
  • все остальные протоколы имеют политику по умолчанию user.

Поддерживаемые политики:

  • always - протокол всегда может использоваться.
  • never - протокол никогда не может быть использован.
  • user - протокол может использоваться только тогда, когда GIT_PROTOCOL_FROM_USER либо не установлен, либо имеет значение 1.
    Эта политика должна использоваться, когда вы хотите, чтобы протокол был непосредственно использован пользователем, но не хотите, чтобы он использовался командами, которые выполняют команды clone/fetch/push без ввода пользователем, например. рекурсивная подмодуляция.

Ответ 3

Удалить .git/objects/info/packs и .git/info/refs