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.