Re: Как правильно выполнить chroot?

2016-04-24 Пенетрантность Alexander GQ Gerasiov
On Fri, 15 Apr 2016 22:04:23 +0300
Oleksandr Gavenko  wrote:

> On 2016-04-14, Alexander Gerasiov wrote:
> 
> > lxc и openvz (и еще несколько инструментов, например yandex-porto)
> > это всего лишь инструменты, создающие контейнеры силами cgroups и
> > namespace, реализованными в ядре. При чем максимальная степень
> > изоляции контейнера у них одинаковая. И механизмы ядра они
> > используют (почти) одинаковые.

> Вы выразились так что openvz основывается на cgroups и namespace. Я
> читал в инструкции что openvz требует применения патча на ядро. Это
> означает что они свели разницу к минимуму и активно полагаются на
> cgroups + namespace?

Это значит, что почти всю разницу они засабмитили в апстрим. Но тем не
менее до сих пор требуется накладывать патчи, потому что засабмитили
они не всё.


pgp0Mt50zgt7n.pgp
Description: OpenPGP digital signature


Re: Как правильно выполнить chroot?

2016-04-16 Пенетрантность Dmitry Nezhevenko
On Fri, Apr 15, 2016 at 10:23:55PM +0300, Oleksandr Gavenko wrote:
> 
> Теперь цена в 7$/m (за EC2) не кажется такой уж большой, тогда как KVM решения
> большие игроки продают не меньше чем за 5$/m.

В KVM тоже свое свое ядро на каждую виртуалку. 
 
-- 
WBR, Dmitry


signature.asc
Description: PGP signature


Re: Как правильно выполнить chroot?

2016-04-15 Пенетрантность Oleksandr Gavenko
On 2016-04-14, Dmitry Nezhevenko wrote:

> On Thu, Apr 14, 2016 at 04:47:02PM +0300, Oleksandr Gavenko wrote:
>> Уже почитал chroot(2), но от schroot(1) ожидал большего
>
> schroot -- это всего лишь удобная обвязка вокруг chroot.
>
> Если нужно быстро запустить 'подозрительное' приложение, рекомендую
> глянуть на firejail. 
>
Спасибо за рекомендацию. С schroot уже поигрался и мне более-менее понятно что
там происходит. В записях нашел что мне ранее уже рекомендовали firejail, но
дальше установки я не смотрел, а зря.

>> Т.е. руткиты скорее всего
>> будут вырываться из контейнера и без виртуализации не обойтись.
>
> Руткиты могут "вырываться из контейнера" и при виртуализации:
> https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-3456
>
>> В итоге только доверенный код можно выполнять в контейнере chroot + cgroups +
>> namespaces.
>
> Гарантию даст только физически отдельная машина. 

Вообще неожидано понять что в общественных VPS (будь то KVM или openvz) может
быть утечка данных.

Я посмотрел на крупных провайдеров VPS. Amazone EC2 используют гипервизор Xen,
т.е. каждый участник общественного компьютера со своим собственным ядром. Мне
кажется это безопасней чем надесятся что все тисячу системных вызовов Linux
без брешей...

Теперь цена в 7$/m (за EC2) не кажется такой уж большой, тогда как KVM решения
большие игроки продают не меньше чем за 5$/m.

-- 
http://defun.work/



Re: Как правильно выполнить chroot?

2016-04-15 Пенетрантность Oleksandr Gavenko
On 2016-04-14, Alexander Gerasiov wrote:

> lxc и openvz (и еще несколько инструментов, например yandex-porto) это
> всего лишь инструменты, создающие контейнеры силами cgroups и namespace,
> реализованными в ядре. При чем максимальная степень изоляции контейнера
> у них одинаковая. И механизмы ядра они используют (почти) одинаковые.

Ясно.

