Я начал использовать 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 /\.