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

Только чтение bind-mount?

Я использую mount -o bind для монтирования каталогов внутри chroots, что очень хорошо работает. Проблема в том, что я хотел бы, чтобы некоторые из этих подключаемых к связыванию каталогов были доступны только для чтения в chroot.

Является ли это возможным? Если нет - каким другим способом этого добиться?

Я думал об использовании NFS для монтирования локальных хостов, но это выглядело излишним.

Прямой ответ от LWN статья:

mount --bind /vital_writable_data /untrusted_container/vital_data
mount -o bind,remount,ro /untrusted_container/vital_data

Поддерживается с Linux 2.6.26.

В соответствии с Эта статья это возможно. Вам нужно последнее ядро.

mount --bind -o ro /vital_data /untrusted_container/vital_data

В Squeeze он работал только с:

mount --bind /src /dst

затем

mount -o remount,ro /dst

Теперь в Debian Wheezy вам нужно сделать:

mount -o remount,ro,bind /dst

чтобы избавиться от сообщения: resource busy.

Изменить: теперь в Debian Jessie mount пытается быть умным и монтирует подкаталоги, которые, если они уже смонтированы с помощью bind, становятся рекурсивными и происходят плохие вещи :)

Есть специальная опция, которая снова заставляет util-linux быть "глупым". Решения таковы:

mount --bind --make-rprivate /sbin/ $prefix/sbin/
mount -o remount,ro,bind $prefix/sbin/

После этого вы можете смонтировать --bind $ prefix / sbin в другой каталог.

На странице руководства:

Операции с общим поддеревом. Начиная с Linux 2.6.15, можно пометить монтирование и его вспомогательные монтирования как общие, частные, подчиненные или несвязываемые. Совместное крепление дает возможность создавать зеркала этого крепления, при которых операции монтирования и размонтирования внутри одного из зеркал распространяются на другое зеркало. Подчиненное устройство получает распространение от своего мастера, но не наоборот. Частное животное не обладает способностями к распространению. Несвязываемое монтирование - это частное монтирование, которое нельзя клонировать с помощью операции привязки. Подробная семантика задокументирована в файле Documentation / filesystems / sharedsubtree.txt в дереве исходных текстов ядра. Поддерживаемые операции:

     mount --make-shared mountpoint
     mount --make-slave mountpoint
     mount --make-private mountpoint
     mount --make-unbindable mountpoint

Следующие команды позволяют рекурсивно изменять тип всех монтирований в данной точке монтирования.

     mount --make-rshared mountpoint
     mount --make-rslave mountpoint
     mount --make-rprivate mountpoint
     mount --make-runbindable mountpoint

mount (8) не читает fstab (5), когда запрашивается операция --make- *. Вся необходимая информация должна быть указана в командной строке. Обратите внимание, что ядро ​​Linux не позволяет изменять несколько флагов распространения с помощью одного системного вызова mount (2), и эти флаги нельзя смешивать с другими параметрами монтирования.

Начиная с util-linux 2.23 команда mount позволяет использовать несколько флагов распространения вместе, а также вместе с другими операциями монтирования. Эта функция ЭКСПЕРИМЕНТАЛЬНАЯ. Флаги распространения применяются дополнительными системными вызовами mount (2), когда предыдущие операции монтирования были успешными. Обратите внимание, что этот вариант использования не атомарен. Можно указать флаги распространения в fstab (5) как параметры монтирования (private, slave, shared, unbindable, rprivate, rslave, rshared, runbindable).

mount --bind / vital_data / untrusted_container / vital_data

mount -o remount, ro, bind / untrusted_container / vital_data

во втором монтировании вы должны использовать «remount, ro, bind», иначе все остальные экземпляры / vital_data также будут доступны только для чтения.