Я использую 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 также будут доступны только для чтения.