Date: Fri, 19 Nov 1999 15:27:26 +0200
From: Vladimir Vul vul@bds.ru
Subject: [inet-admins] chroot on apache?

Здравствуйте.

Я постепенно превращаюсь в вэбхостера, причем люди разные (untrusted) и причем хотят CGI-BIN на запись, PHP, MYSQL

как обезопасить от них сервер и их одного от другово? вы скажете что uid == nobody но я даже ноубодя боюсь.

 

Date: Fri, 19 Nov 1999 16:03:14 +0200 (EET)
From: Vladimir Litovka doka@kiev.sovam.com

Да, интересно на самом деле, кто как поступает в такой ситуции? Просматривание глазами скриптов - это нереально. Т.е. suexec - понятно, chroot - тоже (для этого надо suexec править), а все-ж чужой опыт всегда интересен :)

 

Date: Fri, 19 Nov 1999 16:51:56 +0300
From: Alexander Kolesnik sasha@lanck.net

VV> как обезопасить от них сервер и их одного от другово?
VV> вы скажете что uid == nobody но я даже ноубодя боюсь.

Ты знаешь, я по этой теме достаточно много думал (читал пейджер, в смысле dejanews ;-), спрашивал у разных умных людей. В результате то, что я узнал, можно резюмировать примерно так:
1. Лучше осуществлять хостинг на отдельной тачке, которая даже если упадет или ее кто-то взломает, никакая коммерческая/служебная информация не пропадет. При этом, само собой, каждый день/час/etc все бэкапится.
2. Апач собирается с suexec'ом.
3. В настройках каждого сервера указываются юзер и группа, от которых запускаются скрипты. При этом, можно всех юзеров объединить в одну группу, а можно каждого в отдельную. Понятно, что в первом варианте юзера смогут читать файлы и каталоги друг друга.
4. Ставится Ftp-server, который умеет chroot'иться и прописываем в качестве DocRoot'а каждого сервера хоум соответствующего юзера.
5. Есть еще один вариант для особо параноидальных товарищей :) Каждому пользователю заводить отдельную "мини-систему" со своими перлами, либами, etc и ставить restricted shell.

С уважением,
Александр Колесник.

 

From: "Vit Andrusevich" vitalik@nsys.by
Date: Fri, 19 Nov 1999 16:18:40 +0200

Ещё вариант.

Можно для каждого юзера запускать отдельный apache с его ( юзера ) личным конфигом

 

Date: Fri, 19 Nov 1999 17:42:16 +0300 (MSK)
From: Dmitry Valdov dv@dv.ru

> Можно для каждого юзера запускать отдельный apache с его ( юзера ) личным
> конфигом.
>

IP адресов надо будет кучу для каждого сервера по одному... (p.s. Да и портов тоже :)

 

From: "Vit Andrusevich" vitalik@nsys.by
Date: Fri, 19 Nov 1999 16:41:59 +0200

Если есть желание, то гляньте на решение от Concentric Web Hosting Services.

http://www.concentric.com/web_solutions/host_vde_resources.html

 

From: "Vit Andrusevich" vitalik@nsys.by
Date: Fri, 19 Nov 1999 16:49:00 +0200

Oops..

Более точная и детальная информация на эту тему содержится на http://vde.net/rc/

 

Date: Fri, 19 Nov 1999 16:56:22 +0200 (EET)
From: Vladimir Litovka doka@kiev.sovam.com

Сейчас я буду делать так: запуск пользовательской CGI осуществляется suexec'ом, который делает chroot на корень дерева виртуальных серверов, в котором есть perl, sh, php3, etc со всеми сопуствующими файлами. Это самое большее, что я могу сделать и, похоже, этого достаточно для обеспечения безопасности системы. Если пользователь хочет отправить почту, то вместо sendmail ему подсовывается некий скрипт, который складывает письмо в определенный каталог, а демон, висящий в памяти, раз в минуту сканирует этот каталог и уже отправляет письма настоящему sendmail'у

 

From: "Vit Andrusevich" vitalik@nsys.by
Date: Fri, 19 Nov 1999 17:09:07 +0200

> p.s. Да и портов тоже :)

С этим всё OK, если для каждого отдельного Virtual domaina ичпользовать собственный IP address

Тогда каждый apache будет bind'ицца на 80-й порт своего IP адреса и "усё буде добра" :)
Схема отработана

 

From: Boris Tyshkiewitch bvt@zenon.net
Date: Fri, 19 Nov 1999 18:17:41 +0300 (MSK)

> Сейчас я буду делать так: запуск пользовательской CGI осуществляется
> suexec'ом, который делает chroot на корень дерева виртуальных серверов, в
> котором есть perl, sh, php3, etc со всеми сопуствующими файлами. Это самое
> большее, что я могу сделать и, похоже, этого достаточно для обеспечения
> безопасности системы

Да, именно так оно у нас и работает последние два года.

> Если пользователь хочет отправить почту, то вместо
> sendmail ему подсовывается некий скрипт, который складывает письмо в
> определенный каталог, а демон, висящий в памяти, раз в минуту сканирует
> этот каталог и уже отправляет письма настоящему sendmail'у.

