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

Как запретить apache обслуживать каталог .git?

Я начал использовать git для развертывания сайтов для тестирования. Как запретить apache обслуживать содержимое каталога .git?

Я попытался

<Directorymatch "^/.*/\.svn/">
Order deny,allow
Deny from all
</Directorymatch>

безуспешно.

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

Это имеет тот же эффект, что и многие другие ответы, но намного проще:

RedirectMatch 404 /\.git

Это может войти в .htaccess или файл конфигурации вашего сервера. Он скрывает любой файл или каталог, имя которого начинается с .git (например, .git каталог или .gitignore file), возвращая 404. Таким образом, скрыто не только содержимое вашего репозитория Git, но и само его существование.

Это не работает, потому что в правиле есть svn вместо git. Все, что вам нужно сделать, это заменить «svn» на «git».

<Directorymatch "^/.*/\.git/">
  Order 'deny,allow'
  Deny from all
</Directorymatch>

Если вы не используете файлы .htaccess, но вместо этого хотите использовать /etc/apache2/httpd.conf (или любой другой главный файл conf вашего сервера), чтобы скрыть как каталоги .git, так и файлы .gitignore, вы можете использовать следующее. Я нашел ответ выше, что настройка master conf не скрывает файл gitignore.

# do not allow .git version control files to be issued
<Directorymatch "^/.*/\.git+/">
  Order deny,allow
  Deny from all
</Directorymatch>
<Files ~ "^\.git">
    Order allow,deny
    Deny from all 
</Files>

Если вы используете общий хостинг и у вас нет доступа к apache.conf, вы все равно можете сделать это в своем файле .htaccess, например:

RewriteEngine On
RewriteRule "^(.*/)?\.git/" - [F,L]
### never deliver .git folders, .gitIgnore
RewriteRule ^(.*/)?\.git+ - [R=404,L]

# 2nd line of defense (if no mod_rewrite)
RedirectMatch 404 ^(.*/)?\.git+

Это работает в .htaccess, нет http.conf требуется доступ. Включите это как первое из правил перезаписи. Подготовить Rewrite On если нужно.

С точки зрения безопасности я предпочитаю поддельный 404, а не 403, более информативный для злоумышленника. Прокомментируйте одно из двух, чтобы убедиться, что другой работает на вас.

Кстати, хорошие изменения, ваш тест на литмус для двух:

http://localhost/.gitignore
http://localhost/.git/HEAD

Чтобы защитить как каталог .git, так и другие файлы, такие как .gitignore и .gitmodules, используя .htaccess, используйте:

RewriteEngine On
RewriteRule ^(.*/)?\.git+ - [F,L]
ErrorDocument 403 "Access Forbidden"

Я всегда добавляю следующую строку в шаблон vhost

RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)

Просто чтобы быть уверенным, что никто не может получить доступ к данным VCS. Прекрасно работает.

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

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

Для тех, кто хочет просто запретить все «скрытые» файлы и каталоги в дистрибутиве Linux (как правило, все файлы, начинающиеся с «.»), Вот что работает на Apache 2.4 при размещении в контексте конфигурации сервера:

<FilesMatch "^\.(.*)$">
    Require all denied
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    Require all denied
</DirectoryMatch>

А вот более старый стиль Apache 2.2 (то же регулярное выражение, только другие директивы auth):

<FilesMatch "^\.(.*)$">
    Order deny,allow
    Deny from all
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    Order deny,allow
    Deny from all
</DirectoryMatch>

Тогда тебе не о чем беспокоиться .git или .svn конкретно. Это также будет соответствовать таким вещам, как .htaccess и .htpasswd по сути.

Лично мне нравится выдавать 403 для таких запросов вместо 404, но вы можете легко использовать RewriteRule вместо отказа в авторизации, например:

<FilesMatch "^\.(.*)$">
    RewriteRule "^(.*)$" - [R=404,L]
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    RewriteRule "^(.*)$" - [R=404,L]
</DirectoryMatch>

Это немного поздно, но мой ответ немного отличается, поэтому я подумал, что добавлю его. Это должно быть в файле httpd.conf. В <Files "*"> вложен в <Directory> тег заблокирует все файлы в каталоге.

# GitHub Directory
<Directory /var/www/html/yoursite/.git>
   Order Deny,Allow
   Deny from all
   <Files "*">
     Order Deny,Allow
     Deny from all
   </Files>
</Directory>
# GitHub files
<Files .gitignore>
  order Deny,Allow
  Deny from all
</Files>

Вы, наверное, хотите отказаться от обслуживания .gitignore также.

Файлы, начинающиеся с точки, скрыты в linux.

Поэтому просто 404 все, что начинается с точки:

RedirectMatch 404 /\.