проблема У меня появился сервер, на котором будут тестироваться различные настройки для различных ПО
Часть этих настроек, само собой, не влияет на установленную систему, но такие как некоторые сервисные службы (модули pam_* и сервисы с ними связанные), после неправильной настройке которых нарушается работа сервера в целом. Тем более, не хочется давать много прав, а в Jail пользователь может почувствовать себя почти рутом
Мне необходимо, чтобы на этом FreeBSD 5.3 сервере
некоторые пользователи, заходя в систему сразу бы переключались в свой Jail
Зачем это нужно?Навскидку мне приходит следующее:
- Создание "аквариума", при логине в который, пользоваель имеет домашнюю папку в качестве нормальной дирректории, а все остальное - новое при каждой новой сессии (2 логина не допускаются, для мультиплексирования терминала можно использоавать screen). Так же, легко добавить в mount, чтобы
В этом случае даже если пользователь получил права root, система и ее настройки не изменится после "локальных" изменений
- Создание частичного "аквариума", в котором сохранялись бы изменения в некоторых папках, а все остальное бралось из основной
Как этого можно добиться?Мне приходят следующие решения:
- Решение #1: создание для каждого Jail своего world:
#! /bin/sh
SRCDIR = /usr/src
JAILS = /home/user1 /home/user2 #, etc...
for i in ${JAILS}
do
cd ${SRCDIR}
mkdir -p ${i}
make world DESTDIR=${i}
cd etc
make distribution DESTDIR=${i}
mount_devfs devfs ${i}/dev
cd ${i}
rm -rf boot
ln -sf dev/null kernel
done
# запуск Jail, etc...
Но оно, явно, подходит только для одного, максимум двух пользователей, так как компилированная система занимает не так уж и мало, да и процесс компилляции не такой уж и быстрый(даже на SMP 2*P4 2.4MHz)
Можно чуть-чуть оптимизировать и собрать систему для одного пользователя и ее потом скопировать, но это не сильно повлияет на то, что эту систему будет легко использовать. Не говоря уже о том, что локальному пользователю будет тяжело управлять своей локальной конфигурацией при переустановке системы.
-------------------------------------------------------------------------------------------------------------------------------[/li][li] -----------
Глюк тега LISTРешение #2:Использование таких возможностей FreeBSD 5.x, как nullfs и unionfs.
#! /bin/sh
SRCDIR = /usr/src
JAILS = /home/user1 /home/user2 #, etc...
UNION_OPTS = # options for unionfs mounting. see mount_unionfs(8) for details & avaliable options
NULL_OPTS = #options for nullfs mounting. see mount_null(8) for details & avaliable options
# after system recompilling & installing, at boot time
unset NULL_DIRS
unset UNION_DIRS
cd ${SRCDIR}
for i in ${JAILS}
do
NULL_DIRS = etc var tmp /usr/obj home usr/home
UNION_DIRS = usr/local usr/X11R6
mount_null ${i}/root /
# hiding dirs
for j in NULL_DIRS
do
mkdir -p ${i}/${j}
mount_null ${NULLFS_OPTS} ${i}/root/${j} ${i}/${j}
done
mkdir -p ${i}/${i}
mount_null ${i}/${i} ${i}
#unioning dirs
for j in UNION_DIRS
do
mkdir -p ${i}/${j}
mount_unionfs ${UNIONFS_OPTS} ${i}/root/${j} ${i}/${j}
done
done
Способ, безусловно, хорош, но есть одно большое и жирное НО: в манах по этим файловым системам (nullfs & unionfs) сказанно:
THIS FILE SYSTEM TYPE IS NOT YET FULLY SUPPORTED (READ: IT DOESN'T WORK)
AND USING IT MAY, IN FACT, DESTROY DATA ON YOUR SYSTEM. USE AT YOUR OWN
RISK. BEWARE OF DOG. SLIPPERY WHEN WET.
что, надо сказать не есть good
[/li][/list]
Времени на то, чтобы сидеть и дебаггить файловые системы в ядре FreeBSD, катастрофически не хватает. Кто-нибудь может помочь разобраться с этой шнягой?