LINUX.ORG.RU

Закрыть доступ к определенным dot-файлам на apache2/nginx

 , , ,


0

2

Добрый, коллеги!

Решили прикрыть определенные скрытые файлы разрабов которые могут, но не должны быть доступны извне. Но хочется закрыть доступ не ко всем .* файлам, а по определенному паттерну:

  • Блокировать все директории популярных SCM (.git/ .hg/ .svn/ .bzr/ .cvs/)
  • Блокировать файлы популярных SCM (.gitignore .hgignore, что-то еще?)
  • Блокировать ht-файлы (.htaccess .htpasswd)
  • Блокировать любые файлы с разрешениями *.sql и *.sql.* (например, file.sql.gz)

Сейчас использую такие правила:

Apache2:

# Deny access to SQL and SCM dot-files:
# .hgignore .gitignore .htaccess .htpasswd *.sql *.sql.*
<FilesMatch "\.(hgignore|gitignore|ht(access|passwd))\Z|.*\.sql\Z|.*\.sql\..+\Z">
  deny from all
</FilesMatch>

# Deny access to SCM dot-directories:
# .git .hg .svn .bzr .cvs
<DirectoryMatch "\.(git|hg|svn|bzr|cvs)(/)?\Z">
  deny from all
</DirectoryMatch>

Nginx:

# Deny access to SQL and SCM dot-files:
# .gitignore .hgignore .htaccess .htpasswd *.sql *.sql.*
location ~* (\.(hgignore|gitignore|ht(access|passwd))$|(\.sql)$|(\.sql\..+)$)
{
  deny all;
}

# Deny access to SCM dot-directories:
# .git .hg .svn .bzr .cvs
location ~* \.(git|hg|svn|bzr|cvs)[/]?.*$
{
  deny all;
}

Основной вопрос: Как правильно это сделать? Сейчас сталкиваюсь с тем что с разными CMS и настройками веб-срверов иногда по разному работают.

  • Какие директивы и в каком месте (начало или конец конфига) лучше использовать, и почему?
  • Что лучше использовать (и надо ли) для обозначения начала и конца URL-запроса? На разных конфигурациях ^, $ и \Z по разному себя вели.
  • Как правильнее указать опциональный слеш в конце имен директорий, и надо ли вообще его указывать - (/)? или [/]? ?

    Извиняюсь, ни в регулярках, ни в настройках apache\nginx экспертом не являюсь. Доки читал, но но хочу услышать мнение коллег. Спасибо!

★★

Ответ на: комментарий от anonymous

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

skyman ★★ ()
Ответ на: комментарий от skyman

По «deny all» Nginx возвращает HTTP 403.
Лучше использовать внутри location-блока return 404.

vinvlad ()

Как правильно это сделать?

Не быть говнокодером и не хранить .git на боевом стенде. Настрой уже один раз нормально CI/CD и забудь об этой херне.

hippi90 ★★★★★ ()
Ответ на: комментарий от hippi90

Не быть говнокодером и не хранить .git на боевом стенде. Настрой уже один раз нормально CI/CD и забудь об этой херне.

Для своих серверов и девов так и сделано :)

А это нужно сделать на расшаренной инфраструктуре для девов-партнеров, и единственное чем я могу там оперировать - это конфиги веб-сервера к сожалению.

skyman ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.