Пространства имен Linux (linux namespaces)

Preview:

Citation preview

1

Введение в Linux namespaces

Kirill Krinkin, March, 2015

2

Namespace vs CGroups

● Namespace – механизм изоляции и группировки структур данных ядра.

● Control groups – механизм изоляции ресурсов ядра

3

Представление процесса в linux

include/linux/sched.h, include/linux/nsproxy.h

http://lxr.free-electrons.com/source/include/linux/sched.h#L1273http://lxr.free-electrons.com/source/include/linux/nsproxy.h#L29

4

API

● clone()● unshare()● setns()

5

clone / unshare

VS.

6

Namespaces

● Mount (_NEWNS)● UTS (_NEWUTS)● IPC (_NEWIPC)● PID (_NEWPID)● user (_NEWUSER)

7

Mount namespace

● mount namespace – копия дерева файловой системы, ассоциированная с процессом

● Создание:

● Опции:– распространение событий монтирования

– запрет перемонтирования

8

Флаги mount

– bind – смонтировать существующее дерево в другую точку (поддерево будет доступно в обоих местах)

Распространение изменений:

–make-shared

–make-slave

–make-private

–make-unbindable

Подробнее: Documentation/filesystems/sharedsubtree.txt

9

Пример: приватное монтирование

10

UTS namespace

● Изоляция имени хоста и доменного имени● utsname

● Создание:

11

Пример: создание UTS

см: namespaces/demo_uts_namespaces.c

12

Удержание пространства имен

#touch ./uts

#mount —bind /proc/6221/ns/uts ./uts

см: namespaces/ns_exec.c

# hostname

– thinkpad

#./ns_exec ./uts hostname

– newhostname

13

PID namespace

● Назначение: изоляция идентификаторов процессов● Создание

● Возможности:– миграция контейнеров с сохранением PIDs

– имитация init-процесса

– могут быть вложенными

14

Иерархия PIDNS

31

2

4

31 2

12

0

родительпотомок

15

PIDs & TGIDs

16

Пример: PID namespace

● см: pidns_init_sleep.c

17

IPC namespace

● Изоляция ресурсов IPC (System V IPC) – очередей сообщений, разделяемая память...

● Создание:

18

USER namespace

● Изоляция идентификаторов пользователей и групп● Создание:

● Возможности:– Предоставление привилегированных операций

непривилегированному пользователю внутри пространства имен

– Отображение пользователей и групп

● /proc/sys/kernel/overflowuid

19

Пример: user namespace

● см: demo_userns.c

./demo_userns

20

Network namespace

● Изоляция сетевой конфигурации, интерфейсов, правил марштуризации

● Создание:

Примеры (через ip):– ip netns add netns1

– ip netns exec netns1 ip link list

– ip netns delete netns1

– ip netns exec netns1 ip link set dev lo up

– ip netns exec netns1 ping 127.0.0.1

21

Для чтения

● http://www.ibm.com/developerworks/library/l-mount-namespaces/

● http://lwn.net/Articles/531114/

Recommended