← Back to notes

Linux Namespaces — изоляция
процессов на уровне ядра


Namespaces

Механизм ядра, изолирующий глобальные системные ресурсы для группы процессов. Каждый процесс видит собственный набор: PID, сеть, точки монтирования, UID/GID, hostname и др. Основа для контейнерных технологий (Docker, LXC, Podman, Kubernetes).


Типы пространств имён


Системные вызовы

  • clone(2) / clone3(2) — создать процесс в новых namespaces (флаги CLONE_NEW*).
  • unshare(2) — отделить вызывающий процесс в новые namespaces.
  • setns(2) — присоединить процесс к существующему namespace по fd из /proc/[pid]/ns/<type>.
  • ioctl_ns(2) — навигация по иерархии user/PID namespaces.

Пример

sudo unshare --uts --pid --net --mount --fork /bin/bash

Внутри:

  • hostname локальный;
  • ps видит только процессы нового PID namespace;
  • сетевой стек отдельный (без интерфейсов, кроме настроенных вручную).

Представление в /proc

Каждый namespace представлен symlink в /proc/[pid]/ns/:

/proc/self/ns/mnt    -> mnt:[4026531840]
/proc/self/ns/pid    -> pid:[4026531836]
/proc/self/ns/net    -> net:[4026531992]
/proc/self/ns/user   -> user:[4026531837]

Inode в скобках — идентификатор namespace; одинаковый inode означает один и тот же namespace.


Ссылки

Linux Namespaces — изоляция процессов на уровне ядра | Aleksandr Suprun