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

nsenter

switch_root