ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Аналог htaccess



On 23.09.2011 13:32, Alexandre Snarskii wrote:

если операционная система на сервере не является POSIX-совместимой,
например, у нее нет поддержки симлинков, то этой уязвимости не будет.

решение проблемы:

- или отдельный OpenVZ контейнер каждому пользователю хостинга
- или отдельный nginx каждому пользователю под его учетной записью
- или написать аналог mod_aclr для второго апача и работать через него

- или написать дополнительную директиву конфигурации, которая позволит
на уровне location добавлять в open(2) флаг O_NOFOLLOW ?

не поможет. O_NOFOLLOW проверяет только последний элемент в пути.

"Symbolic links in earlier components of the pathname will still be followed."

и такое ограничение, open с флагом O_NOFOLLOW - будет легко обойти.

гарантированно можно решить эту проблему только с помощью функции
openat вместе с O_NOFOLLOW, при этом "вручную" открывая каждый
элемент пути начиная от корня. но это даст значительное уменьшение
производительности и не слишком соответствует цели high performance.

PPS: а еще в правильных операционных системах ключик nosymfollow
может быть выставлен на уровне mount(8)/fstab(5).

мы сейчас говорим про какую-то сферическую операционную систему
с двумя красными рожками? так ведь ключик nosymfollow на самом деле
ломает POSIX-совместимость и делает нерабочими большое количество
технологий, например, атомарное обновление сайта с помощью симлинков.

например:
http://lifeonubuntu.com/setup-wp-wpmu-for-atomic-version-switch-and-revert/
Setup WordPress or WPMU to make an atomic version switch ? AND allow you to revert

тем более, что вместо ключика nosymfollow на уровне
mount(8)/fstab(5) в действительности там нужен ключик
условно говоря, No_FollowSymLinks_And_SymLinksIfOwnerMatch

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

идеальное решение - флаг к open O_NOFOLLOW_ANY_IF_OWNER_NOT_MATCH,
который будет проверять любой компонент пути (ANY) и не ресолвить,
если владельцы разные - тогда накладные расходы будут минимальны,
не будет ломаться POSIX-совместимость и будет большая гибкость.
но наверное в ядро системы такой флаг не захотят добавлять...

--
Best regards,
 Gena

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.