Зробіть веб-каталог .git недоступним


129

У мене є веб-сайт, на якому я використовую github (закрите джерело) для відстеження змін та оновлення сайту. Єдина проблема полягає в тому, що, схоже, каталог .git доступний через Інтернет. Як я можу зупинити це і все ще мати можливість використовувати git?

Чи варто використовувати .htaccess? Чи потрібно змінити дозволи на .git?


повинен бути на Serverfault
tback

8
Є на сервері за замовчуванням: serverfault.com/questions/128069/…
scribu

Відповіді:


39

Створіть .htaccessфайл у .gitпапці та вставте у цей файл:

Order allow,deny
Deny from all

Але зауважте, що це було б втрачено, якщо ви коли-небудь повторно клонували сховище


38
Щоправда, але я б рекомендував .git/не вносити його в сам каталог, оскільки він буде втрачений, якщо ви коли-небудь переклонірували сховище.
Джейк Уортон

Це біль, якщо у вас є більше одного .git каталогу, і його потрібно повторити, якщо ви коли-небудь повторно клонуєте каталог.
Bennett McElwee

1
Я спробував це і виявив, що він працює, але БУДЬ-ЯКОГО рішення, яке ставить цей параметр в. недоступний), включаючи те, як це робиться, коли і ким, є невеликим, але все ще є ключовим для даних (особливо для його безпеки, включаючи аналіз, коли & раніше не було зроблено належним чином), але НЕ в .git / це насправді НЕ є частиною належних даних ( включаючи переосмислені та спільно використані та добре збережені), так що НЕ відновлено ... аналогічно найкращому .gitignore з належними даними, а не в .git /.
Архитектор долі

3
Чому це прийнята відповідь, а не відповідь Беннетта? Його проста і ефективна методика вирішення цього питання.
Джош Франкель

1
Швидше за все, тому що ОП прийняла це за два роки до того, як було розміщено інше;)
ThiefMaster

379

Помістіть це у .htaccessфайл у корені веб-сервера:

RedirectMatch 404 /\.git

Це рішення є надійним і надійним : воно

  • працює для всіх .gitкаталогів на вашому веб-сайті, навіть якщо таких існує більше,
  • також приховує інші файли Git, як .gitignoreі.gitmodules
  • працює навіть для нещодавно доданих .gitкаталогів, і
  • навіть не віддає того факту, що каталоги існують.

1
Він працював над .gitпапкою, але я все ще міг змусити .gitignoreфайл витягнутись.
Курт Емч

Мій регекс працює в моєму тестуванні, і він повинен працювати відповідно до документації RedirectMatch, оскільки регулярний вираз повинен відповідати лише частині URL-адреси, а не повній URL-адресі: див. Примітку "тонка різниця" у пов'язаній документації AliasMatch . Все-таки документи - це одне, реальний світ - інше. Регекс @artlogic відповідає повній URL-адресі, тому, можливо, в Apache є деякі відмінності версій, або я просто неправильно читаю речі.
Bennett McElwee

2
@BennettMcElwee - після детального ознайомлення з документацією та проведення декількох тестів, схоже, що макі знаки не потрібні мені. Дякую за рішення. Чудово працює!
artlogic

Згідно з документами apache2, ви також можете помістити його в інший конфігураційний контекст:server config, virtual host, directory, .htaccess
bennos

Я б навіть запропонував додати ". *" В кінці виразу, так що жоден файл / папка під .git / не може бути доступний ->RedirectMatch 404 /\.git.*
Димитрій Хавто

33

І те, .htaccessі дозволи в .git/папці будуть працювати. Рекомендую колишній:

<Directory .git>
    order allow,deny
    deny from all
</Directory>

Чи є інший спосіб робити з apache, оскільки мені не дозволяється використовувати директиву <Directory> через налаштування сервера.
Кріс Мюнч

2
Є всі види способів узгодження (наприклад, <Files>, <FilesMatch>).
Джейк Уортон

4
Ця відповідь абсолютно невірна - Каталог просто не дозволений у файлах .htaccess. Це не залежить від налаштувань сервера.
подвійний маркер

2
NI8VDY = Помилка в 1 з 1 разів я спробував це: на Dreamhost спільному хостингу я помістив це в корінь веб-сайту .htaccess, а потім http: на веб-сайті root дав цитату помилок журналу сервера (.. <Каталог тут не дозволений). 2 коментатори, які вже попереджають про цю проблему, і останній кажуть, цитата (Директорія просто не дозволена у файлах .htaccess) та перегляньте офіційні документи каталогів httpd.apache.org/docs/current/mod/core.html#directory сказати цитату (Контекст: сервер config, віртуальний хост) і так не .htaccess. Але це голоси 26, тож ті, хто знаходить, як це вирішити з .htaccess, ПЛАНУЙТЕ ОНОВЛЕННЯ РІШЕННЯ, пояснюючи.
Архітектор долі

