[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: