Если бы я был пользователем root, я мог бы просто создать фиктивного пользователя / группу, соответственно установить права доступа к файлу и выполнить процесс от имени этого пользователя. Однако я не так, есть ли способ достичь этого, не будучи root?
permissions
not-root-user
jails
Тобиас Кинцлер
источник
источник
chroot
естественно бы туда поместился, но опять же ты не root.Ответы:
Больше похожих вопросов с большим количеством ответов, заслуживающих внимания:
ПРИМЕЧАНИЕ: некоторые ответы там указывают на конкретные решения, еще не упомянутые здесь.
На самом деле, существует довольно много инструментов для джейлинга с разной реализацией, но многие из них либо не защищены по конструкции (например
fakeroot
, наLD_PRELOAD
основе), либо не завершены (напримерfakeroot-ng
, наptrace
основе), либо требуют root (chroot
илиplash
упоминаются в fakechroot). предупреждающая табличка ).Это всего лишь примеры; Я подумал о том, чтобы перечислить их все рядом, с указанием этих двух функций («можно ли доверять?», «Требуется настроить root?»), Возможно, в реализациях виртуализации на уровне операционной системы .
В общем, ответы там охватывают весь описанный диапазон возможностей и даже больше:
виртуальные машины / ОС
расширение ядра (например, SELinux)
корневой
Помощники на основе Chroot (которые, тем не менее, должны быть root-ID setUID, потому что
chroot
требуется root; или, возможно,chroot
могут работать в изолированном пространстве имен - см. Ниже):[рассказать немного больше о них!]
Известные инструменты изоляции на основе chroot:
hsh-run
иhsh-shell
командами. ( Hasher был разработан для создания программного обеспечения безопасным и воспроизводимым способом.)ptrace
Другое решение изоляции надежной (помимо более
seccomp
основанных один ) будет полный системный вызов-перехват черезptrace
, как описано в разделе страницы руководства дляfakeroot-ng
:Тем не менее, как вы можете прочитать,
fakeroot-ng
сам по себе не предназначен для этой цели.(Кстати, мне интересно, почему они решили использовать
seccomp
подход на основе хрома, а не наptrace
основе ...)Из инструментов, не упомянутых выше, я отметил Geordi для себя, потому что мне понравилось, что управляющая программа написана на Haskell.
Известные инструменты изоляции на основе ptrace:
fakeroot-ng
Seccomp
Один из известных способов обеспечить изоляцию - использование изолированной среды seccomp, используемой в Google Chromium . Но этот подход предполагает, что вы пишете помощника, который будет обрабатывать некоторые (разрешенные) из «перехваченного» доступа к файлу и других системных вызовов; а также, конечно, приложить усилия, чтобы «перехватить» системные вызовы и перенаправить их к помощнику (возможно, это будет означать даже такую вещь, как замена перехваченных системных вызовов в коде контролируемого процесса; так что это не звучит быть довольно простым; если вам интересно, вам лучше прочитать подробности, а не только мой ответ).
Более связанная информация (из Википедии):
(Последний пункт кажется интересным, если кто-то ищет общее
seccomp
решение за пределами Chromium. Есть также запись в блоге, которую стоит прочитать от автора "seccomp-nurse": SECCOMP как решение для песочницы?. )Иллюстрация этого подхода из проекта "seccomp-nurse" :
«Гибкий» seccomp возможен в будущем Linux?
Раньше в 2009 году появлялись также предложения по исправлению ядра Linux, чтобы обеспечить большую гибкость
seccomp
режима - чтобы «можно было избежать многих акробатических действий, которые нам нужны в настоящее время». («Акробатика» относится к сложностям написания помощника, который должен выполнить множество возможно невинных системных вызовов от имени заключенного в тюрьму процесса и замены возможно невинных системных вызовов в заключенном в тюрьму процессе.) Статья LWN написала на этот счет:Этот «гибкий seccomp» приблизил бы возможности Linux к предоставлению желаемой функции в ОС, без необходимости писать сложные помощники.
(Публикация в блоге в основном с тем же содержанием, что и этот ответ: http://geofft.mit.edu/blog/sipb/33 .)
пространства имен (
unshare
)Изоляция с помощью пространств имен (
unshare
основанных на решениях ), не упомянутых здесь, например, неиспользование точек монтирования (в сочетании с FUSE?) Может быть частью рабочего решения, если вы хотите ограничить доступ к файловой системе ваших ненадежных процессов.Подробнее о пространствах имен, теперь, когда их реализация завершена (этот метод изоляции также известен под nme «Контейнеры Linux», или «LXC» , не так ли? ..):
«Одной из общих целей пространств имен является поддержка реализации контейнеров, инструмента для облегченной виртуализации (а также других целей)» .
Можно даже создать новое пространство имен пользователя, чтобы «процесс мог иметь обычный непривилегированный идентификатор пользователя вне пространства имен пользователя, и в то же время иметь идентификатор пользователя 0 внутри пространства имен. Это означает, что процесс имеет полные права root для операций внутри пространства имен пользователя, но непривилегирован для операций вне пространства имен ".
Для реальных рабочих команд, чтобы сделать это, см. Ответы в:
и специальное программирование / компиляция пространства пользователя
Но, конечно же, желаемые гарантии «тюрьмы» реализуются путем программирования в пользовательском пространстве ( без дополнительной поддержки этой функции со стороны ОС ; возможно, именно поэтому эта функция не была включена в первую очередь при проектировании ОС ); с более или менее осложнениями.
Упомянутая
ptrace
- илиseccomp
основанная песочницу можно рассматривать как некоторые варианты осуществления гарантий в письменном виде песочницы-помощник , который будет контролировать ваши другие процессы, которые будут рассматриваться в качестве «черных ящиков», произвольных программ Unix.Другой подход может заключаться в использовании методов программирования, которые могут заботиться о последствиях, которые должны быть запрещены. (Должно быть, вы пишете программы тогда; они больше не являются черными ящиками.) Чтобы упомянуть одно, использование чистого языка программирования (который заставил бы вас программировать без побочных эффектов), такого как Haskell , просто сделает все эффекты Программа явно, так что программист может легко убедиться, что не будет никаких запрещенных эффектов.
Я предполагаю, что для этих программ доступны средства песочницы на каком-то другом языке, например, Java.
Ср Проект «Sandboxed Haskell» .
NaCl - здесь не упоминается - относится к этой группе, не так ли?
На некоторые страницы, накапливающие информацию по этой теме, также указывались в ответах:
источник
chroot
, но это, вероятно, все еще потребует настоящие привилегии суперпользователя ...Это фундаментальное ограничение модели разрешений Unix: делегировать может только root.
Вам не нужно быть пользователем root для запуска виртуальной машины (это не относится ко всем технологиям VM), но это тяжелое решение.
Linux в пользовательском режиме - это относительно легкое решение для виртуализации Linux-on-Linux. Это не так легко настроить; вам необходимо заполнить корневой раздел (в каталоге), по крайней мере , минимально необходимого для загрузки (несколько файлов
/etc
,/sbin/init
и его зависимостей, программа входа в систему , оболочки и утилиты).источник
Полагаю, вам может повезти с
LD_PRELOAD
перехватом доступа к определенным файлам, но это может быть очень сложно.источник
LD_PRELOAD
Нельзя доверять перехвату через (можно обойти), но перехватыватьptrace
можно.LD_PRELOAD
решения на основе нельзя доверять в качестве меры безопасности.Из полного списка я бы просто добавил:
fakeroot (из пакета поддержки Debian): он предназначен для сборки пакета с помощью «дружественных» инструментов. Это не полная изоляция, но она помогает создавать пакеты с разными пользователями, поддельными устройствами и другими специальными псевдофайлами.
fakechroot (который использует fakeroot). В этой программе много ошибок. Например, "/ etc / hosts" жестко запрограммирован в glibc: вы не можете изменить его с помощью этого инструмента.
qemu: вам нужно скомпилировать ядро linux, но результат очень быстрый, и это «фальшивая» (то есть виртуальная) машина с настоящими привилегиями root. Вы можете собрать и смонтировать любой загрузочный образ.
источник
Firejail - хороший инструмент для заключения в тюрьму любого процесса, с корневым доступом или без него, с большим количеством опций и очень гибкий:
источник