Re: Как безопасно запустить недовереное приложение?

2015-12-23 Пенетрантность Yuriy M. Kaminskiy
dimas  writes:

> 2015-357 15:41 Artem Chuprina  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, и так далее).



Re: Как безопасно запустить недовереное приложение?

2015-12-23 Пенетрантность dimas
2015-357 15:41 Artem Chuprina  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???



Re: Как безопасно запустить недовереное приложение?

2015-12-23 Пенетрантность Artem Chuprina
yum...@gmail.com (Yuriy M. Kaminskiy) writes:

> Artem Chuprina  writes:
>
>> dimas  writes:
>>
>>> 2015-356 17:40 Victor Wagner  wrote:
 >   $ sudo debootstrap --include=iceweasel
 > stable /path/to/chroot-deb-stable/
 Да, примерно так.
>>> а если сделать бинд-маунтом ридонли-копию реальной системы? поверх того, что
>>> показывать не хотим, намонтировать пустой каталог, что хотим дать на запись 
>>> -
>>> бинд-маунтом в rw.
>>
>> У меня есть устойчивое ощущение, что bind-mount разучился ставить
>> подмонтированное в ro.
>
> IIRC, это теперь просто надо делать в два шага:
>
>   mount --bind / /foo
>   mount -o remount,ro /foo

Я, помнится, как-то попытался так сделать в скрипте бэкапа.  Оно на
голубом глазу перемонтировало в ro корень.  Может, конечно, ошибся, но
кажется, я потом это поведение отдельно проверял...  Там, правда, дело
было под OpenVZ, возможны еще нюансы оттуда.

Короче, я бы все же проверил, прежде чем рекомендовать.



Re: Как безопасно запустить недовереное приложение?

2015-12-23 Пенетрантность Yuriy M. Kaminskiy
Artem Chuprina  writes:

> dimas  writes:
>
>> 2015-356 17:40 Victor Wagner  wrote:
>>> >   $ sudo debootstrap --include=iceweasel
>>> > stable /path/to/chroot-deb-stable/
>>> Да, примерно так.
>> а если сделать бинд-маунтом ридонли-копию реальной системы? поверх того, что
>> показывать не хотим, намонтировать пустой каталог, что хотим дать на запись -
>> бинд-маунтом в rw.
>
> У меня есть устойчивое ощущение, что bind-mount разучился ставить
> подмонтированное в ro.

IIRC, это теперь просто надо делать в два шага:

  mount --bind / /foo
  mount -o remount,ro /foo



Re: Как безопасно запустить недовереное приложение?

2015-12-23 Пенетрантность Artem Chuprina
dimas  writes:

> 2015-356 17:40 Victor Wagner  wrote:
>> >   $ sudo debootstrap --include=iceweasel
>> > stable /path/to/chroot-deb-stable/
>> Да, примерно так.
> а если сделать бинд-маунтом ридонли-копию реальной системы? поверх того, что
> показывать не хотим, намонтировать пустой каталог, что хотим дать на запись -
> бинд-маунтом в rw.

У меня есть устойчивое ощущение, что bind-mount разучился ставить
подмонтированное в ro.