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

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

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


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

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

  • Как запретить доступ к пользовательскому пространству имен для программы или пользователя?
  • Установите среду внутри `nsenter / bin / bash`
  • Создание личного монтирования tmpfs в сценарии оболочки
  • icmp ограничен во многих сетевых пространствах?
  • На сервере шлюза может netNS ограничить proc, чтобы видеть только внутренние сети?
  • Поддерживается ли управление трафиком внутри пространства имен на портах, созданных OpenvSwitch?
  • Ядро: поддержка пространств имен
  • Как перечислить пространства имен в Linux?
  • 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 
    Linux и Unix - лучшая ОС в мире.