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
|