Организуется сервер для виртуального хостинга.Схема простая. Виртуальный сервер - это просто процессы, работающие с правами пользователя-владельца вирт. хостинга в chroot. Каждый виртуальный сервер имеет apache, запущенный с правами пользователя в chroot.
Как можно сделать ограничение процессорного времени для каждого пользователя? Через классы и cputime не удается, так как в этом случае лимиты будут влиять и на постоянные процессы (будет, например, умирать apache или php в режиме fastcgi).
Есть очень много способов обойти чрут, так что не занимайтесь ерундой и перейдите сразу к нормальной виртуализации, например openVZ.
>Есть очень много способов обойти чрут, так что не занимайтесь ерундой и
>перейдите сразу к нормальной виртуализации, например openVZ.Виртуализация - это из пушки по воробьям. В моем случае нужен простейший хостинг с минимальной безопасностью (чтобы пользовательские скрипты не могли читать файлы другого пользователя).
Не знаю ни одного способа обойти chroot (ну если только есть какая-нибудь уязвимость и эксплоит, позволяющая поднять права или изменить каталог). Приведите пример.
>Виртуализация - это из пушки по воробьям. В моем случае нужен простейший хостинг с минимальной безопасностью (чтобы пользовательские скрипты не могли читать файлы другого пользователя).В простейшем варианте используют один сервис(апач, мускул итд) на всех клиентов, а не запускают в чруте, он вообще для другого сделан. Изоляция делается средствами сервиса. Между прочим оверхед при виртуализациях типа jail/zones/openvz/vserver минимален, а преимущества огромны, почитайте подробней ибо вы явно на неверном пути.
>Не знаю ни одного способа обойти chroot (ну если только есть какая-нибудь уязвимость и эксплоит, позволяющая поднять права или изменить каталог). Приведите пример.
Зависит от того, кто делал чрут. В простейшем случае mount. Вы твердо уверены что сможете предусмотреть все остальные варианты?
>В простейшем варианте используют один сервис(апач, мускул итд) на всех клиентов, а
>не запускают в чруте, он вообще для другого сделан. Изоляция делается
>средствами сервиса. Между прочим оверхед при виртуализациях типа jail/zones/openvz/vserver минимален, а
>преимущества огромны, почитайте подробней ибо вы явно на неверном пути.
>
>>Не знаю ни одного способа обойти chroot (ну если только есть какая-нибудь уязвимость и эксплоит, позволяющая поднять права или изменить каталог). Приведите пример.
>
>Зависит от того, кто делал чрут. В простейшем случае mount. Вы твердо
>уверены что сможете предусмотреть все остальные варианты?Пользователю не нужен root, он не собирается устанавливать приложения. Максимум - сбросить в свой каталог несколько страничек и php/perl скриптов. В простейшем варианте (один апач на всех) нет возможности обеспечить самую минимальную безопасность - изоляцию каталогов и выполнение скриптов от имени пользователся.
А с jail получим больше проблем, чем решим. Элементарно, нельзя динамически изменить дисковую квоту, в простейшем случае стандартных квот в файловой системе более чем достаточно. Как учитывать процессорное время в jail, тоже непонятно.
>Пользователю не нужен root, он не собирается устанавливать приложения. Максимум - сбросить
>в свой каталог несколько страничек и php/perl скриптов.Я не сказал что привилегии рута это необходимое условие для обхода чрут :)
>В простейшем варианте (один апач на всех) нет возможности обеспечить самую минимальную безопасность - изоляцию каталогов и выполнение скриптов от имени пользователся.Запуск скриптов от имени пользователя делается штатно через suexec. Полное разграничение возможно за счет дополнительных патчей
>А с jail получим больше проблем, чем решим. Элементарно, нельзя динамически изменить
>дисковую квоту, в простейшем случае стандартных квот в файловой системе более
>чем достаточно. Как учитывать процессорное время в jail, тоже непонятно.Ну по jail я вам не отвечу, слишком много времени назад юзал фрю. А вот в openVZ и та и другая задача легко решаются. Кроме того за настоящий vps можно брать чуть большую денежку :)
Если уж так хочется обойтись без vps, то посмотрите на selinux, он скорее всего обеспечит все что вам нужно, хотя как по мне возни с openVZ значительно меньше, а результат удобней как для админа так и для конечного пользователя.
>>Пользователю не нужен root, он не собирается устанавливать приложения. Максимум - сбросить
>>в свой каталог несколько страничек и php/perl скриптов.
>
>Я не сказал что привилегии рута это необходимое условие для обхода чрут
>:)В смысле без привилегий рута chroot не обойти?
>>В простейшем варианте (один апач на всех) нет возможности обеспечить самую минимальную безопасность - изоляцию каталогов и выполнение скриптов от имени пользователся.
>
>Запуск скриптов от имени пользователя делается штатно через suexec.Думал над этим, но тогда php скрипты придется запускать как cgi, что очень медленно, либо держать для каждого пользователя несколько процессов php в режиме fastcgi, что по накладным расходам тоже самое, что и запущеный apache с mod_php.
>
>>А с jail получим больше проблем, чем решим. Элементарно, нельзя динамически изменить
>>дисковую квоту, в простейшем случае стандартных квот в файловой системе более
>>чем достаточно. Как учитывать процессорное время в jail, тоже непонятно.
>
>Ну по jail я вам не отвечу, слишком много времени назад юзал
>фрю. А вот в openVZ и та и другая задача легко
>решаются. Кроме того за настоящий vps можно брать чуть большую денежку
>:)В том то и дело, что клиенту не надо, ему нужен простой хостинг без излишеств.
>
>Если уж так хочется обойтись без vps, то посмотрите на selinux, он
>скорее всего обеспечит все что вам нужно, хотя как по мне
>возни с openVZ значительно меньше, а результат удобней как для админа
>так и для конечного пользователя.К сожалению, заказчик хочет только FreeBSD, а под нее комерческие vps мне не известны.
>В смысле без привилегий рута chroot не обойти?И чему вас на уроках математики учат? Наличие привилегий рута не является необходимым для обхода чрут, оно его упрощает, но и без этого можно справится. Также рутовые привилегии не являются достаточным условием, даже с ними возможен непробиваемый чрут.
>В том то и дело, что клиенту не надо, ему нужен простой
>хостинг без излишеств.Тогда ищите патч к апачу, позволяющий запускать каждый чайлд со сменой uid, не будет работать mod_worker, но он в любом случае несовместим с mod_php, так что без разницы. Такие патчи писались со времен 1.3 различными хостерами и отдельными разработчитками, попробуйте найти.
>К сожалению, заказчик хочет только FreeBSD, а под нее комерческие vps мне
>не известны.Тогда стоит получше изучить jail, в любом случае возможностей больше чем в чруте :)
>А с jail получим больше проблем, чем решим.С чего бы это? jail == chroot + дополнительная изоляция
>>А с jail получим больше проблем, чем решим.
>
>С чего бы это? jail == chroot + дополнительная изоляцияТем, что jail позволяет внутри "тюрьмы" запускать процессы с любым uid (включая root), а значит, нельзя для ограничения использовать стандартные средства ОС для лимитирования ресурсов, основанные на uid (квоты файловой системы, лимиты, фаервол).
Решение проблемы по учету процессорного времени - system accounting и стандартная утилита sa. К сожалению, для jail не подходит, так как измеряет на основе uid. Вполне подходит для chroot и разделению ресурсов на основе uid.