Introdu¸c˜ao Implementa¸c˜ao
Namespace
Lu´ıs Eduardo
lets@cin.ufpe.br
Universidade Federal de Pernambuco
Agosto 2015
Introdu¸c˜ao Implementa¸c˜ao
Summary I
1 Introdu¸c˜ao
2 Implementa¸c˜ao
Estrutura de dados
Clone Flags
System Calls
Introdu¸c˜ao Implementa¸c˜ao
Introdu¸c˜ao
a
Limita o escopo do Kernel a nomes e a estruturas de dados
utilizados gradualmente por processos para prover isola¸c˜ao.
Observa¸c˜ao
Existem 10 namespaces definidos (por´em apenas 6 implementados)
Mount (mnt)
Process ID (pid)
Network (net)
Interprocess Call (ipc)
Unix Timesharing System (uts)
User (user)
security*
security key*
device*
Introdu¸c˜ao Implementa¸c˜ao
Introdu¸c˜ao
Implementado para oferecer maneiras de isolar processos
Introdu¸c˜ao Implementa¸c˜ao
Introdu¸c˜ao
Implementado para oferecer maneiras de isolar processos
Permite inserir checkpoint/restore (C/R), importante para
sistemas que s˜ao executados em ambientes HPC
Introdu¸c˜ao Implementa¸c˜ao
Introdu¸c˜ao
Implementado para oferecer maneiras de isolar processos
Permite inserir checkpoint/restore (C/R), importante para
sistemas que s˜ao executados em ambientes HPC
Permite integrar live-migration
Introdu¸c˜ao Implementa¸c˜ao
Introdu¸c˜ao
Implementado para oferecer maneiras de isolar processos
Permite inserir checkpoint/restore (C/R), importante para
sistemas que s˜ao executados em ambientes HPC
Permite integrar live-migration
Utilizado em projetos como containers (LXC, OpenVZ, etc),
CRIU.
Introdu¸c˜ao Implementa¸c˜ao
Implementa¸c˜ao
Mount namespaces foi o primeiro namespace a ser
implementado, em 2002 no kernel 2.4.19
User namespace foi o ´ultimo namespace a ser implementado e
tornou-se dispon´ıvel junto com os outros tipos no kernel 3.8
Observa¸c˜ao
Exceto o User namespace, todos precisam da capacidade
(capability) CAP SYS ADMIN
Introdu¸c˜ao Implementa¸c˜ao
Summary
1 Introdu¸c˜ao
2 Implementa¸c˜ao
Estrutura de dados
Clone Flags
System Calls
Introdu¸c˜ao Implementa¸c˜ao
Estrutura de dados
Implementa¸c˜ao da estrutura nsproxy no
include/linux/nsproxy.h
Introdu¸c˜ao Implementa¸c˜ao
Estrutura de dados
a
Todas as estruturas de nsproxy possuem
um objeto user ns
User namespace ´e membro da estrutura
de credenciamento (cred)
cred representa o contexto de seguran¸ca
de um processo
O objeto nsproxy ´e criado atrav´es do
m´etodo create nsproxy()
nsproxy ´e liberado atrav´es do m´etodo
free nsproxy()
O descritor de processo (task struct)
possui um ponteiro para nsproxy
Introdu¸c˜ao Implementa¸c˜ao
Summary
1 Introdu¸c˜ao
2 Implementa¸c˜ao
Estrutura de dados
Clone Flags
System Calls
Introdu¸c˜ao Implementa¸c˜ao
Clone Flags
O que s˜ao
Flags utilizadas para suportar a cria¸c˜ao de namespaces (em
especial, utilizadas na system call clone()
S˜ao 6:
CLONE NEWNS: mount namespace
CLONE NEWUTS: unix timesharing system namespace
CLONE NEWIPC: inter-process call namespace
CLONE NEWPID: process id namespace
CLONE NEWNET: networking namespace
CLONE NEWUSER: user namespace
Implementado em: include/linux/sched.h
A system call clone() ´e utilizada para criar novos processos. Foi
adaptada para suportar novas flags, criando um processo e
adicionando a um namespace espec´ıfico.
Introdu¸c˜ao Implementa¸c˜ao
Summary
1 Introdu¸c˜ao
2 Implementa¸c˜ao
Estrutura de dados
Clone Flags
System Calls
Introdu¸c˜ao Implementa¸c˜ao
System Calls
Foram adicionadas 2 system calls:
unshare()
setns()
Introdu¸c˜ao Implementa¸c˜ao
unshare()
Defini¸c˜ao
Respons´avel por criar um objeto nsproxy e adicion´a-lo ao processo
que chamou o system call. Requer uma Clone Flag para identificar
qual namespace dever´a ser criado.
Quando a CLONE NEWPID ´e passada, ele chama a system call
fork(), diferenciando seu comportamento tradicional.
Implementado em: kernel/fork.c
Introdu¸c˜ao Implementa¸c˜ao
setns()
Defini¸c˜ao
Respons´avel por adicionar um processo que chamou a system call
a um namespace existente.
Assinatura do m´etodo: setns(int fd, int nstype), onde:
fd (file descriptor): Um descritor que refere-se a um
namespace. Localizado no diret´orio:/proc/$PID/ns/
nstype (opcional): Especifica atrav´es de uma Clone Flag qual
deve ser o tipo do namespace.
Valor 0, fd pode assumir qualquer tipo.
Valor de nstype diferente do tipo de fd: Retorna -EINVAL
Implementado em: kernel/nsproxy.c
Introdu¸c˜ao Implementa¸c˜ao
Namespace
Lu´ıs Eduardo
lets@cin.ufpe.br
Universidade Federal de Pernambuco
Agosto 2015

Namespace