Назад | Перейти на главную страницу

Символические ссылки и несколько точек монтирования

Я уверен, что это может показаться простым вопросом, но мне кажется, я не могу задать Google правильный вопрос, хоть убей. Короче говоря, мне сложно понять, как работают символические ссылки, когда данная файловая система монтируется в нескольких точках.

Я следовал Руководству FreeBSD при установке окон приложений на моем маленьком домашнем сервере. Все шло гладко, пока я не столкнулся с предпоследним шагом в настройке главного шаблона. В частности, когда мне нужно выполнить следующие команды:

# cd /home/j/mroot
# mkdir s
# ln -s s/etc etc
# ln -s s/home home
# ln -s s/root root
# ln -s ../s/usr-local usr/local
# ln -s ../s/usr-X11R6 usr/X11R6
# ln -s ../../s/distfiles usr/ports/distfiles
# ln -s s/tmp tmp
# ln -s s/var var

Теперь эти команды будут выполняться нормально. Меня беспокоит Зачем. Я знаю, что главный шаблон будет смонтирован как доступный только для чтения, поэтому установка одного набора файлов для нескольких тюрем не проблема. Меня беспокоит то, как операционная система знает, какой каталог данных службы (каталог / s, смонтированный для чтения и записи для каждой службы) использовать, учитывая, что главный шаблон поддерживает только один набор ссылок? Скажем, у меня было две службы, www и ftp. Каждый будет использовать главный шаблон в / home / j / mroot (установлен только для чтения в / home / j /) и будет иметь свои собственные каталоги данных (находятся в / home / js /; монтируются для чтения и записи в / home / j /. ). На основании ссылок, как файловая система может узнать, что она должна писать в каталог данных www в одной тюрьме и в каталог данных ftp из другой?

Кроме того, почему для некоторых ссылок требуются операторы пути "../"? Насколько я понимаю, они вернут вас прямо из текущего каталога в другое место файловой системы, что, вероятно, является неверным путем?

Прошу прощения, если это простые вопросы. Мой поиск ничего не дал, но я подозреваю, что просто задаю неправильные вопросы. Для справки, вот ссылка на конкретную страницу справочника FreeBSD.

http://www.freebsd.org/doc/en/books/handbook/jails-application.html

Спасибо заранее за помощь.

Хорошо ... Попробуем ответить на этот вопрос.

Каталоги setup и master / скелет

"Корневой" каталог тюремной системы /home/j. Он содержит 3+ подкаталога:

/home/j/
   |- mroot/       # The master (read-only) root directory
   |- skel/        # The master (read-write) directory
   |- js/          # Each jail will have a subdirectory here
                   # where its writable directories point to
   |- <jail>/      # Each jail will have its own directory

Сейчас mroot/ каталог содержит базовую систему, как вы сделали сделать installword к нему. Он сохранит каталоги только для чтения, такие как bin/ и dev/. Все каталоги с возможностью записи (например, etc/) будет перемещен в skel/ каталог. Это делается на шаге 3 раздела 14.5.1.

На данный момент нет /home/j/mroot/etc/ папку (поскольку вы ее переместили), поэтому мы создадим для нее символическую ссылку. Сначала мы создадим новый подкаталог s/ (короткие имена могут быть слишком короткими и поэтому легко запутаться). Это делается на шаге 5. Настройка mroot/ папка теперь будет выглядеть примерно так.

/home/j/mroot/
   |- s/             # Empty directory for writing to
   |- etc            # Symlink to s/etc/
   |- home           # Symlink to s/home/
   |- ...            # More symlinks are created

Эти символические ссылки теперь будут повреждены, так как эти каталоги не существуют. Они будут созданы при создании тюрьмы.

Создание тюрьмы

Теперь третья папка (/home/j/js/) вступит в игру. Здесь мы создадим подкаталог для каждой тюрьмы, содержащий доступный для записи контент.

/home/j/js/
   |- mail/
   |- ns/
   |- www/

Каталог скелета (skel/) копируется в каждый из этих подкаталогов.

Теперь, используя монтирование nullfs, мы свяжем все вместе. Каждая тюрьма получает другой каталог. Это nullfs (только для чтения), монтируемые на /home/j/mroot (шаг 1 из 15.5.2).

/home/j/
   |- mail/
   |- ns/
   |- www/

Поскольку они монтируются, переход в такой каталог приведет вас к /home/j/mroot/ вместо этого, хотя ваш путь не изменится. В каждой тюрьме будет возможность записи /etc/ папка, которая кажется /home/j/mail/etc/ но из-за созданного выше крепления на самом деле он будет /home/j/mroot/etc/.

Однако помните с самого начала, что этой папки больше не существует. Он был перемещен, и вместо него была создана символическая ссылка. Эта символическая ссылка указывала на еще не существующую подпапку /home/j/mroot/s/. Второе монтирование nullfs исправит это.

При создании крепления для /home/j/ns/s указать на /home/js/ns. Это место назначения содержит копию скелетного каталога, содержащего все файлы, доступные для записи. Источник, /home/j/ns/s, на самом деле будет /home/j/mroot/s за счет первого крепления.

пример

Когда тюрьма обращается к файлу в /etc/ (который должен быть доступен для записи), на самом деле он обращается к /home/j/<jail>/etc/ на хосте. Однако это крепление для /home/j/mroot/etc/ из-за первого крепления. Но этот "каталог" вовсе не каталог, это символическая ссылка на /home/j/mroot/s/etc что из-за второго крепления фактически /home/js/ns/etc/.

Вывод

Надеюсь, мне удалось немного прояснить настройку. Я перечитаю свой ответ, как только я снова очистлю свой разум, потому что моя голова все еще кружится от попыток самому разгадать этот вопрос!

Это не совсем то, о чем вы просили, но это может облегчить вам жизнь с Ezjail. Ezjail аузтомизирует процесс создания тюрем и их шаблонов.