Хотелось бы уточнить по openvz - их история берет начало в 2005, cgroups -
2007 (по даннным из Wikipedia). Про namespace так сразу не скажешь, хоть
работы и начались 2002, но все же там большой фронт работ в независимых
направлениях. Короткий ченджлог я не нашел, что бы предметно сравнивать.

Вы выразились так что openvz основывается на cgroups и namespace. Я читал в
инструкции что openvz требует применения патча на ядро. Это означает что они
свели разницу к минимуму и активно полагаются на cgroups + namespace?

-- 
http://defun.work/



Re: Как правильно выполнить chroot?

2016-04-14 Пенетрантность Dmitry Nezhevenko
On Thu, Apr 14, 2016 at 04:47:02PM +0300, Oleksandr Gavenko wrote:
> Уже почитал chroot(2), но от schroot(1) ожидал большего

schroot -- это всего лишь удобная обвязка вокруг chroot.

Если нужно быстро запустить 'подозрительное' приложение, рекомендую
глянуть на firejail. 

> Мне совсем не ясна изолирующая сила cgroups + namespaces.
> 
> В отличии от openvz у меня есть ощущение что chroot + cgroups + namespaces
> создавалось для изоляции а не для безопасности. 

https://openvz.org/WP/What_are_containers

Разделение процессов на группы -- одна из мер обеспечения безопасности.
Достаточная или нет -- зависит от задачи. 

> Т.е. руткиты скорее всего
> будут вырываться из контейнера и без виртуализации не обойтись.

Руткиты могут "вырываться из контейнера" и при виртуализации:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-3456

> В итоге только доверенный код можно выполнять в контейнере chroot + cgroups +
> namespaces.

Гарантию даст только физически отдельная машина. 
 
-- 
WBR, Dmitry


signature.asc
Description: PGP signature


Re: Как правильно выполнить chroot?

2016-04-14 Пенетрантность Alexander Gerasiov
Hello Oleksandr,

On Thu, 14 Apr 2016 16:47:02 +0300
Oleksandr Gavenko  wrote:


> Мне совсем не ясна изолирующая сила cgroups + namespaces.
> 
> В отличии от openvz у меня есть ощущение что chroot + cgroups +
> namespaces создавалось для изоляции а не для безопасности. Т.е.
> руткиты скорее всего будут вырываться из контейнера и без
> виртуализации не обойтись.
> 
> В итоге только доверенный код можно выполнять в контейнере chroot +
> cgroups + namespaces.
chroot тут не к месту, он не нужен если есть cgroups.

lxc и openvz (и еще несколько инструментов, например yandex-porto) это
всего лишь инструменты, создающие контейнеры силами cgroups и namespace,
реализованными в ядре. При чем максимальная степень изоляции контейнера
у них одинаковая. И механизмы ядра они используют (почти) одинаковые.

-- 
Best regards,
 Alexander Gerasiov

 Contacts:
 e-mail: g...@cs.msu.su  Homepage: http://gerasiov.net  Skype: gerasiov
 PGP fingerprint: 04B5 9D90 DF7C C2AB CD49  BAEA CA87 E9E8 2AAC 33F1



Re: Как правильно выполнить chroot?

2016-04-14 Пенетрантность Oleksandr Gavenko
On 2016-04-13, Max Dmitrichenko wrote:

> 12 апреля 2016 г., 10:47 пользователь Oleksandr Gavenko  
> написал:
>
>   desktop:/# ps -e
>   ...
>
> и увидел все пользователькие процесы вне chroot.
>
> И совершенно справедливо, потому chroot - это не jail какой-нибудь и не
> контейнер. Это просто возможность исключить определенную область файловой
> иерархии из видимости процесса. Не самая секьюрная вещь, если честно. Больше
> подходит для разработки, где вам надо что-то проверить в чистом окружении,
> например.
>
> А всё остальное как: возможность видеть и посылать сигналы другим процессам,
> открывать соединения, слушать порты и прочим образом мешать не чрутованной
> части системы - всё это остаётся доступным.  
>
Уже почитал chroot(2), но от schroot(1) ожидал большего.

