Есть ли способ изолировать запущенную программу от остальной части системы Linux?

Прежде всего, я знаю о виртуализации и контейнерах. Я уверен, что «он хочет контейнеров» – это то, что появилось у вас в голове. (Не отрицайте!)

Однако контейнеры похожи на chroot: если вы хотите выполнить bash, вам нужно скопировать / зеркально отобразить исполняемый файл bash где-нибудь в контейнере FS, а также все необходимые библиотеки. (Если я что-то не понял, пожалуйста, исправьте меня).


Я хочу знать, могу ли я запустить программу, такую ​​как busybox, из текущего пространства имен (используя исходную FS, поэтому не требуется копировать), а затем изолировать ее (например, используя пространство имен Linux FS), чтобы он мог получить доступ к одному уникальному каталогу.

Как-то ssh (sftp на самом деле), похоже, может сделать что-то подобное, не требуя, чтобы исполняемый файл sshd находился в chrooted FS. Но мне все еще не хватает навыков, чтобы понять, что происходит сам.

  • Поддерживается ли управление трафиком внутри пространства имен на портах, созданных OpenvSwitch?
  • Ядро: поддержка пространств имен
  • Запрещенное ограничение обработчика сигнала процесса инициализации pid-имен
  • Проблемы с сетевым подключением между разными хостами из сетевого пространства имен в одном хосте
  • Почему мое монтирование привязки видимо за пределами пространства имен mount?
  • Рекурсивно отключите привязку Bind в пространстве имен User and Mount
  • Как назначить дополнительное имя IP / хоста для chrooted среды?
  • Доступ к сети в сетевом пространстве имен
  • One Solution collect form web for “Есть ли способ изолировать запущенную программу от остальной части системы Linux?”

    Я думаю, вы, вероятно, ищете контейнеры.

    Или, возможно, нет. В конце концов, пространства имен Linux могут быть довольно прозрачными. Я не верю, что есть способ unshare пространство имен для процесса, который уже был вызван, но вы определенно можете unshare пространство имен во время разговора с небольшим эффектом.

     cd /tmp echo you >hey sudo unshare -m busybox echo hey >you; cat hey 

     you 

    … и с другого терминала …

     cd /tmp cat you 

     hey 

    … дерево монтирования по умолчанию используется в родительском пространстве имен, и, несмотря на то, что флаги распространения busybox все по умолчанию busybox по умолчанию, это не имеет значения до тех пор, пока изменение в дереве монтирования каким-либо образом не будет реализовано в пространстве имен. Этого также не нужно делать через busybox.

    … в терминале busybox

     echo "#$$" 

     #8854 

    … и теперь от другого …

     sudo nsenter -t8854 -m mount -t tmpfs none /tmp cd .; cat hey 

     you 

    … но из терминала busybox , и, следовательно, из пространства имен мы просто выполнили mount

     cd .; cat hey 

     cat: hey: no such file or directory 

    … потому что новые приватные tmpfs были установлены поверх shared /tmp в команде nsenter

     cd .. umount tmp cat tmp/hey 

     you 
    Interesting Posts

    Как я могу убить процесс и убедиться, что PID не был повторно использован

    Скопируйте содержимое файла в буфер обмена без отображения его содержимого

    Могу ли я изменить / домашний раздел на / boot?

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

    Как очистить локальный DNS-кеш в CentOS

    Получить каждый столбец, который содержит несколько пробелов?

    Как удалить пустые комментарии с помощью sed?

    STDOUT как аргумент в bash / Makefile и место для дескриптора правильно

    отключить dhcp в initramfs

    Как проверить порт, открытый при запуске службы?

    Как восстановить мои закладки Firefox с загрузочного ноутбука

    Инструмент командной строки для «cat» попарно расширяет все строки в файле

    Мышь работает только в одной программе Linux Mint за один раз

    Выполняют ли программы, вызванные оболочкой, наследовать переменные оболочки?

    Экран HiDPI и масштабирование

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