Многие сисадмины страдают из за этой проблемы. Суть проблемы если в своей директории создать симлинк ведущий на файл на который у вас нет доступа и назвать его допустим картинкой и открыть его в браузере, то nginx не проверяя права на этот файл выдаст его в браузере. Таким макаром на хостинге можно читать чужие файлы конфигураций и так далее, тоесть производить взлом сайтов.
Начиная с версии nginx 1.1.15 в нем присутствует опция:
disable_symlinks
По умолчанию установлено значение:
disable_symlinks off;
синтаксис следующий:
disable_symlinks off;
disable_symlinks on | if_not_owner [from=часть];
Описание:
off — Символические ссылки в пути допускаются и не проверяются. Это стандартное поведение.
on — Если любой компонент пути является символической ссылкой, доступ к файлу запрещается.
if_not_owner — Доступ к файлу запрещается, если любой компонент пути является символической ссылкой, а ссылка и объект, на который она ссылается, имеют разных владельцев.
from=часть — При проверке символических ссылок (параметры on и if_not_owner) обычно проверяются все компоненты пути. Можно не проверять символические ссылки в начальной части пути, указав дополнительно параметр from=часть. В этом случае символические ссылки проверяются лишь начиная с компонента пути, который следует за заданной начальной частью. Если значение не является начальной частью проверяемого пути, путь проверяется целиком, как если бы этот параметр не был указан вовсе. Если значение целиком совпадает с именем файла, символические ссылки не проверяются. В значении параметра можно использовать переменные.
И все же вернемся что нужно сделать чтоб закрыть уязвимость. Необходимо в секцию http добавить строку:
disable_symlinks if_not_owner;
Перезапускаем nginx
service nginx restart
Теперь данная уязвимость работать не будет.
14,509 всего просмотров, 3 за сегодня