Re: Как безопасно запустить недовереное приложение?
dimas <dimas000@ya.ru> writes:
> 2015-357 15:41 Artem Chuprina <ran@lasgalen.net> 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, и так далее).
Reply to: