Los espacios de nombres en Linux

Este documento plantea varios experimentos con los espacios de nombres de Linux (Linux espacios de nombres), una de las tecnologías que se usan para implementar contenedores en Linux. Por cada experimento, se deberían ejecutar los mandatos especificados y analizar y comprender los resultados obtenidos.

Experimento 1: UTS espacios de nombres

echo $$ # PID del bash original
ls -l /proc/$$/ns # espacios de nombres originales
sudo lsns -p $$ # otra manera de verlos
sudo unshare -u bash # se requiere ser superusuario
echo $$ # PID del nuevo bash
ls -l /proc/$$/ns  # nuevos espacios de nombres
lsns -p $$ # otra manera de verlos
hostname MyBox
hostname
hostname # ejecute este mandato en otra ventana
exit
hostname

Experimento 1: solución

Resultados:

Explicación:

Experimento 2: espacios de nombres de PID

echo $$ # PID del bash original
ls -l /proc/$$/ns # espacios de nombres originales
sudo lsns -p $$ # otra manera de verlos
sudo unshare -f --mount-proc -p bash # se requiere ser superusuario
echo $$ # PID del nuevo bash
ls -l /proc/$$/ns  # nuevos espacios de nombres
lsns -p $$ # otra manera de verlos
ps
ps -ef # ejecute este mandato en otra ventana y encuentre el PID del nuevo proceso bash de la primera ventana
exit

Experimento 3: espacios de nombres de montaje

ls -l /proc/$$/ns # espacios de nombres originales
sudo unshare -m bash # se requiere ser superusuario
sudo lsns -p $$ # otra manera de verlos
ls -l /proc/$$/ns  # espacios de nombres nuevos
lsns -p $$ # otra manera de verlos
mount -t  tmpfs tmpfs /mnt
df -TH
echo HELLO > /mnt/file
cat /mnt/file
cat /mnt/file # ejecute este mandato en otra ventana
umount /mnt
exit

Experimento 4: espacios de nombres de usuarios

ls -l /proc/$$/ns # espacios de nombres originales
sudo lsns -p $$ # otra manera de verlos
id
unshare -r -u bash # NO se requiere ser superusuario
ls -l /proc/$$/ns  # espacios de nombres nuevos
lsns -p $$ # otra manera de verlos
id
cat /proc/$$/uid_map
cat /proc/$$/gid_map
hostname MyBox
hostname
mount -t  tmpfs tmpfs /mnt
cat /etc/shadow
exit

Experimento 5: combinación de espacios de nombres

ls -l /proc/$$/ns # espacios de nombres originales
sudo lsns -p $$ # otra manera de verlos
id
unshare -r -m -u -f --mount-proc -p bash # NO se requiere ser superusuario
ls -l /proc/$$/ns  # espacios de nombres nuevos
lsns -p $$ # otra manera de verlos
id
cat /proc/$$/uid_map
cat /proc/$$/gid_map
ps
hostname MyBox
hostname
mount -t tmpfs tmpfs /mnt
df -TH
mount -t  tmpfs tmpfs /mnt
df -TH
echo HELLO > /mnt/file
cat /mnt/file
cat /mnt/file # ejecute este mandato en otra ventana
# punto de parada para experimento 6
umount /mnt
cat /etc/shadow
exit

Experimento 6: mandato nsenter

Repita el experimento 5 hasta el punto de parada identificado, busque el PID del bash arrancado en el espacio de nombres por defecto (recuerde que en su espacio de nombres específico vale 1) y, suponiendo que es X, ejecute en otra ventana:
sudo nsenter -a -t X
ls -l /proc/$$/ns
lsns -p $$
id
ps
cat /proc/$$/uid_map
cat /proc/$$/gid_map
hostname
cat /mnt/file
cat /etc/shadow
exit