Как смонтировать папку в rw, а остальное в ro?

Имеется диск D: (NTFS) и система с Linux (ext4), на одном винчестере. Я бы хотел от диска D: смонтировать лишь некоторые папки, причём в разных режимах: несколько папок в ro, noexec, несколько в rw, и т д. При этом на диске есть папки, которые я бы предпочел не монтировать вообще (можно, конечно, в ro, noexec, nosuid смонтировать, суть то одна). Решил вначале пойти обычным путём, через mount:

$ sudo mount -t ntfs -o ro /dev/sda1 ~/filesystem

$ sudo mount --bind -o rw ~/filesystem/linux ~/linux

Однако, такой способ не заработал: папка ~/linux была смонтирована в ro, очевидно, из-за того, что исходная папка была на ro-разделе. А весь диск в rw я не хочу монтировать, дабы избежать взаимодействия с системными файлами на этом диске ($RECYCLE.BIN, desktop.ini). Мне и так ради вообще возможности монтирования диска D: пришлось вырубать 'Быстрый запуск' в Windows, да ещё в fstab дописать remove_hiberfile. В Android, как мне известно, реализовано что-то похожее: раздел /data смонтирован как обычно, а вот /storage - с метками nosuid,noexec и т д. - я думал реализовать, по сути, нечто то же самое с диском D:, при этом пресекая доступ к файлам Windows на нем. chmod/chattr в NTFS, как мне известно, работает не очень (поправьте, если ошибаюсь). Можно было бы пересоздать общий раздел, но во1, это можно (точнее, нужно) сделать лишь из Windows, для сохранения общего доступа, а во2, выбор файловой системы у меня слабый: NTFS и exFAT (с последним на Linux все даже ещё хуже) - единственно возможные варианты, ext-форматы не подходят по понятным причинам (также, как и btrfs, reiserfs и т д), FAT32/vFAT - имеют ограничение на размер файла, что для меня тоже недопустимо, в силу использования на диске виртуальных машин и хранения ISO образов и пары бэкапов. Можно было бы - с доступом к файлам - на Linux выкрутиться через SELinux/AppArmor, но, особенно SELinux, трудно настраивать, да ещё пришлось бы сразу настраивать под него всю систему, хоть я вообще не использую сетевых служб в Linux (типа SSH, Apache...), плюс я толком не владею навыками использования SELinux.


Ответы (1 шт):

Автор решения: aleksandr barakin

назначать разные опции монтирования ro/rw для отдельных каталогов можно только при bind-монтировании уже примонтированной с опцией rw файловой системы.

какой вывод? надо сначала примонтировать файловую систему куда-нибудь в иное место, а потом оттуда bind-монтировать каталоги с разными опциями.


пример. допустим, файловая система уже примонтирована в каталог 1, и мы хотим примонтировать её в каталог 2 с опцией ro, а каталог 1/rw — с опцией rw:

$ mkdir -p 1/{rw,ro} 2
$ tree
.
├── 1
│   ├── ro
│   └── rw
└── 2
$ sudo mount -o bind,ro 1 2
$ sudo mount -o bind,rw 1/rw 2/rw
$ tree
.
├── 1
│   ├── ro
│   └── rw
└── 2
    ├── ro
    └── rw
$ find 2 -exec touch {} \;
touch: setting times of '2': Read-only file system
touch: setting times of '2/ro': Read-only file system

как видим, программа touch выдала ошибки по поводу каталогов 2 и 2/ro, но удачно выполнилась на каталоге 2/rw.

→ Ссылка