Правильно ли я понимаю что выполднять от root недоверенное приложение в
chroot нельзя?

> Если хочется более серьезной изоляции, то нужно капать в сторону cgroups,
> namespaces, containers, virtualization (как-то в порядке возрастания
> overhead, на моё ИМХО).

Я почитал про lxc, namespaces(7). Образы предоставляют проекты:

* http://images.linuxcontainers.org/
* https://www.flockport.com/store/

Если нет к ним доверия, то можно изучить скрипты из /usr/share/lxc/templates.
Для Debian берется обычный debootstrap. Хотя я полагаю Debian слишком
"толстым":

  bash# sudo debootstrap --variant=minbase stable minbase/
  bash# sudo du -s -m ./minbase/


 204 ./minbase/

lxc идет со скриптом для развертывания alpine, у меня вышло:

  $ sudo du -s -m /var/lib/lxc/alpine
  9 alpine

против:

  $ sudo du -s -m /var/lib/lxc/debian
  287 debian

Но с системой пакетов alpine еще нужно разбираться. Плюс пока не выработалось
доверие к их репозиториям.

На btrfs lxc умеет делать снапшоты.

Я не понял будет ли клонирование контейнера отжирать место на ext4. Кажись да.



Мне совсем не ясна изолирующая сила cgroups + namespaces.

В отличии от openvz у меня есть ощущение что chroot + cgroups + namespaces
создавалось для изоляции а не для безопасности. Т.е. руткиты скорее всего
будут вырываться из контейнера и без виртуализации не обойтись.

В итоге только доверенный код можно выполнять в контейнере chroot + cgroups +
namespaces.



Почитал критику про Docker и CoreOS. В общем для хобби и для себя стоит
разбираться с lxc.

Docker и CoreOS предназначены для зарабатывания денег и тянут за собою
политики/соглашения и перозитории.

По отзывам использование Docker чревато протискиванием вызовов их API в
прикладной код. А CoreOS наверно скоро наймут Поттеринга, т.к. systemd -
сердце их продукта (для экономии времени вместо своей реализации
восмользовались всем арсеналом сервисов из зонтика systemd).

Вот пример как запуститься в изолированом namespaces:

  $ sudo ip netns exec test unshare -fp --mount-proc chroot rootfs /bin/bash -c 
"mount -t proc proc /proc && /bin/bash"

  https://www.flockport.com/how-linux-containers-work/

Это делает с разной степенью автоматизации lxctl, Docker, rkt.



Что то не понял заявление что LXC гарантировано будет поддерживаться 5 лет (с
2014 по 2019, на wikipedia). Потом что то новое придет?

-- 
http://defun.work/



Re: Как правильно выполнить chroot?

2016-04-13 Пенетрантность Max Dmitrichenko
12 апреля 2016 г., 10:47 пользователь Oleksandr Gavenko 
написал:

>   desktop:/# ps -e
>   ...
>
> и увидел все пользователькие процесы вне chroot.
>

И совершенно справедливо, потому chroot - это не jail какой-нибудь и не
контейнер. Это просто возможность исключить определенную область файловой
иерархии из видимости процесса. Не самая секьюрная вещь, если честно.
Больше подходит для разработки, где вам надо что-то проверить в чистом
окружении, например.

А всё остальное как: возможность видеть и посылать сигналы другим
процессам, открывать соединения, слушать порты и прочим образом мешать не
чрутованной части системы - всё это остаётся доступным.


>
> т.е. ощущение что не важно биндишь или создаешь и можно создавать внутри...


Биндить или создавать новую точку монтирования важно для обычных файловых
систем (не виртуальных). Ты не можешь замаунтить логический том в двух
местах. Можешь замаунтить в одном и прибиндить в нескольких. А для
виртуальных ФС - это абсолютно все равно.

Если хочется более серьезной изоляции, то нужно капать в сторону cgroups,
namespaces, containers, virtualization (как-то в порядке возрастания
overhead, на моё ИМХО).

