Re: Как правильно выполнить chroot?
On Fri, 15 Apr 2016 22:04:23 +0300 Oleksandr Gavenkowrote: > 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?
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?
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?
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?
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?
Hello Oleksandr, On Thu, 14 Apr 2016 16:47:02 +0300 Oleksandr Gavenkowrote: > Мне совсем не ясна изолирующая сила 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?
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?
12 апреля 2016 г., 10:47 пользователь Oleksandr Gavenkoнаписал: > desktop:/# ps -e > ... > > и увидел все пользователькие процесы вне chroot. > И совершенно справедливо, потому chroot - это не jail какой-нибудь и не контейнер. Это просто возможность исключить определенную область файловой иерархии из видимости процесса. Не самая секьюрная вещь, если честно. Больше подходит для разработки, где вам надо что-то проверить в чистом окружении, например. А всё остальное как: возможность видеть и посылать сигналы другим процессам, открывать соединения, слушать порты и прочим образом мешать не чрутованной части системы - всё это остаётся доступным. > > т.е. ощущение что не важно биндишь или создаешь и можно создавать внутри... Биндить или создавать новую точку монтирования важно для обычных файловых систем (не виртуальных). Ты не можешь замаунтить логический том в двух местах. Можешь замаунтить в одном и прибиндить в нескольких. А для виртуальных ФС - это абсолютно все равно. Если хочется более серьезной изоляции, то нужно капать в сторону cgroups, namespaces, containers, virtualization (как-то в порядке возрастания overhead, на моё ИМХО). -- With best regards Max Dmitrichenko
Re: Как правильно выполнить chroot?
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?
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?
У людей возникают вопросы биндить ли /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/