Добрый день.Сразу предупрежу, что не совсем понимаю технику chroot, поэтому вопрос может показаться странным.
В общем есть связка nginx + php-fpm и два проекта, обслуживаемые ей. Хочу сделать так, чтобы каждый проект был зачручен в своей домашней директории, например /var/www/project1 и /var/www/project2.
У меня это в общем получилось, путем указания chroot = /var/www/project1 в настройках пула php-fpm и копирования в /var/www/project1 всяких библиотек и бинарников.
Но, во-первых, хочется отделить файлы собственно проекта, от файлов системы в chroot. А во-вторых, хочется использовать один набор системных файлов chroot, а не копировать их для каждого проекта.Т.е. пример. есть директория /chroot, в ней все нужные конфиги и библиотеки (резолвер, date итд),
а есть директории проектов в /var/www, которые используют для своей работы файлы из /chroot, но при этом не позволяют пользователю выходить за пределы /var/www/projectX.Так может работать chroot, или я хочу чего-то фантастического?
Заранее благодарю за ответ.
К примеру, CentOS.
1) Создаем директорию
mkdir /home/domain
2) Инициализируем RPM
rpm --root=/mnt/domain --initdb
3) Суем костяк системы
wget http://mirror.yandex.ru/centos/5.6/os/x86_64/CentOS/centos-r...
rpm -ivh --root=/mnt/domain centos-release-5-6.el5.centos.1.x86_64.rpm
4) Копируем самое необходимое, как то resolv.conf, возможно hosts...
5) Если в chroot-е предполагается не только держать сервис, но и заходить туда, то
yum --installroot=/mnt/domain install bash binutils coreutils
6) Ставим требуемое ПО
yum --installroot=/home/domain nginx
7) Монтируем proc, devptsПо сути все. Осталось записать последовательность в простенький скрипт.
> По сути все. Осталось записать последовательность в простенький скрипт.Ну т.е. это придется проделать для каждого проекта?
Нельзя как я спрашивал, сделать все в одной директории и "подсовывать"
ее нужным проектам?
>> По сути все. Осталось записать последовательность в простенький скрипт.
> Ну т.е. это придется проделать для каждого проекта?
> Нельзя как я спрашивал, сделать все в одной директории и "подсовывать"
> ее нужным проектам?Сделать один чрут для веб-сервера и поместить туда домены. Не понимаю, в чем суть вопроса? Либо плодить чруты, либо выделять их логически.
>>> По сути все. Осталось записать последовательность в простенький скрипт.
>> Ну т.е. это придется проделать для каждого проекта?
>> Нельзя как я спрашивал, сделать все в одной директории и "подсовывать"
>> ее нужным проектам?
> Сделать один чрут для веб-сервера и поместить туда домены. Не понимаю, в
> чем суть вопроса? Либо плодить чруты, либо выделять их логически.Если один чрут для веб-сервера, то "домены могут лазить" друг к другу в пределах чрута? Так?
>>>> По сути все. Осталось записать последовательность в простенький скрипт.
>>> Ну т.е. это придется проделать для каждого проекта?
>>> Нельзя как я спрашивал, сделать все в одной директории и "подсовывать"
>>> ее нужным проектам?
>> Сделать один чрут для веб-сервера и поместить туда домены. Не понимаю, в
>> чем суть вопроса? Либо плодить чруты, либо выделять их логически.
> Если один чрут для веб-сервера, то "домены могут лазить" друг к другу
> в пределах чрута? Так?Ничего не мешает их разделить. И дело тут уже совсем не в чруте ;-) На этом построена модель любого адекватного linux-хостинга: один чрут, в котором живет веб-сервер, фтп... и в котором сидят все пользователи.
Пример:
1) создаем vsftpd директорию юзера
2) вяжем к ней virtual host apache
Вот и все. Никто никуда "не бегает".
>[оверквотинг удален]
> Но, во-первых, хочется отделить файлы собственно проекта, от файлов системы в chroot.
> А во-вторых, хочется использовать один набор системных файлов chroot, а не
> копировать их для каждого проекта.
> Т.е. пример. есть директория /chroot, в ней все нужные конфиги и библиотеки
> (резолвер, date итд),
> а есть директории проектов в /var/www, которые используют для своей работы файлы
> из /chroot, но при этом не позволяют пользователю выходить за пределы
> /var/www/projectX.
> Так может работать chroot, или я хочу чего-то фантастического?
> Заранее благодарю за ответ.если вам нужен chroot, то делайте как говорит erera22. chroot'тить каждого пользователя нет смысла. сделайте chroot для веб-сервисов, а для пользователей используйте apache + mod_userdir + phpsuexec + fcgid и будет вам счастье.
> chroot'тить каждого пользователя нет смысла.Я, по крайней мере, знаю про симлинк-атаку, когда один пользователь создает симлинк в каталоге своего сайта на файл другого пользователя на сервере. Если у веб-сервера хватает прав на чтение целевого файла, то существует ненулевая вероятность получить содержимое этого файла запросом к симлинку (в прямую прочитать симлинк у пользователя прав не будет).
Предсказать имя файла в каталоге другого пользователя, зная структуру хостинга особой сложности не представляет.Чрут, конечно, тут не поможет, но это тоже вопрос безопасности хостинга.
>> chroot'тить каждого пользователя нет смысла.
> Я, по крайней мере, знаю про симлинк-атаку, когда один пользователь создает симлинк
> в каталоге своего сайта на файл другого пользователя на сервере. Если
> у веб-сервера хватает прав на чтение целевого файла, то существует ненулевая
> вероятность получить содержимое этого файла запросом к симлинку (в прямую прочитать
> симлинк у пользователя прав не будет).
> Предсказать имя файла в каталоге другого пользователя, зная структуру хостинга особой сложности
> не представляет.
> Чрут, конечно, тут не поможет, но это тоже вопрос безопасности хостинга.да, согласен с вами. об этом я как-то не подумал.
Ясно. Спасибо все за ответы. Буду думать, чего именно я хочу :)