Как «заключить в тюрьму» процесс без root?

Если бы я был root, я мог бы просто создать фиктивный пользователь / группу, соответственно установить права доступа к файлу и выполнить этот процесс как этот пользователь. Но я не так, так есть ли способ достичь этого, не будучи корнем?

  • Проблема в привязке с 4 видами
  • Может ли LXC использоваться для помещения в тюрьму экземпляров установленного браузера?
  • разрешить создание сетей внутри тюрьмы freebsd
  • Выход из тюрьмы
  • Как работает OpenSSH sftp jail / chroot?
  • Как я могу безопасно дать оболочку кому-то?
  • Что делает «mergemaster» сделать это «сделать распространение»?
  • Сетевые интерфейсы для Jails
  • 5 Solutions collect form web for “Как «заключить в тюрьму» процесс без root?”

    Более похожие вопросы с большим количеством ответов заслуживают внимания:

    некоторые из ответов там указывают на конкретные решения, которые еще не упомянуты здесь.

    (На самом деле, существует множество инструментов для развязывания с различной реализацией, но многие из них либо не защищены по дизайну (например, fakeroot , LD_PRELOAD ), либо не являются полными (например, fakeroot-ng , ptrace based) или потребуют root ( chroot или plash упомянутые в http://joey.kitenet.net/blog/entry/fakechroot_warning_label ). Это просто примеры, я думал о том, чтобы перечислять их все бок о бок с указанием этих двух функций (" можно доверять? »,« требует root для настройки? »), возможно, по адресу http://en.wikipedia.org/wiki/Operating_system-level_virtualization#Implementations .)

    В общем, ответы там охватывают весь описанный диапазон возможностей и даже больше:

    виртуальные машины / ОС

    • ( ответ, в котором упоминаются виртуальные машины / ОС )

    расширение ядра (например, SELinux)

    • (упоминается здесь в комментариях)

    корневой

    chroot-based helpers (которые, однако, должны быть установлены как root, потому что chroot требует root, или, возможно, chroot может работать в изолированном пространстве имен – см. ниже):

    [рассказать немного больше о них!]

    Известные инструменты изоляции на основе chroot:

    • hasher с его hsh-run и hsh-shell . ( Hasher был разработан для создания программного обеспечения безопасным и повторяемым образом.)
    • schroot упоминается в другом ответе

    ptrace

    Другим заслуживающим доверия решением изоляции (помимо seccomp основе seccomp ) был бы полный перехват syscall через ptrace , как объяснено в man-странице для fakeroot-ng :

    В отличие от предыдущих реализаций, fakeroot-ng использует технологию, которая оставляет отслеживаемый процесс без выбора, будет ли он использовать «услуги» fakeroot-ng или нет. Компиляция программы статически, прямое обращение к ядру и управление собственным адресным пространством – это все методы, которые могут быть тривиально использованы для обхода LD_PRELOAD на основе управления процессом и не применяются к fakeroot-ng. Теоретически возможно формовать fakeroot-ng таким образом, чтобы иметь полный контроль над отслеживаемым процессом.

    Хотя это теоретически возможно, это не было сделано. Fakeroot-ng предполагает определенные «хорошо выполненные» предположения о отслеживаемом процессе, и процесс, который нарушает эти предположения, может, если не полностью избежать, то, по крайней мере, обойти некоторую «фальшивую» среду, наложенную на нее fakeroot- нг. Таким образом, вам настоятельно рекомендуется использовать fakeroot-ng в качестве инструмента безопасности. Сообщения об ошибках, которые утверждают, что процесс может быть намеренно (в противоположность непреднамеренно) избежать контроля поддельного корня, либо будет закрыт как «не ошибка», либо отмечен как низкий приоритет.

    Возможно, эта политика будет переосмыслена в будущем. Однако на данный момент вас предупреждают.

    Тем не менее, как вы можете это прочитать, сам fakeroot-ng не предназначен для этой цели.

    (Кстати, мне интересно, почему они решили использовать подход на основе seccomp для Chromium, а не на основе ptrace …)

    Из инструментов, не упомянутых выше, я отметил для себя Джорди , потому что мне понравилось, что управляющая программа написана в Haskell.

    Известные средства изоляции на основе ptrace:

    • Джорди
    • proot
    • fakeroot-ng
    • … (см. также Как добиться эффекта chroot в пользовательском пространстве в Linux (без root)? )

    Seccomp

    Один из известных способов достижения изолированности – это подход изолированной песочницы seccomp, используемый в Google Chromium . Но этот подход предполагает, что вы пишете помощника, который обрабатывал бы некоторые (разрешенные) из «перехваченного» доступа к файлам и другие системные вызовы; а также, конечно, прилагать усилия для «перехвата» системных вызовов и перенаправления их на помощника (возможно, это даже означало бы такую ​​вещь, как замена перехваченных системных вызовов в коде управляемого процесса, поэтому она не звучит быть довольно простым, если вам интересно, вам лучше прочитать подробности, а не только мой ответ).

    Дополнительная информация (из Википедии):

    (Последний элемент кажется интересным, если вы ищете общее решение на базе seccomp за пределами Chromium. Также есть сообщение в блоге, которое стоит прочитать у автора «seccomp-nurse»: SECCOMP в качестве решения для песочницы? ).

    Иллюстрация этого подхода из проекта «seccomp-nurse» : введите описание изображения здесь

    «Гибкий» seccomp возможен в будущем Linux?

    В 2009 году также появились предложения по исправлению ядра Linux , чтобы в режиме seccomp больше гибкости, так что «многие из акробатики, которые в настоящее время нам нужны, можно было бы избежать». («Акробатика» относится к осложнениям написания помощника, который должен выполнять многие, возможно, невинные системные вызовы от имени заключенного в тюрьму, и заменять, возможно, невинные системные вызовы в заключенный в тюрьму процесс.) В статье LWN написано:

    Одно из предложений, которое появилось, заключалось в том, чтобы добавить новый «режим» в seccomp. API был разработан с идеей, что разные приложения могут иметь разные требования безопасности; он включает значение «mode», которое определяет ограничения, которые должны быть установлены. Только оригинальный режим был реализован, но, конечно же, можно добавить другие. Создание нового режима, позволяющего инициирующему процессу определять, какие системные вызовы будут разрешены, сделает объект более полезным для таких ситуаций, как песочница Chrome.

    Адам Лэнгли (также Google) опубликовал патч, который делает именно это. В новой реализации «режим 2» принимается битмаска, описывающая, какие системные вызовы доступны. Если один из них – prctl (), то изолированный код может дополнительно ограничить свои собственные системные вызовы (но он не может восстановить доступ к системным вызовам, которые были лишены). Все сказано, это похоже на разумное решение, которое может облегчить жизнь разработчикам песочницы.

    Тем не менее, этот код никогда не может быть объединен, потому что обсуждение с тех пор перешло к другим возможностям.

    Этот «гибкий seccomp» приблизит возможности Linux к обеспечению желаемой функции в ОС, без необходимости создавать сложные помощники.

    (Публикация блога в основном с таким же контентом, как и этот ответ: http://geofft.mit.edu/blog/sipb/33 .)

    пространства имен ( unshare )

    Изоляция через пространства имен ( решения с несимметричным основанием ) – не упомянутые здесь – например, несовместимые точки монтирования (в сочетании с FUSE?), Возможно, могут быть частью рабочего решения, которое вы хотите ограничить доступ файловой системы к вашим ненадежным процессам.

    Теперь, по мере того, как их реализация была завершена (теперь эта технология выделения также известна под nme «Контейнеры Linux» или «LXC» , не так ли? ..):

    «Одной из общих целей пространств имен является поддержка реализации контейнеров, инструмент для облегченной виртуализации (а также другие цели)» .

    Также возможно создать новое пространство имен пользователей, так что «процесс может иметь нормальный непривилегированный идентификатор пользователя вне пространства имен пользователей и в то же время иметь идентификатор пользователя 0 внутри пространства имен. Это означает, что процесс имеет полные привилегии пользователя для операций внутри пространства имен пользователей, но непривилегирован для операций вне пространства имен ».

    Для реальных рабочих команд для этого см. Ответы на:

    • Есть ли инструмент linux vfs, который позволяет связывать каталог в другом месте (например, mount -bind) в пространстве пользователя?
    • Имитировать chroot с unshare

    и программирование / компиляция специального пользовательского пространства

    Но, конечно же, желаемые «тюремные» гарантии реализуются путем программирования в пользовательском пространстве ( без дополнительной поддержки этой функции от ОС , возможно, именно поэтому эта функция не была включена в первую очередь в дизайн ОС ); с более или менее осложнениями.

    seccomp песочница, основанная на ptrace или seccomp может рассматриваться как несколько вариантов реализации гарантий путем написания помощника песочницы, который будет управлять вашими другими процессами, которые будут рассматриваться как «черные ящики», произвольные программы Unix.

    Другой подход может заключаться в использовании методов программирования, которые могут заботиться об эффектах, которые должны быть запрещены. (Это, должно быть, вы, кто пишет программы, тогда они больше не являются черными ящиками.) Чтобы упомянуть об этом, используя чистый язык программирования (который заставит вас программировать без побочных эффектов), как Haskell , просто сделает все последствия программа явно, поэтому программист может легко убедиться, что не будет никаких запрещенных эффектов.

    Я предполагаю, что для этих программ есть средства для песочницы на каком-то другом языке, например Java.

    • Ср Предложение проекта «Sandboxed Haskell» .

    • NaCl – не упоминается здесь – относится к этой группе, не так ли?


    Некоторые страницы, в которых собираются сведения по этой теме, также указывались в ответах на них:

    • страницы в методах песочницы Google Chrome для Linux
    • Группа sandboxing.org

    Это фундаментальное ограничение модели разрешения unix: только root может делегировать.

    Вам не нужно быть root для запуска виртуальной машины (не относится ко всем технологиям VM), но это супертяжелое решение.

    Пользовательский режим Linux – относительно легкое решение для виртуализации Linux-on-Linux. Это не так просто настроить; вам необходимо заполнить корневой раздел (в каталоге), по крайней мере, минимум, необходимый для загрузки (несколько файлов в /etc , /sbin/init и его зависимостях, программа входа в систему, оболочка и утилиты).

    Думаю, вам удастся с LD_PRELOAD перехватить доступ к определенным файлам, но это может быть очень сложно.

    Из полного списка я бы просто добавил:

    • fakeroot (от дебианского сателлита): он предназначен для создания пакета с «дружественными» инструментами. Это не полная изоляция, но она помогает создавать пакеты с разными пользователями и поддельными устройствами и другими специальными псевдофайлами.

    • fakechroot (который использует fakeroot). В этой программе много ошибок. Например, «/ etc / hosts» жестко закодирован в glibc: вы не можете изменить его с помощью этого инструмента.

    • qemu: вам нужно скомпилировать ядро ​​Linux, но результат очень быстрый, и это «поддельная» (то есть виртуальная) машина с реальными привилегиями root. Вы можете создавать и монтировать любой загрузочный образ.

    Firejail – отличный инструмент для тюремного заключения любого процесса, с или без доступа root с множеством опций и очень гибким:

    https://firejail.wordpress.com

    Interesting Posts

    exim отклоняет все local_part, соответствующие шаблону

    Как распечатать -комментарий для всех пользователей, не являющихся системными Linux?

    Не удается войти в GUI

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

    перейти в каталог текущего дня в иерархии каталогов на дате?

    Перемещение каталога от пользователя к другому пользователю, соблюдение правильных разрешений

    rsync оставляет только частичные файлы?

    Где можно скачать debian-test.iso?

    Создание .deb с помощью службы systemd, но без скриптов инициализации SysV

    Как заставить «sox» признать «хромой»?

    Руководство по настройке Gentoo с полным шифрованием диска с использованием LUKS + LVM

    Поддержка ubuntu lts и cgroup в iptables

    Лимит принятия Linux для разработчика .NET

    Есть ли способ использовать xargs через трубу?

    Невозможно отменить перенаправление портов с помощью SSH в качестве временного пользователя

    Linux и Unix - лучшая ОС в мире.