Les conteneurs
Où est la magie
- Sans linux, pas de conteneur.
- La magie vient de l'implémentation des namespaces
- L'isolation des processus n'est pas de la sécurité (ça aide)
- Tout peut se faire à coup de cat > /proc/....
- Docker, OCI norment tout ça et facilitent le travail
Les namespaces
Capacité du kernel à changer la vision qu'on les processus de leur contexte d'execution
man 7 namespaces
...
Namespace Flag Page Isolates
Cgroup CLONE_NEWCGROUP cgroup_namespaces(7) Cgroup root directory
IPC CLONE_NEWIPC ipc_namespaces(7) System V IPC, POSIX message queues
Network CLONE_NEWNET network_namespaces(7) Network devices, stacks, ports, etc.
Mount CLONE_NEWNS mount_namespaces(7) Mount points
PID CLONE_NEWPID pid_namespaces(7) Process IDs
Time CLONE_NEWTIME time_namespaces(7) Boot and monotonic clocks
User CLONE_NEWUSER user_namespaces(7) User and group IDs
UTS CLONE_NEWUTS uts_namespaces(7) Hostname and NIS domain name
Utilise les appels système:
- clone: crée des nouveaux process et les namespaces en fonction des flag CLONE_NEW* passés
- setns: permet au processus courant de rejoindre un namespace existant (/proc/pid/ns)
- unshare: déplace le processus appelant vers des nouveaux namespaces
- ioctl : permet d'accéder à de l'innformation sur les namespaces existants (ioctl_ns(2))
Données de configuration des limites par utilisateur:
/proc/sys/user
├── max_cgroup_namespaces
├── max_ipc_namespaces
├── max_mnt_namespaces
├── max_net_namespaces
├── max_pid_namespaces
├── max_time_namespaces
├── max_user_namespaces
└── max_uts_namespaces
Un namespace est automatiquement supprimé dès qu'il n'y a plus de processus joint.
Commandes cli
lsns
unshare
unshare --user --map-root-user --net --mount