Тот самый скрипт зовется sendmail'ом, который складывает письма в свою очередь. Из которой другой sendmail уже делает рассылку.

Несколько линков на тему mqueue и золотой ключик в кармане

 

From: Alex Tutubalin lexa@lexa.ru
Date: Fri, 19 Nov 1999 18:21:26 +0300

Hi,

ier> Можно для каждого юзера запускать отдельный apache с его ( юзера ) личным
ier> конфигом.

А это ничем не лучше suexec'а. Точнее, пользователь тогда может (в идеале) pедактиpовать конфиг своего апача, но это сpазу пpиводит к необходимости запуска апача из-под inetd. Можно ли себе такое позволить - вопpос

Hа мой взгляд, дешевле смиpиться. Т.е. довеpиться безопасности юникса, выделить под этот сеpвис отдельную машину на котоpой не живет ничего кpитичного для пpовайдеpа и сидеть читать bugtraq в pеалтайме

Alex Tutubalin
http://www.lexa.ru/lexa/

 

Date: Fri, 19 Nov 1999 18:38:40 +0300
From: "Alexei V. Alexandrov" ava@weblink.ru

VV> как обезопасить от них сервер и их одного от другово?
VV> вы скажете что uid == nobody но я даже ноубодя боюсь.

У меня сделано все достаточно просто (по моему). Написан wrapper небольшой для апач (что то вроде этого).:

----------


#include <sys/types.h>
#include <stdio.h> #include <unistd.h> #include <pwd.h> void main( int argc, char *argv[] ) { uid_t uid; gid_t gid; char *p, *home; struct passwd *wpass; p = "/usr/env"; if( chdir(p) ) { fprintf(stderr, "chdir to %s failed\n", p ); } else if( chroot(p) ) { fprintf(stderr, "chroot to %s failed\n", p ); } else { execl( "/www/bin/httpd","httpd",(char *)0 ); fprintf(stderr, "execl failed for httpd.\n"); } exit(0); }

----------
на /usr/env смонтирован винч на котором расположена мнимая система. с сохранением естественно либов и т.д. и т.п. вся bin статическая. туда же установлен perl, apache, ePerl и все прелести жизни. Пользователи заходят по ftp (ProFTPD 1.2.0pre3) и chroot в свой домашний каталог. Также имеется доступ телнетом к хосту и у пользователя вместо нормально шелла прописан не shell а другой wrapper, который запускает из под себя уже нормальный shell. Вот собственно и все. Работает на протяжении 1.5 лет и проблем не испытывал никаких.

Best regards,
---
Alexei V. Alexandrov
Mail: ava@weblink.ru
WWW: www.weblink.ru

 

From: "Vit Andrusevich" vitalik@nsys.by
Date: Fri, 19 Nov 1999 17:53:08 +0200

Смените версию Proftpd :) а то проблемы будут.

 

From: "Vit Andrusevich" vitalik@nsys.by
Date: Fri, 19 Nov 1999 17:51:27 +0200

Мы не разрешаем пользователям редактировать конфиги. Всё сделано просто. На директорию где лежит бинарник и конфиги от юзерского апача ( эта директория находится внутри его HOMEDIR ) налаживается file system Immutable flag ( У нас FreeBSD ). И таким образом юзера не могут удалить или изменить ни файлы ни директории

 

Date: Fri, 19 Nov 1999 19:44:40 +0300 (MSK)
From: "Vladimir B. Grebenschikov" vova@express.ru

> Да, интересно на самом деле, кто как поступает в такой ситуции?
> Просматривание глазами скриптов - это нереально. Т.е. suexec - понятно,
> chroot - тоже (для этого надо suexec править), а все-ж чужой опыт всегда
> интересен :)

Чрут на все что касается пользователей

там:

inetd + ftpd (который еще делает chroot в home)

минимальный рабочий набор бинарников без setuid'ов

apache, запаченный так чтобы для каждой виртуалки которому пренадлежит vhost (скрипты, php, SSI, etc), (кроме того выставляет всякие лимиты) - получается некий, расширеный аналог suexec'a

скрипты не просматривем так как, если сожрут много ресурсов - будут просто умирать сами

пользователем дается ssh, по запросу даже cron под chroot'ом

думаем об использование jail() но пока еще не пользуемся

 

From: Alex Tutubalin lexa@lexa.ru
Date: Fri, 19 Nov 1999 20:31:02 +0300

Hi,

ier> Мы не разрешаем пользователям редактировать конфиги.
ier> Всё сделано просто. Hа директорию где лежит бинарник и конфиги от
ier> юзерского апача ( эта директория находится внутри его HOMEDIR )

Если пользователю нельзя pедактиpовать свои конфиги, то тогда пpосто нет смысла деpжать по апачу на пользователя. Ибо запускать из inetd - доpого, а запускать демоном личный апач - еще доpоже.

Достаточно удостовеpиться в том, что у пользователя нет возможности использовать что-то вpоде mod_perl (mod_php), оставить из всех модулей только mod_cgi (я утpиpую) и запускать suexec (+chroot)

BTW, буpжуи часто для такого хостинга используют BSD/OS. Кто-нибудь знает - почему ?

Alex Tutubalin
http://www.lexa.ru/lexa/