Погодьтеся з @DestinyArchitect - вибачте за голосування, але це вводить в оману.
каель

7

Я не хотів зазіхати в .gitкаталог і не зміг отримати рішення Беннета для роботи над Apache 2.2, але додавши до моєї <VirtualHost>конфігурації, працювало наступне :

RewriteRule ^.*\.git.* - [R=404]

5

Мені не комфортно контролювати доступ до моїх .git папок окремо і вибираю це робити через конфігурацію apache замість .htaccess, щоб запобігти їх перезапису або забути про нову інсталяцію тощо.

Ось кілька детальних інструкцій, сподіваємось, що вони допоможуть. Я використовую Ubuntu 16.10.

  1. Спочатку перевірте, що станеться, якщо ви перейдете до папки .git у веб-переглядачі. У моєму випадку мені подали список директорій. Якщо ви бачите те, чого не повинні бачити (тобто ви не отримуєте 404), зробіть наступне.
  2. Використовуйте apache2ctl -V, щоб отримати HTTPD_ROOT та SERVER_CONFIG_FILE
  3. Використовуйте це для редагування налаштування apache, в моєму випадку $ sudo nano /etc/apache2/apache2.conf
  4. Додайте наступне десь у конфігураційний файл: RedirectMatch 404 /.git
  5. Перезапустити apache: $ sudo служби apache2 перезапустити
  6. Тепер слід отримати 404, якщо ви знову перейдете до папки
  7. Я спробував це з .gitignore, а також отримав 404

4

Більш надійним і простим варіантом буде відключення дозволу READ та Execution для .gitкаталогу.

Оскільки, в основному, Apache (httpd) працює під спеціальним обліковим записом користувача, наприклад, він працює як користувач apacheу CentOS, тоді як .gitкаталог повинен бути створений під реальним обліковим записом користувача, тому ми можемо просто заблокувати доступ, змінивши дозвіл. Більше того, цей підхід не вводить жодного нового файлу та не впливає на команди git.

Командою може бути:

chmod -R o-rx .git

На машині, де СА не хочуть використання .htaccess і не хочу, щоб я возився з їх файлами типу httpd.conf, це, здається, найкраще рішення.
Чужа форма життя

1
Очевидним недоліком є ​​те, що якщо ви повторно клонуєтесь, вам доведеться запам'ятати, щоб запустити chmodзнову.
Лаурі Нурмі

3

mod_rewrite надасть вам бажаний ефект:

RewriteEngine on
RewriteRule .*\.git/.* - [F]

9
Це вразливість розкриття інформації: людям полегшується визначити існування .gitкаталогу, оскільки він повертає Заборонений код, а не Не знайдений.
Bennett McElwee

2
Користуватися git не вразливістю
Адам,

1

Замість того, щоб возитися з .htaccessправилами, як пропонує більшість відповідей, чому б просто не поставити .git/каталог над веб-корінцем?

У моїх налаштуваннях мій .gitкаталог зазвичай живе приблизно так:

/home/web/project_name/.git/

Мій фактичний код живе

/home/web/project_name/www_root/

оскільки мій веб-корінь (як визначено в Apache або Nginx .. я віддаю перевагу останньому), /home/web/project_name/www_root/немає ніякого способу, щоб .gitкаталог був доступний з Інтернету, оскільки він живе "вище", ніж webroot


так public_html - це підкаталог робочого репортажу ?? звучить цікаво
Hayden Thring

Ні, це не підкаталог. Вони обидва "побратими" в моєму головному каталозі проектів. У моєму project_nameкаталозі є два підкаталоги: www_rootде фактично розміщуються файли, коли відвідувач переглядає мій сайт, і .gitде знаходиться репо. Витягнення з оновлень репо www_rootі його вміст. Річ у тім, що оскільки .gitкаталог є ієрархічно "вище" мого переднього контролера, він недоступний через Інтернет.
Хав'єр Ларроулет

Я думаю, що це я мав на увазі, тому у вас є / home / user / public_html / та /home/user/.git
Hayden Thring

Уау, що таке геніальне і просте рішення його геніальності, (не те, щоб зробити загальний сервер блоком в apache security.conf важко), єдине, на що слід стежити, - якщо ваш хостинг має деякі дивні налаштування права власності / дозволу на publlic_html, може змінитися.
Hayden Thring

1
дуже правда ... У мене фактично є інші "каталоги братів" для інших цілей, які залишаються недоступними для Інтернету, що дозволяє мені спати трохи краще вночі :)
Хав'єр Ларрулет
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.