← Назад ко всем вопросам

Как устроены Linux namespaces

1️⃣ Как кратко ответить

Linux namespaces — это механизм изоляции ресурсов в ядре Linux, который позволяет создавать отдельные контексты для процессов. Каждый namespace изолирует определенный аспект системы, такой как процессы, сеть, файловую систему, идентификаторы пользователей и другие. Это основа для контейнеризации, обеспечивающая безопасность и независимость процессов.

2️⃣ Подробное объяснение темы

Linux namespaces — это ключевая технология, лежащая в основе контейнеризации, которая позволяет изолировать различные аспекты операционной системы для групп процессов. Это достигается путем создания отдельных "пространств имен" (namespaces), в которых процессы видят только те ресурсы, которые им разрешено видеть.

Основные типы namespaces

  1. PID (Process ID) namespace: Изолирует идентификаторы процессов. Процессы в одном PID namespace не видят процессы в другом. Это позволяет, например, запускать процессы с одинаковыми PID в разных контейнерах.

  2. NET (Network) namespace: Изолирует сетевые интерфейсы, маршруты и правила брандмауэра. Каждый NET namespace может иметь свои собственные сетевые интерфейсы и IP-адреса, что позволяет контейнерам иметь независимые сетевые стеки.

  3. MNT (Mount) namespace: Изолирует точки монтирования файловых систем. Это позволяет контейнерам иметь свои собственные файловые системы, которые не видны другим контейнерам.

  4. UTS (UNIX Timesharing System) namespace: Изолирует системные идентификаторы, такие как имя хоста и доменное имя. Это позволяет контейнерам иметь свои собственные имена хостов.

  5. IPC (Interprocess Communication) namespace: Изолирует механизмы межпроцессного взаимодействия, такие как очереди сообщений и семафоры. Это предотвращает взаимодействие между процессами в разных контейнерах через IPC.

  6. USER namespace: Изолирует идентификаторы пользователей и групп. Это позволяет процессам в контейнере иметь root-привилегии, не имея их в основной системе.

Пример использования namespaces

Рассмотрим пример создания нового PID namespace с помощью команды unshare, которая позволяет запускать процессы в новом namespace.

unshare --fork --pid --mount-proc bash
  • unshare: Команда для запуска процесса в новом namespace.
  • --fork: Создает новый процесс, который будет изолирован.
  • --pid: Создает новый PID namespace.
  • --mount-proc: Монтирует новую файловую систему /proc для нового PID namespace.
  • bash: Запускает оболочку bash в новом namespace.

Как это работает

Когда вы запускаете команду unshare, ядро Linux создает новый namespace для указанных ресурсов. В данном примере создается новый PID namespace, что означает, что процессы, запущенные из этой оболочки, будут иметь свои собственные идентификаторы процессов, начиная с 1. Это позволяет изолировать процессы и предотвращать их взаимодействие с процессами за пределами этого namespace.

Зачем это нужно

Namespaces обеспечивают изоляцию и безопасность, что особенно важно в многопользовательских системах и при использовании контейнеров. Они позволяют запускать несколько приложений на одной машине, не опасаясь, что они будут мешать друг другу или получать доступ к данным друг друга. Это делает namespaces основой для таких технологий, как Docker и Kubernetes, которые широко используются для развертывания и управления контейнерами в облачных средах.

Тема: Linux / Unix
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки