dimas <[email protected]> writes: > 2015-357 15:41 Artem Chuprina <[email protected]> wrote: >> помнится, как-то попытался так сделать в скрипте бэкапа. Оно на >> голубом глазу перемонтировало в ro корень. Может, конечно, ошибся, но >> кажется, я потом это поведение отдельно проверял... > > блин, внатуре фигня какая-то: >>18:01:34 357 ~$ sudo mount / -o bind,ro /mnt -v > [sudo] пароль для dimas: > mount: / bound on /mnt. >>18:01:50 357 ~$ mount | grep "/mnt" > /dev/mapper/debian-root on /mnt type reiserfs (rw,relatime) >>18:02:34 357 ~$ sudo mount /mnt -o remount,ro -v > mount: /mnt is busy >>18:03:10 357 ~$ cat /proc/mounts | grep "/mnt" > /dev/dm-1 /mnt reiserfs rw,relatime 0 0 > > или даже так >>18:05:17 357 ~$ mkdir /tmp/test >>18:06:00 357 ~$ sudo mount /tmp/test/ -o bind,ro /mnt -v > mount: /tmp/test bound on /mnt. >>18:06:14 357 ~$ cat /proc/mounts | grep "/mnt" > /dev/dm-1 /mnt reiserfs rw,relatime 0 0 >>18:06:22 357 ~$ sudo mount /mnt/ -o remount,ro -v > mount: /mnt is busy > > wtf???
Пардон, в современных системах (в которых /etc/mtab не файл, а ссылка на /proc/mounts), во вторую команду нужно добавить -o bind: mount --bind / /mnt/test mount -o remount,ro,bind /mnt/test (см. man 8 mount). Так всё работает (только что проверил, оригинальный /root остаётся rw, /mnt/test в ro, никаких busy). Стоит отметить, что если у запущенного в chroot процесса остаётся CAP_SYS_ADMIN, он может это readonly откатить (и много чего другого нехорошего сделать), так что если это не защита от самострела, надо пользоваться чем-то более продвинутым (тот же уже упомянутый firejail, lxc, и так далее).