-- 
With best regards
  Max Dmitrichenko


Re: Как правильно выполнить chroot?

2016-04-12 Пенетрантность Eugene Berdnikov
On Tue, Apr 12, 2016 at 12:46:04PM +0300, Oleksandr Gavenko wrote:
> On 2016-04-12, Oleksandr Gavenko wrote:
> 
> > Как правильно выполнить chroot?
> 
> В chroot(2) написано:
> 
>   Only a privileged process (Linux: one with the CAP_SYS_CHROOT capability)
>   may call chroot().

 В man chroot(8) написано:

   --userspec=USER:GROUP
  specify user and group (ID or name) to use

   --groups=G_LIST
  specify supplementary groups as g1,g2,..,gN

   --help display this help and exit

> Потому я делаю:
> 
>   $ sudo chroot /path/to/dir
> 
> Это означает что в chroot я root:
> 
>   chroot# id
>   uid=0(root) gid=0(root) groups=0(root),7(lp),113
> 
> Какие шаги следует принять для понижения прав?

 Задать --userspec.
-- 
 Eugene Berdnikov



Re: Как правильно выполнить chroot?

2016-04-12 Пенетрантность Oleksandr Gavenko
On 2016-04-12, Oleksandr Gavenko wrote:

> Как правильно выполнить chroot?

В chroot(2) написано:

  Only a privileged process (Linux: one with the CAP_SYS_CHROOT capability)
  may call chroot().

Потому я делаю:

  $ sudo chroot /path/to/dir

Это означает что в chroot я root:

  chroot# id
  uid=0(root) gid=0(root) groups=0(root),7(lp),113

Какие шаги следует принять для понижения прав?

У меня выходит понижение через:

  chroot# su nobody
  uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)

Для schroot вижу опцию:

   -u, --user=user

   Run as a different user. The default is to run as the current user. If
   required, the user may be required to authenticate themselves with a
   password. For further information, see the section “Authentication”,
   below.

schroot с suid битом и по умолчанию права понижаются до текущего пользователя
- что уже не плохо.



Я не знаю что такое "CAP_SYS_CHROOT capability". ACL/MAC/selinux или что еще
описывает capability? Как вывести список capability текущего пользователя?

-- 
http://defun.work/



Как правильно выполнить chroot?

2016-04-12 Пенетрантность Oleksandr Gavenko
У людей возникают вопросы биндить ли /proc /sys /dev или монтировать?

Также есть советы копировать /etc/resolv.conf и /lib/modules/$(uname -r).

  
http://unix.stackexchange.com/questions/98405/which-of-proc-sys-etc-should-be-bind-mounted-or-not-when-chrooting-into-a-r
  
http://askubuntu.com/questions/32418/is-there-an-easier-way-to-chroot-than-bind-mounting
  
http://superuser.com/questions/165116/mount-dev-proc-sys-in-a-chroot-environment

Я выполнил в chroot:

  desktop:/# ps -e
  Error, do this: mount -t proc none /proc

  desktop:/# su

  desktop:/# mount -t proc none proc

  desktop:/# ps -e
  ...

и увидел все пользователькие процесы вне chroot.

т.е. ощущение что не важно биндишь или создаешь и можно создавать внутри...



В общем cткукать по клавиатуре не хочется (вспоминать + возможны ошибки).

Что умеет само делать необходимые приготовления для chroot?

Оно должно коректно повторно заходить в chroot (не падать от повторного
биндинга /dev).

Не ясно нужно ли после выхода из root размонтировать /proc /sys /dev. У еня в
памяти утверждение что loop устройств ограниченое количество в системе и не
больше 64. Т.е. плодить биндинги не хорошо.

Зачем возится с настройками  /etc/resolv.conf - что б libc DNS разрешала?
Какие еще файлы нужно тянуть?

Какая программа все сделает автоматом за меня?

-- 
http://defun.work/