<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux Sin Humo (Publicaciones sobre contenedores)</title><link>https://sergiobelkin.com/</link><description></description><atom:link href="https://sergiobelkin.com/categories/contenedores.xml" rel="self" type="application/rss+xml"></atom:link><language>es</language><copyright>Contents © 2026 &lt;a href="mailto:sebelk@gmail.com"&gt;sebelk&lt;/a&gt; 
&lt;a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0/"&gt;
&lt;img alt="Creative Commons License BY-NC-SA"
style="border-width:0; margin-bottom:12px;"
src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png"&gt;&lt;/a&gt;
</copyright><lastBuildDate>Sun, 19 Apr 2026 00:13:27 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Gestión de Contraseñas Usando Contenedores Podman (Update 2025)</title><link>https://sergiobelkin.com/posts/gestion-de-contrasenas-usando-contenedores-podman-update-2025/</link><dc:creator>sebelk</dc:creator><description>&lt;figure&gt;&lt;img src="https://sergiobelkin.com/images/podman-pass-2025.png"&gt;&lt;/figure&gt; &lt;p&gt;En 2023, &lt;a href="https://sergiobelkin.com/posts/gestion-de-contrasenas-usando-contenedores-podman/"&gt;publiqué un post&lt;/a&gt; sobre cómo usar &lt;strong&gt;&lt;code&gt;pass&lt;/code&gt;&lt;/strong&gt; con un contenedor Git administrado por Podman. Esa guía fue muy útil como demo inicial, pero desde entonces cambiaron algunas cosas: nuevas versiones de Podman, la aparición de &lt;strong&gt;Quadlet&lt;/strong&gt;, la deprecación de &lt;code&gt;podman generate systemd&lt;/code&gt;, y la conveniencia de usar imágenes más estables.&lt;/p&gt;
&lt;p&gt;Este post es una &lt;strong&gt;actualización 2025&lt;/strong&gt; del artículo original, incorporando:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Imagen base &lt;strong&gt;UBI9 minimal&lt;/strong&gt; (más liviana y con soporte extendido). Esta imagen, desarrollada por Red Hat, es de tamaño relativamente pequeño, usa una versión reduccida de dnf, llamada &lt;em&gt;microdnf&lt;/em&gt; con soporte de módulos y usa software de repositorios - también - de Red Hat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rootless limpio&lt;/strong&gt; con &lt;code&gt;UserNS=keep-id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quadlet&lt;/strong&gt; para integrar con &lt;code&gt;systemd --user&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Volúmenes persistentes&lt;/strong&gt; para no perder datos ni claves al actualizar la imagen.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Endurecimiento SSH&lt;/strong&gt; (solo claves públicas, nada de contraseñas).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="1-construccion-de-la-imagen"&gt;1. Construcción de la imagen&lt;/h3&gt;
&lt;p&gt;Dockerfile (&lt;code&gt;Dockerfile&lt;/code&gt;):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;registry.access.redhat.com/ubi9/ubi-minimal&lt;/span&gt;

&lt;span class="k"&gt;RUN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;microdnf&lt;span class="w"&gt; &lt;/span&gt;-y&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;openssh-server&lt;span class="w"&gt; &lt;/span&gt;git&lt;span class="w"&gt; &lt;/span&gt;shadow-utils&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;microdnf&lt;span class="w"&gt; &lt;/span&gt;clean&lt;span class="w"&gt; &lt;/span&gt;all&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;useradd&lt;span class="w"&gt; &lt;/span&gt;-ms&lt;span class="w"&gt; &lt;/span&gt;/bin/bash&lt;span class="w"&gt; &lt;/span&gt;git&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;chsh&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;/usr/bin/git-shell&lt;span class="w"&gt; &lt;/span&gt;git

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;2222&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"/usr/sbin/sshd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"-D"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"-e"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Construcción:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;podman&lt;span class="w"&gt; &lt;/span&gt;build&lt;span class="w"&gt; &lt;/span&gt;-t&lt;span class="w"&gt; &lt;/span&gt;localhost/passteiner-ubi9:1&lt;span class="w"&gt; &lt;/span&gt;.
&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3 id="2-crear-volumenes-persistentes"&gt;2. Crear volúmenes persistentes&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;podman&lt;span class="w"&gt; &lt;/span&gt;volume&lt;span class="w"&gt; &lt;/span&gt;create&lt;span class="w"&gt; &lt;/span&gt;git-home
podman&lt;span class="w"&gt; &lt;/span&gt;volume&lt;span class="w"&gt; &lt;/span&gt;create&lt;span class="w"&gt; &lt;/span&gt;ssh-etc

&lt;span class="nv"&gt;VHOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;podman&lt;span class="w"&gt; &lt;/span&gt;volume&lt;span class="w"&gt; &lt;/span&gt;inspect&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'{{.Mountpoint}}'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;git-home&lt;span class="k"&gt;)&lt;/span&gt;
mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VHOME&lt;/span&gt;&lt;span class="s2"&gt;/.ssh"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VHOME&lt;/span&gt;&lt;span class="s2"&gt;/.password-store"&lt;/span&gt;
cp&lt;span class="w"&gt; &lt;/span&gt;~/.ssh/id_ed25519.pub&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VHOME&lt;/span&gt;&lt;span class="s2"&gt;/.ssh/authorized_keys"&lt;/span&gt;
chmod&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;700&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VHOME&lt;/span&gt;&lt;span class="s2"&gt;/.ssh"&lt;/span&gt;
chmod&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;600&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VHOME&lt;/span&gt;&lt;span class="s2"&gt;/.ssh/authorized_keys"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Repositorio bare:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;podman&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;chown&lt;span class="w"&gt; &lt;/span&gt;-R&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;:1000&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VHOME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
podman&lt;span class="w"&gt; &lt;/span&gt;run&lt;span class="w"&gt; &lt;/span&gt;--rm&lt;span class="w"&gt; &lt;/span&gt;-v&lt;span class="w"&gt; &lt;/span&gt;git-home:/home/git&lt;span class="w"&gt; &lt;/span&gt;localhost/passteiner-ubi9:1&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;git&lt;span class="w"&gt; &lt;/span&gt;init&lt;span class="w"&gt; &lt;/span&gt;--bare&lt;span class="w"&gt; &lt;/span&gt;/home/git/.password-store
&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3 id="3-quadlet-systemd-integration"&gt;3. Quadlet (systemd integration)&lt;/h3&gt;
&lt;p&gt;Archivo &lt;code&gt;~/.config/containers/systemd/pass_git.container&lt;/code&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="k"&gt;[Unit]&lt;/span&gt;
&lt;span class="na"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;pass git over SSH (podman quadlet)&lt;/span&gt;
&lt;span class="na"&gt;Wants&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;network-online.target&lt;/span&gt;
&lt;span class="na"&gt;After&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;network-online.target&lt;/span&gt;

&lt;span class="k"&gt;[Container]&lt;/span&gt;
&lt;span class="na"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;containers-storage:localhost/passteiner-ubi9:1&lt;/span&gt;
&lt;span class="na"&gt;Pull&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;never&lt;/span&gt;

&lt;span class="na"&gt;ContainerName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;pass_git&lt;/span&gt;
&lt;span class="na"&gt;Network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;pasta&lt;/span&gt;
&lt;span class="na"&gt;PublishPort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;60003:2222&lt;/span&gt;

&lt;span class="na"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;git-home:/home/git:Z,U&lt;/span&gt;
&lt;span class="na"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;ssh-etc:/etc/ssh:Z&lt;/span&gt;

&lt;span class="na"&gt;UserNS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;keep-id&lt;/span&gt;
&lt;span class="na"&gt;LogDriver&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;journald&lt;/span&gt;
&lt;span class="na"&gt;Exec&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/usr/sbin/sshd -D -e -p 2222 -o PidFile=/tmp/sshd.pid&lt;/span&gt;

&lt;span class="k"&gt;[Service]&lt;/span&gt;
&lt;span class="na"&gt;Restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;on-failure&lt;/span&gt;

&lt;span class="k"&gt;[Install]&lt;/span&gt;
&lt;span class="na"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;default.target&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Activación:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;systemctl&lt;span class="w"&gt; &lt;/span&gt;--user&lt;span class="w"&gt; &lt;/span&gt;daemon-reload
systemctl&lt;span class="w"&gt; &lt;/span&gt;--user&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;enable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--now&lt;span class="w"&gt; &lt;/span&gt;pass_git.service
&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3 id="4-probar-conexion-ssh"&gt;4. Probar conexión SSH&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;ssh&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;60003&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;git@&amp;lt;IP_DEL_HOST&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PreferredAuthentications&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;publickey&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PasswordAuthentication&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s1"&gt;'git --version &amp;amp;&amp;amp; echo OK'&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Debe autenticar con tu clave pública y responder &lt;code&gt;git version ...&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="5-probar-pass-con-git"&gt;5. Probar pass con git&lt;/h3&gt;
&lt;p&gt;Inicializar &lt;code&gt;pass&lt;/code&gt; en tu host y configurar el remoto:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PASSWORD_STORE_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.local/share/pass
pass&lt;span class="w"&gt; &lt;/span&gt;init&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tu_clave_gpg"&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PASSWORD_STORE_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
git&lt;span class="w"&gt; &lt;/span&gt;remote&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;origin&lt;span class="w"&gt; &lt;/span&gt;ssh://git@&amp;lt;IP_DEL_HOST&amp;gt;:60003/home/git/.password-store
git&lt;span class="w"&gt; &lt;/span&gt;push&lt;span class="w"&gt; &lt;/span&gt;origin&lt;span class="w"&gt; &lt;/span&gt;master
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Y luego:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;pass&lt;span class="w"&gt; &lt;/span&gt;git&lt;span class="w"&gt; &lt;/span&gt;push
pass&lt;span class="w"&gt; &lt;/span&gt;git&lt;span class="w"&gt; &lt;/span&gt;pull
&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3 id="diferencias-clave-respecto-al-articulo-original"&gt;Diferencias clave respecto al artículo original&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Imagen&lt;/strong&gt;: antes Fedora, ahora UBI9 minimal (más estable, soporte hasta 2032).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Systemd&lt;/strong&gt;: antes &lt;code&gt;podman generate systemd&lt;/code&gt;, ahora &lt;strong&gt;Quadlet&lt;/strong&gt; (futuro estándar, más limpio).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rootless&lt;/strong&gt;: antes root dentro del contenedor, ahora &lt;code&gt;UserNS=keep-id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Volúmenes&lt;/strong&gt;: ahora explícitos (&lt;code&gt;git-home&lt;/code&gt;, &lt;code&gt;ssh-etc&lt;/code&gt;), evitando pérdidas de datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seguridad SSH&lt;/strong&gt;: solo claves, sin password, &lt;code&gt;PidFile&lt;/code&gt; movido a &lt;code&gt;/tmp&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="conclusion"&gt;Conclusión&lt;/h3&gt;
&lt;p&gt;Este enfoque actualizado:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Evita perder el repositorio y las claves al recrear el contenedor.&lt;/li&gt;
&lt;li&gt;Asegura compatibilidad a futuro con Podman + systemd.&lt;/li&gt;
&lt;li&gt;Se apoya en una base más segura (UBI9 minimal).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;👉 Si ya usás el setup original, podés migrar en pocas horas y quedarte tranquilo de que tu &lt;strong&gt;gestor de contraseñas &lt;code&gt;pass&lt;/code&gt;&lt;/strong&gt; seguirá funcionando a largo plazo.&lt;/p&gt;</description><category>contenedores</category><category>seguridad</category><guid>https://sergiobelkin.com/posts/gestion-de-contrasenas-usando-contenedores-podman-update-2025/</guid><pubDate>Mon, 25 Aug 2025 22:27:46 GMT</pubDate></item><item><title>Como instalar Zabbix 7.x usando contenedores podman</title><link>https://sergiobelkin.com/posts/como-instalar-zabbix-7x-usando-contenedores-podman/</link><dc:creator>sebelk</dc:creator><description>&lt;div style="float: left; margin-right: 10px; width: 200px; max-width: 100%;"&gt;
&lt;a class="image-reference" href="https://sergiobelkin.com/images/zabbix-podman.webp"&gt;&lt;img src="https://sergiobelkin.com/images/zabbix-podman.thumbnail.webp" alt="Namespaces en Linux"&gt;&lt;/a&gt; 
&lt;/div&gt;

&lt;p&gt;Zabbix es una potente herramienta de monitoreo. Recientemente salió la versión 7.0 la cual incorporó funcionalidades importantes, como son los items de browser que usan webdrivers. A continuación veremos como implementar Zabbix 7.x usando podman.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La guía siguiente supone que:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ya generaste o adquiriste los certificados ssl.&lt;/li&gt;
&lt;li&gt;Tenés los conocimientos fundamentales sobre Linux (usamos RHEL8).&lt;/li&gt;
&lt;li&gt;Poseés conocimientos básicos de troubleshooting en contenedores y entendiendo que este "HowTo" es un punto al que deberás adaptar a tu entorno y necesidades. No es consultoría 😀.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="1-crear-el-pod-con-puertos-correctos"&gt;1. Crear el Pod con Puertos Correctos&lt;/h3&gt;
&lt;p&gt;Primero, crear el pod con el puerto 443 en el host mapeado al puerto 8443 en el contenedor de NGINX. También asignar el puerto 10051 para Zabbix Server.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;podman&lt;span class="w"&gt; &lt;/span&gt;pod&lt;span class="w"&gt; &lt;/span&gt;create&lt;span class="w"&gt; &lt;/span&gt;--name&lt;span class="w"&gt; &lt;/span&gt;zabbix&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;443&lt;/span&gt;:8443&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10051&lt;/span&gt;:10051
&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3 id="2-desplegar-el-contenedor-mysql"&gt;2. Desplegar el Contenedor MySQL&lt;/h3&gt;
&lt;p&gt;Iniciar el contenedor &lt;code&gt;mysql-server&lt;/code&gt; dentro del pod, configurando las variables de entorno necesarias para la base de datos de Zabbix:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;mysql&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;podman&lt;span class="w"&gt; &lt;/span&gt;run&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;--name&lt;span class="w"&gt; &lt;/span&gt;mysql-server&lt;span class="w"&gt; &lt;/span&gt;--pod&lt;span class="o"&gt;=&lt;/span&gt;zabbix&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-v&lt;span class="w"&gt; &lt;/span&gt;./mysql:/var/lib/mysql:Z&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"zabbix"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MYSQL_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"zabbix"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"zabbix_pwd"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"root_pwd"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;docker.io/library/mysql:8.0
&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3 id="3-configurar-log_bin_trust_function_creators-en-mysql"&gt;3. Configurar log_bin_trust_function_creators en MySQL&lt;/h3&gt;
&lt;p&gt;Para evitar problemas con permisos de creación de funciones, habilita esta configuración en el servidor MySQL:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Darle tiempo a que MySQL esté listo&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="k"&gt;until&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;podman&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;mysql-server&lt;span class="w"&gt; &lt;/span&gt;mysqladmin&lt;span class="w"&gt; &lt;/span&gt;ping&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;root&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="s1"&gt;'root_pwd'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--silent&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Esperando a que MySQL esté listo..."&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;sleep&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Ejecutar la configuración&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;podman&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;mysql-server&lt;span class="w"&gt; &lt;/span&gt;mysql&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;root&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="s1"&gt;'root_pwd'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SET GLOBAL log_bin_trust_function_creators = 1;"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3 id="4-desplegar-el-contenedor-zabbix-server"&gt;4. Desplegar el Contenedor Zabbix Server&lt;/h3&gt;
&lt;p&gt;Iniciar el contenedor &lt;code&gt;zabbix-server-mysql&lt;/code&gt; en el pod, conectándolo a MySQL y asegurándote de que se conecte al Java Gateway:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;podman&lt;span class="w"&gt; &lt;/span&gt;run&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;--name&lt;span class="w"&gt; &lt;/span&gt;zabbix-server-mysql&lt;span class="w"&gt; &lt;/span&gt;--pod&lt;span class="o"&gt;=&lt;/span&gt;zabbix&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;DB_SERVER_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"127.0.0.1"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MYSQL_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"zabbix"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"zabbix_pwd"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"zabbix"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ZBX_JAVAGATEWAY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"127.0.0.1"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;docker.io/zabbix/zabbix-server-mysql:alpine-latest
&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3 id="5-verificar-la-creacion-de-tablas-en-la-base-de-datos"&gt;5. Verificar la Creación de Tablas en la Base de Datos&lt;/h3&gt;
&lt;p&gt;Confirmar que &lt;code&gt;zabbix-server-mysql&lt;/code&gt; crea correctamente las tablas en la base de datos:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;podman&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;mysql-server&lt;span class="w"&gt; &lt;/span&gt;mysql&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;root&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="s1"&gt;'root_pwd'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USE zabbix; SHOW TABLES;"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;h3 id="6-desplegar-el-contenedor-zabbix-java-gateway"&gt;6. Desplegar el Contenedor Zabbix Java Gateway&lt;/h3&gt;
&lt;p&gt;Iniciar el contenedor &lt;code&gt;zabbix-java-gateway&lt;/code&gt;, asegurándote de que esté en el pod &lt;code&gt;zabbix&lt;/code&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;podman&lt;span class="w"&gt; &lt;/span&gt;run&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;--name&lt;span class="w"&gt; &lt;/span&gt;zabbix-java-gateway&lt;span class="w"&gt; &lt;/span&gt;--pod&lt;span class="o"&gt;=&lt;/span&gt;zabbix&lt;span class="w"&gt; &lt;/span&gt;docker.io/zabbix/zabbix-java-gateway:alpine-latest
&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id="7-desplegar-el-contenedor-nginx-con-certificados-ssl-y-configuracion"&gt;7. Desplegar el Contenedor NGINX con Certificados SSL y Configuración&lt;/h3&gt;
&lt;p&gt;Ejecutar el contenedor de Zabbix Web NGINX MySQL (&lt;code&gt;zabbix-web-mysql-ssl&lt;/code&gt;), montando los certificados y el archivo de configuración &lt;code&gt;zabbix-ssl.conf&lt;/code&gt; correctamente:&lt;/p&gt;
&lt;p&gt;El archivo de configuración &lt;code&gt;zabbix-web-mysql-ssl&lt;/code&gt; puede ser algo así:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;server&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;listen&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8443&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ssl&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;server_name&lt;span class="w"&gt; &lt;/span&gt;_&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;ssl_certificate&lt;span class="w"&gt; &lt;/span&gt;/etc/ssl/nginx/fullchain.pem&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;ssl_certificate_key&lt;span class="w"&gt; &lt;/span&gt;/etc/ssl/nginx/privkey.pem&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;root&lt;span class="w"&gt; &lt;/span&gt;/usr/share/zabbix&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;index&lt;span class="w"&gt; &lt;/span&gt;index.php&lt;span class="w"&gt; &lt;/span&gt;index.html&lt;span class="w"&gt; &lt;/span&gt;index.htm&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;location&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;try_files&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$uri&lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;/index.php?&lt;span class="nv"&gt;$args&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;location&lt;span class="w"&gt; &lt;/span&gt;~&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;php$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;include&lt;span class="w"&gt; &lt;/span&gt;fastcgi_params&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;fastcgi_pass&lt;span class="w"&gt; &lt;/span&gt;unix:/tmp/php-fpm.sock&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;fastcgi_index&lt;span class="w"&gt; &lt;/span&gt;index.php&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;fastcgi_param&lt;span class="w"&gt; &lt;/span&gt;SCRIPT_FILENAME&lt;span class="w"&gt; &lt;/span&gt;/usr/share/zabbix&lt;span class="nv"&gt;$fastcgi_script_name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;error_log&lt;span class="w"&gt; &lt;/span&gt;/tmp/zabbix_ssl_error.log&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;access_log&lt;span class="w"&gt; &lt;/span&gt;/tmp/zabbix_ssl_access.log&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;podman&lt;span class="w"&gt; &lt;/span&gt;run&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;--name&lt;span class="w"&gt; &lt;/span&gt;zabbix-web-mysql-ssl&lt;span class="w"&gt; &lt;/span&gt;--pod&lt;span class="o"&gt;=&lt;/span&gt;zabbix&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-v&lt;span class="w"&gt; &lt;/span&gt;./certs/fullchain.pem:/etc/ssl/nginx/fullchain.pem:ro&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-v&lt;span class="w"&gt; &lt;/span&gt;./certs/privkey.pem:/etc/ssl/nginx/privkey.pem:ro&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-v&lt;span class="w"&gt; &lt;/span&gt;./zabbix-ssl.conf:/etc/nginx/http.d/zabbix-ssl.conf:ro&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ZBX_SERVER_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"127.0.0.1"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;DB_SERVER_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"127.0.0.1"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"zabbix"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MYSQL_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"zabbix"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"zabbix_pwd"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;docker.io/zabbix/zabbix-web-nginx-mysql:alpine-latest
&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id="8-verificacion-final"&gt;8. Verificación Final&lt;/h3&gt;
&lt;p&gt;Hacer una solicitud a la interfaz de Zabbix para confirmar que todo esté funcionando y que la configuración SSL esté activa:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-v&lt;span class="w"&gt;  &lt;/span&gt;https://sebelk.lab
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Deberías ver una respuesta HTTP 200 desde NGINX, indicando que Zabbix está activo y funcionando con SSL.&lt;/p&gt;
&lt;h3 id="9-instalacion-del-agente"&gt;9. Instalación del agente&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;podman&lt;span class="w"&gt; &lt;/span&gt;run&lt;span class="w"&gt; &lt;/span&gt;-d&lt;span class="w"&gt; &lt;/span&gt;--name&lt;span class="w"&gt; &lt;/span&gt;zabbix-agent&lt;span class="w"&gt; &lt;/span&gt;--pod&lt;span class="o"&gt;=&lt;/span&gt;zabbix&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ZBX_SERVER_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"127.0.0.1"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ZBX_SERVER_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"10051"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ZBX_HOSTNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ZabbixServerAgent"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;docker.io/zabbix/zabbix-agent2:alpine-latest
&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id="10-deshabilitar-variable-en-mysql"&gt;10. Deshabilitar variable en MySQL&lt;/h3&gt;
&lt;p&gt;La variable que habilitamos antes no es imprescindible, de modo que se puede desactivar:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;podman&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;mysql-server&lt;span class="w"&gt; &lt;/span&gt;mysql&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;root&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="s1"&gt;'root_pwd'&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SET GLOBAL log_bin_trust_function_creators = 0;"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id="todo-listo"&gt;Todo listo&lt;/h3&gt;
&lt;p&gt;¡Listo! Trabajo terminado 😉 &lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/zabbix-final.png"&gt;&lt;img src="https://sergiobelkin.com/images/zabbix-final.thumbnail.png" alt="Zabbix Implementado usando podman"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;¿Qué te pareció la guía? Podés usar la sección de &lt;strong&gt;Comentarios&lt;/strong&gt;.&lt;/p&gt;</description><category>contenedores</category><guid>https://sergiobelkin.com/posts/como-instalar-zabbix-7x-usando-contenedores-podman/</guid><pubDate>Sun, 10 Nov 2024 20:20:45 GMT</pubDate></item><item><title>Qué son los namespaces y que podemos hacer con ellos</title><link>https://sergiobelkin.com/posts/que-son-los-namespaces-y-que-podemos-hacer-con-ellos/</link><dc:creator>sebelk</dc:creator><description>&lt;p&gt;En el &lt;a href="https://sergiobelkin.com/posts/que-es-flatpak/"&gt;post anterior&lt;/a&gt;, exploramos qué es Flatpak, una excelente alternativa o complemento a los métodos tradicionales de instalación de programas en Linux. Flatpak utiliza una herramienta llamada &lt;strong&gt;bubblewrap&lt;/strong&gt;, que a su vez emplea la tecnología de &lt;strong&gt;namespaces&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/namespaces.webp"&gt;&lt;img src="https://sergiobelkin.com/images/namespaces.thumbnail.webp" alt="Namespaces en Linux"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Veamos con lupa lo que hay debajo de una aplicación flatpak. &lt;/p&gt;
&lt;h3 id="listado-de-procesos-de-aplicaciones-flatpak"&gt;Listado de procesos de aplicaciones flatpak&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;flatpak&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;--columns&lt;span class="o"&gt;=&lt;/span&gt;pid,child-pid,application
PID&lt;span class="w"&gt;  &lt;/span&gt;PID-hijo&lt;span class="w"&gt; &lt;/span&gt;Aplicación
&lt;span class="m"&gt;4588&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4610&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;com.github.marktext.marktext
&lt;span class="m"&gt;4629&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4639&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;com.github.marktext.marktext
&lt;span class="m"&gt;4841&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4853&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;com.spotify.Client
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/flatpak-ps.png"&gt;&lt;img src="https://sergiobelkin.com/images/flatpak-ps.thumbnail.png" alt="MarkText y Spotify (aplicaciones instaladas con flatpak)"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Este listado nos muestra que hay dos aplicaciones corriendo: MarkText y Spotify. Vamos a ver qué pasa con uno de los procesos relacionados con MarkText.&lt;/p&gt;
&lt;h3 id="el-comando-detras-de-flatpak"&gt;El comando detrás de flatpak&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;p&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;4610&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;o&lt;span class="w"&gt; &lt;/span&gt;args
COMMAND
/usr/bin/bwrap&lt;span class="w"&gt; &lt;/span&gt;--args&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;42&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="w"&gt; &lt;/span&gt;spotify
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;bwrap&lt;/strong&gt; es una herramienta para crear  sandboxes por medio de namespaces. Un namespace es un recurso del sistema que se puede aislar, pero... en lugar de abundar en tecnicismos, para comprender este concepto en la práctica, veremos algunas propiedades del proceso 4610 (MarkText):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;ls&lt;span class="w"&gt; &lt;/span&gt;-l&lt;span class="w"&gt; &lt;/span&gt;/proc/4610/ns
total&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:46&lt;span class="w"&gt; &lt;/span&gt;cgroup&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'cgroup:[4026531835]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:46&lt;span class="w"&gt; &lt;/span&gt;ipc&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'ipc:[4026531839]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt; &lt;/span&gt;mnt&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'mnt:[4026532856]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:46&lt;span class="w"&gt; &lt;/span&gt;net&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'net:[4026531840]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt; &lt;/span&gt;pid&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'pid:[4026532857]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:46&lt;span class="w"&gt; &lt;/span&gt;pid_for_children&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'pid:[4026532857]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:46&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'time:[4026531834]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:46&lt;span class="w"&gt; &lt;/span&gt;time_for_children&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'time:[4026531834]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt; &lt;/span&gt;user&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'user:[4026532858]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:46&lt;span class="w"&gt; &lt;/span&gt;uts&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'uts:[4026531838]'&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ese listado nos muestra que están los namespaces cgroup, ipc, mnt, net, pid, time, user y uts. Cada uno de ellos tiene un número que lo identifica.&lt;/p&gt;
&lt;p&gt;Podemos compararlo con otros procesos por ejemplo con el pid 1 y con el pid del shell que estamos usando:&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/namespaces.png"&gt;&lt;img src="https://sergiobelkin.com/images/namespaces.thumbnail.png" alt="Comparación de procesos y namespaces"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Podemos ver que tanto bash como systemd comparten todos los namespaces. &lt;em&gt;Sin embargo, bwrap tiene namespaces distintos para mnt, pid y user. Es decir tiene esos recursos aislados&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;El cuadro siguiente nos sirve para saber qué namespace usar de acuerdo a lo que queramos aislar:&lt;/p&gt;
&lt;style&gt;
  table {
  }
  th, td {
    padding: 10px;
    text-align: left;
  }
&lt;/style&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Para aislar&lt;/th&gt;
&lt;th&gt;Usar namespace...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Límites de recursos&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;cgroups&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Colas de mensaje, semáforos, memoria compartida&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ipc&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Lista de montajes&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;mount&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Interfaces de red, ruteo, sockets, etc.&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;net&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Números de pid&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;pid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;UID's, GID's, capabilities, etc&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;user&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Hostnames&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;uts&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Relojes/Tiempo&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;time&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;El soporte en el &lt;strong&gt;kernel&lt;/strong&gt; lo podemos verificar de la siguiente manera:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;grep&lt;span class="w"&gt; &lt;/span&gt;-E&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'CONFIG_[A-Z]+_NS=y'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/boot/config-&lt;span class="k"&gt;$(&lt;/span&gt;uname&lt;span class="w"&gt; &lt;/span&gt;-r&lt;span class="k"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;CONFIG_UTS_NS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;y
&lt;span class="nv"&gt;CONFIG_TIME_NS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;y
&lt;span class="nv"&gt;CONFIG_IPC_NS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;y
&lt;span class="nv"&gt;CONFIG_USER_NS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;y
&lt;span class="nv"&gt;CONFIG_PID_NS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;y
&lt;span class="nv"&gt;CONFIG_NET_NS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;y
&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id="crear-nuevos-namespaces-para-procesos-y-usuarios"&gt;Crear nuevos namespaces para procesos y usuarios&lt;/h3&gt;
&lt;p&gt;La herramienta &lt;strong&gt;unshare&lt;/strong&gt; nos permite experimentar y solucionar problemas en aplicaciones y servicios que usan namespaces. En el siguiente ejemplo abrimos un shell con namespaces aislados para usuarios y números de procesos:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;--mount-proc&lt;span class="w"&gt; &lt;/span&gt;--pid&lt;span class="w"&gt; &lt;/span&gt;--fork&lt;span class="w"&gt; &lt;/span&gt;--user&lt;span class="w"&gt; &lt;/span&gt;bash
❯&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;aux
&lt;span class="w"&gt;   &lt;/span&gt;USER&lt;span class="w"&gt;         &lt;/span&gt;PID&lt;span class="w"&gt; &lt;/span&gt;%CPU&lt;span class="w"&gt; &lt;/span&gt;%MEM&lt;span class="w"&gt;    &lt;/span&gt;VSZ&lt;span class="w"&gt;   &lt;/span&gt;RSS&lt;span class="w"&gt; &lt;/span&gt;TTY&lt;span class="w"&gt;      &lt;/span&gt;STAT&lt;span class="w"&gt; &lt;/span&gt;START&lt;span class="w"&gt;   &lt;/span&gt;TIME&lt;span class="w"&gt; &lt;/span&gt;COMMAND
&lt;span class="w"&gt;   &lt;/span&gt;nobody&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;.8&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;237808&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;12996&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pts/1&lt;span class="w"&gt;    &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;13&lt;/span&gt;:43&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;bash
&lt;span class="w"&gt;   &lt;/span&gt;nobody&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;104&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;230836&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;4096&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pts/1&lt;span class="w"&gt;    &lt;/span&gt;R+&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;13&lt;/span&gt;:43&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;aux
&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Aquí vemos que bash usa el PID 1 en lugar de systemd, y que el comando &lt;code&gt;ps aux&lt;/code&gt; toma el pid 2.&lt;/li&gt;
&lt;li&gt;Además, el usuario pasa a ser &lt;em&gt;nobody&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Para salir del namespace, simplemente hay que ejecutar &lt;code&gt;exit&lt;/code&gt;. Es importante asegurarse de que todos los procesos dentro del namespace hayan terminado, de lo contrario, puede ser que &lt;code&gt;exit&lt;/code&gt;  sea insuficiente para salir completamente del namespace.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="por-que-usamos-mount-proc"&gt;¿Por qué usamos --mount-proc?&lt;/h4&gt;
&lt;p&gt;Bueno... porque si no lo hacemos sucede esto:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;--mount&lt;span class="w"&gt; &lt;/span&gt;--pid&lt;span class="w"&gt; &lt;/span&gt;--fork&lt;span class="w"&gt; &lt;/span&gt;--user&lt;span class="w"&gt; &lt;/span&gt;/bin/bash
basename:&lt;span class="w"&gt; &lt;/span&gt;falta&lt;span class="w"&gt; &lt;/span&gt;un&lt;span class="w"&gt; &lt;/span&gt;operando
Pruebe&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'basename --help'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;para&lt;span class="w"&gt; &lt;/span&gt;más&lt;span class="w"&gt; &lt;/span&gt;información.
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Este mensaje aparece porque el comando &lt;code&gt;basename&lt;/code&gt; usa &lt;code&gt;readlink&lt;/code&gt; para ver hacia dónde apunta &lt;code&gt;/proc/$$/exe&lt;/code&gt;. Como el PID de la shell en el nuevo namespace es 1, intenta acceder incorrectamente al directorio &lt;code&gt;/proc&lt;/code&gt; en los namespaces del host. Linux impide este acceso para mantener el aislamiento y la seguridad, lo que resulta en ese error.&lt;/p&gt;
&lt;h4 id="particularidades-de-namespaces"&gt;Particularidades de namespaces&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;--mount-proc&lt;span class="w"&gt; &lt;/span&gt;--pid&lt;span class="w"&gt; &lt;/span&gt;--user&lt;span class="w"&gt; &lt;/span&gt;/bin/bash
unshare:&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;/proc&lt;span class="w"&gt; &lt;/span&gt;failed:&lt;span class="w"&gt; &lt;/span&gt;Operación&lt;span class="w"&gt; &lt;/span&gt;no&lt;span class="w"&gt; &lt;/span&gt;permitida
❯&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;--pid&lt;span class="w"&gt; &lt;/span&gt;--user&lt;span class="w"&gt; &lt;/span&gt;/bin/bash
bash:&lt;span class="w"&gt; &lt;/span&gt;fork:&lt;span class="w"&gt; &lt;/span&gt;No&lt;span class="w"&gt; &lt;/span&gt;se&lt;span class="w"&gt; &lt;/span&gt;pudo&lt;span class="w"&gt; &lt;/span&gt;asignar&lt;span class="w"&gt; &lt;/span&gt;memoria
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;En el primer intento, ni siquiera pudo crear los namespaces; en el segundo, aunque lo logró, muestra un mensaje críptico:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;bash: fork: No se pudo asignar memoria&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Estos errores ocurren porque &lt;code&gt;unshare&lt;/code&gt;, por defecto, ejecuta el comando indicado en el mismo proceso (similar a &lt;code&gt;exec&lt;/code&gt;), lo que resulta en:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Error de Montaje&lt;/strong&gt;: El sistema no permite montar &lt;code&gt;/proc&lt;/code&gt; porque el proceso no tiene el contexto completo de namespace de usuario y PID necesario.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error de Memoria&lt;/strong&gt;: Debido a que bash no se convierte en PID 1 ni puede acceder a otro proceso con PID 1, Linux no permite la asignación de memoria porque no hay un proceso para manejar la recolección de zombies y otras tareas esenciales.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Por lo tanto, usar &lt;code&gt;--fork&lt;/code&gt; es necesario para asegurar que el proceso tenga el contexto de namespace completo y para crear un nuevo proceso que actúe como PID 1 en el nuevo namespace.&lt;/em&gt;&lt;/p&gt;
&lt;h4 id="entrar-en-namespaces-de-una-app-de-flatpak"&gt;Entrar en namespaces de una app de flatpak&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;nsenter&lt;span class="w"&gt; &lt;/span&gt;--mount&lt;span class="w"&gt; &lt;/span&gt;--pid&lt;span class="w"&gt; &lt;/span&gt;-S&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$UID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-t&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4610&lt;/span&gt;
-bash-5.2$&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;auxwww
USER&lt;span class="w"&gt;         &lt;/span&gt;PID&lt;span class="w"&gt; &lt;/span&gt;%CPU&lt;span class="w"&gt; &lt;/span&gt;%MEM&lt;span class="w"&gt;    &lt;/span&gt;VSZ&lt;span class="w"&gt;   &lt;/span&gt;RSS&lt;span class="w"&gt; &lt;/span&gt;TTY&lt;span class="w"&gt;      &lt;/span&gt;STAT&lt;span class="w"&gt; &lt;/span&gt;START&lt;span class="w"&gt;   &lt;/span&gt;TIME&lt;span class="w"&gt; &lt;/span&gt;COMMAND
sergio&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;3764&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1288&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;/usr/bin/bwrap&lt;span class="w"&gt; &lt;/span&gt;--args&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;40&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="w"&gt; &lt;/span&gt;marktext
sergio&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.9&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.5&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;21637908&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;182648&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;     &lt;/span&gt;SLl&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:15&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext
sergio&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;5640&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1664&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;cat
sergio&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;5640&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1792&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;cat
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.1&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;16987244&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;46720&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;      &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;zygote&lt;span class="w"&gt; &lt;/span&gt;--no-zygote-sandbox
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;Z&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;zypak-sandbox&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;defunct&amp;gt;
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;15&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;3768&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1152&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;/usr/bin/bwrap&lt;span class="w"&gt; &lt;/span&gt;--args&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;42&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="w"&gt; &lt;/span&gt;/app/bin/zypak-helper&lt;span class="w"&gt; &lt;/span&gt;child&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;zygote
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.1&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;16989892&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;49152&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;      &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;zygote
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;48&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.4&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.2&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;17065152&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;72664&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;      &lt;/span&gt;Sl&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:23&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;gpu-process&lt;span class="w"&gt; &lt;/span&gt;--field-trial-handle&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;9170851604328465342&lt;/span&gt;,17458150017059513700,131072&lt;span class="w"&gt; &lt;/span&gt;--disable-features&lt;span class="o"&gt;=&lt;/span&gt;SpareRendererForSitePerProcess&lt;span class="w"&gt; &lt;/span&gt;--enable-crash-reporter&lt;span class="o"&gt;=&lt;/span&gt;7744fdfa-fe51-4b1f-adf6-daefea565c51,no_channel&lt;span class="w"&gt; &lt;/span&gt;--global-crash-keys&lt;span class="o"&gt;=&lt;/span&gt;7744fdfa-fe51-4b1f-adf6-daefea565c51,no_channel,_companyName&lt;span class="o"&gt;=&lt;/span&gt;marktext,_productName&lt;span class="o"&gt;=&lt;/span&gt;marktext,_version&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.17.1&lt;span class="w"&gt; &lt;/span&gt;--user-data-dir&lt;span class="o"&gt;=&lt;/span&gt;/home/sergio/.var/app/com.github.marktext.marktext/config/marktext&lt;span class="w"&gt; &lt;/span&gt;--gpu-preferences&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;UAAAAAAAAAAgAAAIAAAAAAAAAAAAAAAAAABgAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAA&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--use-gl&lt;span class="o"&gt;=&lt;/span&gt;swiftshader-webgl&lt;span class="w"&gt; &lt;/span&gt;--shared-files
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;53&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;16998948&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;14448&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;      &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;broker
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;63&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.1&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;17044740&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;57216&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;      &lt;/span&gt;Sl&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;utility&lt;span class="w"&gt; &lt;/span&gt;--utility-sub-type&lt;span class="o"&gt;=&lt;/span&gt;network.mojom.NetworkService&lt;span class="w"&gt; &lt;/span&gt;--field-trial-handle&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;9170851604328465342&lt;/span&gt;,17458150017059513700,131072&lt;span class="w"&gt; &lt;/span&gt;--disable-features&lt;span class="o"&gt;=&lt;/span&gt;SpareRendererForSitePerProcess&lt;span class="w"&gt; &lt;/span&gt;--lang&lt;span class="o"&gt;=&lt;/span&gt;es-419&lt;span class="w"&gt; &lt;/span&gt;--service-sandbox-type&lt;span class="o"&gt;=&lt;/span&gt;none&lt;span class="w"&gt; &lt;/span&gt;--enable-crash-reporter&lt;span class="o"&gt;=&lt;/span&gt;7744fdfa-fe51-4b1f-adf6-daefea565c51,no_channel&lt;span class="w"&gt; &lt;/span&gt;--global-crash-keys&lt;span class="o"&gt;=&lt;/span&gt;7744fdfa-fe51-4b1f-adf6-daefea565c51,no_channel,_companyName&lt;span class="o"&gt;=&lt;/span&gt;marktext,_productName&lt;span class="o"&gt;=&lt;/span&gt;marktext,_version&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.17.1&lt;span class="w"&gt; &lt;/span&gt;--user-data-dir&lt;span class="o"&gt;=&lt;/span&gt;/home/sergio/.var/app/com.github.marktext.marktext/config/marktext&lt;span class="w"&gt; &lt;/span&gt;--shared-files&lt;span class="o"&gt;=&lt;/span&gt;v8_context_snapshot_data:100
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;74&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;.2&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.6&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;25595728&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;212480&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;     &lt;/span&gt;Sl&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;:27&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;renderer&lt;span class="w"&gt; &lt;/span&gt;--enable-crash-reporter&lt;span class="o"&gt;=&lt;/span&gt;7744fdfa-fe51-4b1f-adf6-daefea565c51,no_channel&lt;span class="w"&gt; &lt;/span&gt;--global-crash-keys&lt;span class="o"&gt;=&lt;/span&gt;7744fdfa-fe51-4b1f-adf6-daefea565c51,no_channel,_companyName&lt;span class="o"&gt;=&lt;/span&gt;marktext,_productName&lt;span class="o"&gt;=&lt;/span&gt;marktext,_version&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.17.1&lt;span class="w"&gt; &lt;/span&gt;--user-data-dir&lt;span class="o"&gt;=&lt;/span&gt;/home/sergio/.var/app/com.github.marktext.marktext/config/marktext&lt;span class="w"&gt; &lt;/span&gt;--app-path&lt;span class="o"&gt;=&lt;/span&gt;/app/marktext/resources/app.asar&lt;span class="w"&gt; &lt;/span&gt;--no-sandbox&lt;span class="w"&gt; &lt;/span&gt;--no-zygote&lt;span class="w"&gt; &lt;/span&gt;--field-trial-handle&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;9170851604328465342&lt;/span&gt;,17458150017059513700,131072&lt;span class="w"&gt; &lt;/span&gt;--disable-features&lt;span class="o"&gt;=&lt;/span&gt;SpareRendererForSitePerProcess&lt;span class="w"&gt; &lt;/span&gt;--disable-gpu-compositing&lt;span class="w"&gt; &lt;/span&gt;--lang&lt;span class="o"&gt;=&lt;/span&gt;es-419&lt;span class="w"&gt; &lt;/span&gt;--num-raster-threads&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--enable-main-frame-before-activation&lt;span class="w"&gt; &lt;/span&gt;--renderer-client-id&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--no-v8-untrusted-code-mitigations&lt;span class="w"&gt; &lt;/span&gt;--shared-files&lt;span class="o"&gt;=&lt;/span&gt;v8_context_snapshot_data:100
sergio&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;144&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;7884&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;4224&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;19&lt;/span&gt;:08&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;-bash
sergio&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;145&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;11032&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;4608&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;R+&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;19&lt;/span&gt;:08&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;auxwww
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La herramienta &lt;strong&gt;nsenter&lt;/strong&gt; permite ejecutar comandos en namespaces de un proceso determinado, en este caso, el de bwrap. Como no especificamos ningún comando, corre el shell bash.&lt;/p&gt;
&lt;p&gt;Allí podemos ver el espacio de nombres aislados de números de procesos, como se ve arriba, o como mostramos a continuación, los montajes aislados:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;-bash-5.2$&lt;span class="w"&gt; &lt;/span&gt;df&lt;span class="w"&gt; &lt;/span&gt;-h&lt;span class="w"&gt;  &lt;/span&gt;
S.ficheros&lt;span class="w"&gt;     &lt;/span&gt;Tamaño&lt;span class="w"&gt; &lt;/span&gt;Usados&lt;span class="w"&gt;  &lt;/span&gt;Disp&lt;span class="w"&gt; &lt;/span&gt;Uso%&lt;span class="w"&gt; &lt;/span&gt;Montado&lt;span class="w"&gt; &lt;/span&gt;en&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;             &lt;/span&gt;16G&lt;span class="w"&gt;    &lt;/span&gt;92K&lt;span class="w"&gt;   &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/etc/timezone&lt;span class="w"&gt;  &lt;/span&gt;
/dev/sda6&lt;span class="w"&gt;        &lt;/span&gt;511G&lt;span class="w"&gt;   &lt;/span&gt;434G&lt;span class="w"&gt;   &lt;/span&gt;76G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;86&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/cs&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;             &lt;/span&gt;16G&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/usr/lib/x86_64-linux-gnu/GL&lt;span class="w"&gt;  &lt;/span&gt;
/dev/sda6&lt;span class="w"&gt;        &lt;/span&gt;511G&lt;span class="w"&gt;   &lt;/span&gt;434G&lt;span class="w"&gt;   &lt;/span&gt;76G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;86&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/home&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;,2G&lt;span class="w"&gt;    &lt;/span&gt;11M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;,2G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/run/host/monitor&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;             &lt;/span&gt;16G&lt;span class="w"&gt;    &lt;/span&gt;15M&lt;span class="w"&gt;   &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/dev&lt;span class="w"&gt;  &lt;/span&gt;
devtmpfs&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;,0M&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;,0M&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/dev/tty&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;             &lt;/span&gt;16G&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/home/sergio/.local/share/flatpak&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;             &lt;/span&gt;16G&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/home/sergio/.var/app&lt;span class="w"&gt;  &lt;/span&gt;
/dev/sda3&lt;span class="w"&gt;        &lt;/span&gt;382G&lt;span class="w"&gt;   &lt;/span&gt;100G&lt;span class="w"&gt;  &lt;/span&gt;283G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;27&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/mnt/win10&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;,3G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;,3M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;,3G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/run/media&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;             &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;,0M&lt;span class="w"&gt;   &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/tmp&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;             &lt;/span&gt;16G&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/tmp/.X11-unix&lt;span class="w"&gt;  &lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;También podemos pensar que estos recursos que se aíslan se virtualizan. Cuando hablamos de virtualización, probablemente pensemos en un disco o en una interfaz de red virtual. Pero aquí vemos, por ejemplo, que un espacio de nombres de PID's también se puede virtualizar.&lt;/p&gt;
&lt;p&gt;Y cuando más de un recurso se puede virtualizar, de ahí a crear un contenedor hay una corta distancia. De hecho, los namespaces sirve tanto para un usuario final con flatpak como en la creación de contenedores lxc (ah, sí lxc existe desde 2008, aunque ya no esté más de moda 😁) &lt;strong&gt;docker&lt;/strong&gt; o &lt;strong&gt;podman&lt;/strong&gt; para un sysadmin o un desarrollador.&lt;/p&gt;
&lt;p&gt;A continuación, veremos algunos ejemplos de cómo utilizar los namespaces en contenedores Podman. Es importante conocer el PID del contenedor en el host para estos ejemplos.&lt;/p&gt;
&lt;h4 id="ejemplo-1-ver-la-configuracion-de-red-del-contenedor-que-usa-network-mode-pasta"&gt;Ejemplo 1: Ver la configuración de red del contenedor que usa network mode pasta&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;podman&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;nsenter&lt;span class="w"&gt; &lt;/span&gt;--target&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;29420&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--net&lt;span class="w"&gt;  &lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;ip&lt;span class="w"&gt; &lt;/span&gt;a
&lt;span class="m"&gt;1&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;lo:&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;mtu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;65536&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;qdisc&lt;span class="w"&gt; &lt;/span&gt;noqueue&lt;span class="w"&gt; &lt;/span&gt;state&lt;span class="w"&gt; &lt;/span&gt;UNKNOWN&lt;span class="w"&gt; &lt;/span&gt;group&lt;span class="w"&gt; &lt;/span&gt;default&lt;span class="w"&gt; &lt;/span&gt;qlen&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;link/loopback&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:00:00:00:00:00&lt;span class="w"&gt; &lt;/span&gt;brd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:00:00:00:00:00
&lt;span class="w"&gt;    &lt;/span&gt;inet&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;127&lt;/span&gt;.0.0.1/8&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;host&lt;span class="w"&gt; &lt;/span&gt;lo
&lt;span class="w"&gt;       &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;span class="w"&gt;    &lt;/span&gt;inet6&lt;span class="w"&gt; &lt;/span&gt;::1/128&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;host&lt;span class="w"&gt; &lt;/span&gt;proto&lt;span class="w"&gt; &lt;/span&gt;kernel_lo&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;       &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;span class="m"&gt;2&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;wlp108s0:&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;mtu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;65520&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;qdisc&lt;span class="w"&gt; &lt;/span&gt;fq_codel&lt;span class="w"&gt; &lt;/span&gt;state&lt;span class="w"&gt; &lt;/span&gt;UNKNOWN&lt;span class="w"&gt; &lt;/span&gt;group&lt;span class="w"&gt; &lt;/span&gt;default&lt;span class="w"&gt; &lt;/span&gt;qlen&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;link/ether&lt;span class="w"&gt; &lt;/span&gt;ea:38:5b:0b:a8:a8&lt;span class="w"&gt; &lt;/span&gt;brd&lt;span class="w"&gt; &lt;/span&gt;ff:ff:ff:ff:ff:ff
&lt;span class="w"&gt;    &lt;/span&gt;inet&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.0.144/24&lt;span class="w"&gt; &lt;/span&gt;brd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.0.255&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;global&lt;span class="w"&gt; &lt;/span&gt;noprefixroute&lt;span class="w"&gt; &lt;/span&gt;wlp108s0
&lt;span class="w"&gt;       &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;span class="w"&gt;    &lt;/span&gt;inet6&lt;span class="w"&gt; &lt;/span&gt;fe80::e838:5bff:fe0b:a8a8/64&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;link&lt;span class="w"&gt; &lt;/span&gt;proto&lt;span class="w"&gt; &lt;/span&gt;kernel_ll&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;       &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id="ejemplo-2-ver-la-configuracion-de-red-del-contenedor-que-usa-network-mode-slirp4netns"&gt;Ejemplo 2: Ver la configuración de red del contenedor que usa network mode slirp4netns&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="w"&gt;  &lt;/span&gt;podman&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;nsenter&lt;span class="w"&gt; &lt;/span&gt;--target&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;46222&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--net&lt;span class="w"&gt;  &lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;root&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~/to_delete&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;❯&lt;span class="w"&gt; &lt;/span&gt;ip&lt;span class="w"&gt; &lt;/span&gt;a
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;lo:&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;mtu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;65536&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;qdisc&lt;span class="w"&gt; &lt;/span&gt;noqueue&lt;span class="w"&gt; &lt;/span&gt;state&lt;span class="w"&gt; &lt;/span&gt;UNKNOWN&lt;span class="w"&gt; &lt;/span&gt;group&lt;span class="w"&gt; &lt;/span&gt;default&lt;span class="w"&gt; &lt;/span&gt;qlen&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;link/loopback&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:00:00:00:00:00&lt;span class="w"&gt; &lt;/span&gt;brd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:00:00:00:00:00
&lt;span class="w"&gt;      &lt;/span&gt;inet&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;127&lt;/span&gt;.0.0.1/8&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;host&lt;span class="w"&gt; &lt;/span&gt;lo
&lt;span class="w"&gt;         &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;span class="w"&gt;      &lt;/span&gt;inet6&lt;span class="w"&gt; &lt;/span&gt;::1/128&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;host&lt;span class="w"&gt; &lt;/span&gt;proto&lt;span class="w"&gt; &lt;/span&gt;kernel_lo&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;tap0:&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;BROADCAST,UP,LOWER_UP&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;mtu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;65520&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;qdisc&lt;span class="w"&gt; &lt;/span&gt;fq_codel&lt;span class="w"&gt; &lt;/span&gt;state&lt;span class="w"&gt; &lt;/span&gt;UNKNOWN&lt;span class="w"&gt; &lt;/span&gt;group&lt;span class="w"&gt; &lt;/span&gt;default&lt;span class="w"&gt; &lt;/span&gt;qlen&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;link/ether&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;92&lt;/span&gt;:b6:67:25:13:33&lt;span class="w"&gt; &lt;/span&gt;brd&lt;span class="w"&gt; &lt;/span&gt;ff:ff:ff:ff:ff:ff
&lt;span class="w"&gt;      &lt;/span&gt;inet&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;.0.2.100/24&lt;span class="w"&gt; &lt;/span&gt;brd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;.0.2.255&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;global&lt;span class="w"&gt; &lt;/span&gt;tap0
&lt;span class="w"&gt;         &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;span class="w"&gt;      &lt;/span&gt;inet6&lt;span class="w"&gt; &lt;/span&gt;fd00::90b6:67ff:fe25:1333/64&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;global&lt;span class="w"&gt; &lt;/span&gt;dynamic&lt;span class="w"&gt; &lt;/span&gt;mngtmpaddr&lt;span class="w"&gt; &lt;/span&gt;proto&lt;span class="w"&gt; &lt;/span&gt;kernel_ra&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;86356sec&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;14356sec
&lt;span class="w"&gt;      &lt;/span&gt;inet6&lt;span class="w"&gt; &lt;/span&gt;fe80::90b6:67ff:fe25:1333/64&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;link&lt;span class="w"&gt; &lt;/span&gt;proto&lt;span class="w"&gt; &lt;/span&gt;kernel_ll&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id="ejemplo-3-probar-la-resolucion-de-nombres-usando-el-archivo-etcresolvconf-del-contenedor"&gt;Ejemplo 3: Probar la resolución de nombres usando el archivo /etc/resolv.conf del contenedor&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;container_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;podman&lt;span class="w"&gt; &lt;/span&gt;inspect&lt;span class="w"&gt; &lt;/span&gt;--format&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'{{.Id}}'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;namespace-demo&lt;span class="k"&gt;)&lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;cp&lt;span class="w"&gt; &lt;/span&gt;/run/user/1000/containers/overlay-containers/&lt;span class="nv"&gt;$container_id&lt;/span&gt;/userdata/resolv.conf&lt;span class="w"&gt; &lt;/span&gt;/tmp/container_resolv.conf&lt;span class="w"&gt;    &lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;podman&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;nsenter&lt;span class="w"&gt; &lt;/span&gt;--target&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;46222&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;--net&lt;span class="w"&gt; &lt;/span&gt;dig&lt;span class="w"&gt; &lt;/span&gt;google.com&lt;span class="w"&gt; &lt;/span&gt;@&lt;span class="k"&gt;$(&lt;/span&gt;grep&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'nameserver'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/tmp/container_resolv.conf&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;awk&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'{print $2}'&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;&amp;lt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;DiG&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;.18.26&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;&amp;lt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;google.com&lt;span class="w"&gt; &lt;/span&gt;@10.0.2.3
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;global&lt;span class="w"&gt; &lt;/span&gt;options:&lt;span class="w"&gt; &lt;/span&gt;+cmd
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Got&lt;span class="w"&gt; &lt;/span&gt;answer:
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&amp;gt;HEADER&lt;span class="s"&gt;&amp;lt;&amp;lt;- opco&lt;/span&gt;de:&lt;span class="w"&gt; &lt;/span&gt;QUERY,&lt;span class="w"&gt; &lt;/span&gt;status:&lt;span class="w"&gt; &lt;/span&gt;NOERROR,&lt;span class="w"&gt; &lt;/span&gt;id:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;25213&lt;/span&gt;
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;flags:&lt;span class="w"&gt; &lt;/span&gt;qr&lt;span class="w"&gt; &lt;/span&gt;rd&lt;span class="w"&gt; &lt;/span&gt;ra&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;QUERY:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;ANSWER:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;AUTHORITY:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;ADDITIONAL:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;

&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;OPT&lt;span class="w"&gt; &lt;/span&gt;PSEUDOSECTION:
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;EDNS:&lt;span class="w"&gt; &lt;/span&gt;version:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;flags:&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;udp:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;65494&lt;/span&gt;
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;QUESTION&lt;span class="w"&gt; &lt;/span&gt;SECTION:
&lt;span class="p"&gt;;&lt;/span&gt;google.com.&lt;span class="w"&gt;                    &lt;/span&gt;IN&lt;span class="w"&gt;      &lt;/span&gt;A

&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ANSWER&lt;span class="w"&gt; &lt;/span&gt;SECTION:
google.com.&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="m"&gt;263&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;IN&lt;span class="w"&gt;      &lt;/span&gt;A&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;142&lt;/span&gt;.251.133.78

&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Query&lt;span class="w"&gt; &lt;/span&gt;time:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;msec
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;SERVER:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;.0.2.3#53&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;.0.2.3&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;UDP&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;WHEN:&lt;span class="w"&gt; &lt;/span&gt;Thu&lt;span class="w"&gt; &lt;/span&gt;Jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;19&lt;/span&gt;:50:18&lt;span class="w"&gt; &lt;/span&gt;-03&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2024&lt;/span&gt;
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;MSG&lt;span class="w"&gt; &lt;/span&gt;SIZE&lt;span class="w"&gt;  &lt;/span&gt;rcvd:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;55&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id="ejemplo-4-ver-los-procesos-de-un-contenedor-rootless"&gt;Ejemplo 4: Ver los procesos de un contenedor rootless&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;nsenter&lt;span class="w"&gt; &lt;/span&gt;--pid&lt;span class="o"&gt;=&lt;/span&gt;/proc/&lt;span class="nv"&gt;$container_pid&lt;/span&gt;/ns/pid&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;--mount-proc
&lt;span class="o"&gt;[&lt;/span&gt;sudo&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;contraseña&lt;span class="w"&gt; &lt;/span&gt;para&lt;span class="w"&gt; &lt;/span&gt;sergio:&lt;span class="w"&gt; &lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;ps
&lt;span class="w"&gt;  &lt;/span&gt;PID&lt;span class="w"&gt; &lt;/span&gt;TTY&lt;span class="w"&gt;          &lt;/span&gt;TIME&lt;span class="w"&gt; &lt;/span&gt;CMD
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1508&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pts/6&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:00:00&lt;span class="w"&gt; &lt;/span&gt;bash
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1612&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pts/6&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:00:00&lt;span class="w"&gt; &lt;/span&gt;ps
❯&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;aux
USER&lt;span class="w"&gt;         &lt;/span&gt;PID&lt;span class="w"&gt; &lt;/span&gt;%CPU&lt;span class="w"&gt; &lt;/span&gt;%MEM&lt;span class="w"&gt;    &lt;/span&gt;VSZ&lt;span class="w"&gt;   &lt;/span&gt;RSS&lt;span class="w"&gt; &lt;/span&gt;TTY&lt;span class="w"&gt;      &lt;/span&gt;STAT&lt;span class="w"&gt; &lt;/span&gt;START&lt;span class="w"&gt;   &lt;/span&gt;TIME&lt;span class="w"&gt; &lt;/span&gt;COMMAND
sergio&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;14932&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;7168&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;Ss&lt;span class="w"&gt;   &lt;/span&gt;jul25&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;/usr/sbin/sshd&lt;span class="w"&gt; &lt;/span&gt;-D
sergio&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;14084&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;7936&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;jul25&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;sshd:&lt;span class="w"&gt; &lt;/span&gt;/usr/sbin/sshd&lt;span class="w"&gt; &lt;/span&gt;-D&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;listener&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;of&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;-100&lt;span class="w"&gt; &lt;/span&gt;startups
root&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;1508&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.5&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;231260&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;6528&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pts/6&lt;span class="w"&gt;    &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;19&lt;/span&gt;:00&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;-bash
root&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;1641&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;230836&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3968&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pts/6&lt;span class="w"&gt;    &lt;/span&gt;R+&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;19&lt;/span&gt;:00&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;aux
&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id="ejemplo-5-crear-namespaces-no-privilegiados-con-un-poco-de-ayuda"&gt;Ejemplo 5: Crear namespaces no privilegiados con un poco de ayuda&lt;/h4&gt;
&lt;p&gt;Por último, veamos como usar la herramienta rootlesskit para crear fácilmente namespaces rootless:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;rootlesskit&lt;span class="w"&gt; &lt;/span&gt;bash
❯&lt;span class="w"&gt; &lt;/span&gt;id
&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;grupos&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt;,65534&lt;span class="o"&gt;(&lt;/span&gt;nobody&lt;span class="o"&gt;)&lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;rootlesskit&lt;span class="w"&gt; &lt;/span&gt;--copy-up&lt;span class="o"&gt;=&lt;/span&gt;/etc&lt;span class="w"&gt; &lt;/span&gt;bash&lt;span class="w"&gt;  &lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;touch&lt;span class="w"&gt; &lt;/span&gt;/etc/sample
❯&lt;span class="w"&gt; &lt;/span&gt;ls&lt;span class="w"&gt; &lt;/span&gt;-l&lt;span class="w"&gt; &lt;/span&gt;/etc/sample
-rw-r--r--&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;root&lt;span class="w"&gt; &lt;/span&gt;root&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;:12&lt;span class="w"&gt; &lt;/span&gt;/etc/sample
❯&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;ls&lt;span class="w"&gt; &lt;/span&gt;-l&lt;span class="w"&gt; &lt;/span&gt;/etc/sample
ls:&lt;span class="w"&gt; &lt;/span&gt;no&lt;span class="w"&gt; &lt;/span&gt;se&lt;span class="w"&gt; &lt;/span&gt;puede&lt;span class="w"&gt; &lt;/span&gt;acceder&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'/etc/sample'&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;No&lt;span class="w"&gt; &lt;/span&gt;existe&lt;span class="w"&gt; &lt;/span&gt;el&lt;span class="w"&gt; &lt;/span&gt;fichero&lt;span class="w"&gt; &lt;/span&gt;o&lt;span class="w"&gt; &lt;/span&gt;el&lt;span class="w"&gt; &lt;/span&gt;directorio
&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id="conclusion"&gt;Conclusión&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;En este post, hemos visto que los namespaces sirven para aislar recursos con diferentes propósitos y que herramientas como &lt;code&gt;unshare&lt;/code&gt; y &lt;code&gt;nsenter&lt;/code&gt; son muy útiles para entender cómo funciona una aplicación instalada con Flatpak, pero también un contenedor podman o similar, lo cual facilita la resolución de problemas.&lt;/strong&gt;
Algunas actividades que propongo para continuar ejercitando este tema son:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instalar aplicaciones de Flatpak y observar qué sucede cuando más de un proceso está involucrado.&lt;/li&gt;
&lt;li&gt;Examinar qué ocurre con las tablas de ruteo, las listas de iptables o nftables, etc., en un nuevo namespace de red.&lt;/li&gt;
&lt;li&gt;Crear un namespace de usuario y explorar cómo este afecta la ejecución de comandos y procesos.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;¡Hasta la próxima!&lt;/p&gt;
&lt;h3 id="fuentes-y-recursos"&gt;Fuentes y Recursos&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://man7.org/linux/man-pages/man7/namespaces.7.html"&gt;&lt;strong&gt;man7.org - namespaces&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://man7.org/linux/man-pages/man1/unshare.1.html"&gt;&lt;strong&gt;man1.org - unshare&lt;/strong&gt;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://man7.org/linux/man-pages/man1/nsenter.1.html"&gt;&lt;strong&gt;man1.org - nsenter&lt;/strong&gt;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/engine/security/userns-remap/"&gt;&lt;strong&gt;Docker - Namespaces Overview&lt;/strong&gt;&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rootless-containers/rootlesskit"&gt;&lt;strong&gt;Linux-native "fake root" for implementing rootless containers&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><category>contenedores</category><guid>https://sergiobelkin.com/posts/que-son-los-namespaces-y-que-podemos-hacer-con-ellos/</guid><pubDate>Sat, 03 Aug 2024 19:29:34 GMT</pubDate></item><item><title>Gestión de Contraseñas Usando Contenedores Podman</title><link>https://sergiobelkin.com/posts/gestion-de-contrasenas-usando-contenedores-podman/</link><dc:creator>sebelk</dc:creator><description>&lt;p&gt;Podemos administrar nuestros datos personales también con estándares profesionales. En este contexto, vamos a explorar cómo llevar la gestión de contraseñas usando utilizando herramientas viejas y confiables como &lt;strong&gt;pass&lt;/strong&gt;, &lt;strong&gt;gpg&lt;/strong&gt;, &lt;strong&gt;git&lt;/strong&gt; combinada con  la potente solución de contenedores &lt;strong&gt;Podman&lt;/strong&gt;. Será una experiencia desafiante.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/rc-xyz-nft-gallery-r8VbpgMS6Uc-unsplash.jpg"&gt;&lt;img src="https://sergiobelkin.com/images/rc-xyz-nft-gallery-r8VbpgMS6Uc-unsplash.thumbnail.jpg" alt="Claves"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3 id="almacenamiento-de-contrasenas-elevado"&gt;Almacenamiento de Contraseñas Elevado&lt;/h3&gt;
&lt;p&gt;Para gestionar nuestras passwords usaremos &lt;strong&gt;pass&lt;/strong&gt;. La herramienta pass no estra cosa que un potente script de bash de algo más de 720 líneas de wrapper principalemente para gpg y git.&lt;/p&gt;
&lt;p&gt;Ahora, lo realmente interesante: configuraremos un repositorio dentro de un contenedor &lt;strong&gt;Podman&lt;/strong&gt;. Este repositorio, administrado con &lt;strong&gt;git&lt;/strong&gt;, puede ser compartido de manera segura y efectiva en todos tus dispositivos.&lt;/p&gt;
&lt;h3 id="acceso-simplificado-desde-cualquier-lugar"&gt;Acceso Simplificado desde Cualquier Lugar&lt;/h3&gt;
&lt;p&gt;La accesibilidad es clave en tu entorno profesional. Ya sea trabajando en sistemas Windows o Linux, puedes aprovechar &lt;a href="https://qtpass.org/"&gt;QtPass&lt;/a&gt;, una interfaz gráfica para &lt;strong&gt;pass&lt;/strong&gt;. Para usuarios de iPhone, &lt;strong&gt;passforios&lt;/strong&gt; es una excelente opción, mientras que los dispositivos Android pueden beneficiarse de &lt;a href="https://github.com/android-password-store/Android-Password-Store#readme"&gt;Password-Store&lt;/a&gt;, disponible en &lt;a href="https://play.google.com/store/apps/details?id=dev.msfjarvis.aps"&gt;Google Play Store&lt;/a&gt; y &lt;a href="https://f-droid.org/packages/dev.msfjarvis.aps/"&gt;F-Droid&lt;/a&gt; para mantener tus contraseñas siempre sincronizadas.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/podman-pass.png"&gt;&lt;img src="https://sergiobelkin.com/images/podman-pass.thumbnail.png" title="Hacer clic para ampliar la imagen" alt="Esquema de podman con pass"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3 id="caracteristicas-clave-para-profesionales"&gt;Características Clave para Profesionales&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Control Total:&lt;/strong&gt; Somos nosotros quienes gestionan nuestros repositorios. Los datos sensibles están en tus dispositivos, evitando intermediarios y asegurando la confidencialidad.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Portabilidad Sin Esfuerzo&lt;/strong&gt;: Se puede cambiar de dispositivos o realiza copias de seguridad con facilidad. Tu repositorio te seguirá sin problemas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Seguridad de Alto Nivel&lt;/strong&gt;:  tus credenciales seguras con estándares de confiabilidad, integridad y disponibilidad.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Compartir con Confianza&lt;/strong&gt;: Podrás compartirlo fácilmente en círculos de confianza. &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="configuracion-inicial-y-uso-avanzado"&gt;Configuración Inicial y Uso Avanzado&lt;/h3&gt;
&lt;p&gt;En esta primera fase, te guiaremos a través de la configuración de tu repositorio en un contenedor &lt;strong&gt;Podman&lt;/strong&gt; y las opciones para interactuar con él desde distintos dispositivos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;mark&gt;Nota 1:&lt;/mark&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El enfoque primordial es establecer un almacén personal de contraseñas. Además de utilizarlo en tus dispositivos, podrás extender su uso a usuarios de confianza. Aunque podría requerirse alguna asistencia técnica inicial para la configuración, las acciones esenciales son "actualizar desde el repositorio (pull)" y "enviar cambios al repositorio (push)".&lt;/p&gt;
&lt;p&gt;Esta idea es adaptable a ambientes profesionales con para grupos reducidos de usuarios en una red corporativa, donde cada miembro tiene su copia del repositorio principal. El repositorio podría estar incluso en algún contenedor que esté disponible 24x7. Esto facilita la consulta, creación, modificación y eliminación colaborativa de contraseñas, consolidando luego los cambios en un repositorio compartido.&lt;/p&gt;
&lt;p&gt;&lt;mark&gt;&lt;strong&gt;Nota 2:&lt;/strong&gt;&lt;/mark&gt;&lt;/p&gt;
&lt;p&gt;Para aprovechar plenamente esta guía, asumimos que poseés conocimientos de:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gestión de claves públicas ssh&lt;/li&gt;
&lt;li&gt;Gestión de claves gpg&lt;/li&gt;
&lt;li&gt;Uso básico de git&lt;/li&gt;
&lt;li&gt;Uso básico de &lt;strong&gt;Podman&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Conocimientos generales de Linux: bash, systemd, firewalld (iptables/nftables), etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="que-usaremos-para-lograr-todo-esto"&gt;¿Qué usaremos para lograr todo esto?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;OS: Fedora 38&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;podman&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.passwordstore.org/"&gt;pass&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se podría usar otra distribución, sin embargo es importante que cuente con una versión relativamente reciente de podman. &lt;/p&gt;
&lt;p&gt;¿Por qué usamos podman? Porque tiene una gran similitud con docker, y además, posee la capacidad de correr contenedores de manera mucho más segura y sencilla. En este caso particular, crearemos un contenedor que alojará el repositorio compartido de passwords.&lt;/p&gt;
&lt;p&gt;No será necesario crear servicios web y/o de bases de datos.&lt;/p&gt;
&lt;h4 id="instalacion-de-paquetes"&gt;Instalación de paquetes&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;dnf install -y  git pass&lt;/code&gt;&lt;/p&gt;
&lt;h4 id="inicializacion-de-repositorio-de-passwords"&gt;Inicialización de repositorio de passwords&lt;/h4&gt;
&lt;p&gt;En este ejemplo le pasamos los identificadores de las clave públicas gpg en el siguiente usamos 3 direcciones de mail correspondientes a la clave del host, la del celular y la de otra persona respectivamente.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pass init jkm@example.com fxi@example.com pyn@example.net&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pass git init&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pass generate puertablanca&lt;/code&gt;&lt;/p&gt;
&lt;h4 id="preparacion-del-container"&gt;Preparación del container&lt;/h4&gt;
&lt;p&gt;Creamos el siguiente Dockerfile&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;FROM fedora:38
RUN dnf update -y &amp;amp;&amp;amp; dnf install -y git openssh-server
RUN useradd -ms /bin/bash git
RUN mkdir /home/git/.ssh
RUN ssh-keygen -A
COPY  ssh-pks /home/git/.ssh/authorized_keys
RUN echo "git ALL=(ALL:ALL) NOPASSWD: /usr/sbin/sshd" &amp;gt;&amp;gt; /etc/sudoers &amp;amp;&amp;amp; git clone --bare /mnt/.password-store /home/git/.password-store &amp;amp;&amp;amp; chown -R git:git /home/git  &amp;amp;&amp;amp; chmod 700 /home/git/.ssh &amp;amp;&amp;amp; chmod 600 /home/git/.ssh/authorized_keys
EXPOSE 22
CMD ["sudo","/usr/sbin/sshd", "-D"]
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Esto nos permitirá crear un repositorio con las siguientes características:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Basado en Fedora 38&lt;/li&gt;
&lt;li&gt;Un usuario llamado &lt;em&gt;git&lt;/em&gt; que tendrá el único privilegio de correr el servicio ssh&lt;/li&gt;
&lt;li&gt;Obtendrá una copia del repositorio git antes creado con pass&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="crear-la-imagen-de-podman"&gt;Crear la imagen de podman&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;podman build  -v /home/sergio/.password-store:/mnt/.password-store  -t passteiner .&lt;/code&gt;&lt;/p&gt;
&lt;h4 id="crear-el-container"&gt;Crear el container&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;podman run  -d --name container-pass_git  --user git   -p 60003:22    passteiner&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/podman-pass-running.png"&gt;&lt;img src="https://sergiobelkin.com/images/podman-pass-running.thumbnail.png" alt=""&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;En este punto, ya estamos en condiciones de crear, editar, modificar nuestras passwords y subirlas al repo del contenedor de manera que esté disponible para otros dispostivos y/o usuarios. &lt;/p&gt;
&lt;p&gt;Cabe aclarar que para usar Password Store en Android hace falta instalar &lt;a href="https://github.com/open-keychain/open-keychain#readme"&gt;OpenKeychain&lt;/a&gt;. Esa aplicación nos permitirá crear un el par de clave privada + clave pública GnuPG, como así también importar la clave pública del resto de los usuarios con quien compartiremos el llavero. Tener en cuenta que es muy importante la passphrase que usemos para cifrar nuestra clave privada: debe ser fácil de memorizar y a la vez robusta. Esa misma passphrase se nos pedirá cuando necesitamos acceder a las contraseñas:&lt;/p&gt;
&lt;p&gt;Y luego con &lt;strong&gt;Password Store&lt;/strong&gt; tendremos que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ingresar los parámetros de repositorio que está en el contenedor que hemos creado, tanto la url (por ejemplo ssh://git@10.0.0.10:60003/git/,password-store) y la branch (master).&lt;/li&gt;
&lt;li&gt;Generar la clave pública ssh para autenticarse al repositorio. Esta clave tendrá que copiarse al archivo /home/git/.ssh/authorized_keys del contenedor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;podman exec container-pass_git bash -c 'echo "clave_publica_ssh" /home/git/.ssh/authorized_keys'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Si queremos que este archivo sea persistente, podríamos modiicar el Dockerfile para que use un volumen).&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clonar el repositorio del contenedor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Una vez que hemos clonado el repositorio, obtendremos el listado de passwords y el menú para operar con él:&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/photo_2023-08-18_18-14-14.jpg"&gt;&lt;img src="https://sergiobelkin.com/images/photo_2023-08-18_18-14-14.thumbnail.jpg" alt="Menú de Password Store"&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="actualizando-nuestro-repositorio"&gt;Actualizando nuestro repositorio&lt;/h3&gt;
&lt;p&gt;Hay varias configuraciones posibles, pero la que recomiendo es la siguiente:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pass git config pull.rebase false&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para bajar las actualizaciones del contenedor:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pass git pull&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para subir las propias modificaciones al contenedor:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pass git push&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="comentario-finales"&gt;Comentario finales&lt;/h3&gt;
&lt;p&gt;Al finalizar habrás conseguido que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;El contenedor se ejecuta como un usuario sin privilegios dentro del sistema.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Todo - excepto el proceso sshd - se ejecutará como un usuario sin privilegios &lt;strong&gt;aun dentro del container&lt;/strong&gt;. Salvo que explícitamente uses algo como &lt;code&gt;docker run --user root.....&lt;/code&gt; . Pero ¿por qué lo harías?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Por fuera del contenedor en realidad, mapea a nuestro propio usuario.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a class="image-reference" href='https://sergiobelkin.com/images/podman-pass-container-top.png"'&gt;&lt;img src="https://sergiobelkin.com/images/podman-pass-container-top.thumbnail.png" alt=""&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3 id="enlaces-utiles"&gt;Enlaces útiles&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.howtogeek.com/devops/how-to-use-pass-a-command-line-password-manager-for-linux-systems/"&gt;How to Use Pass, a Command-Line Password Manager for Linux Systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.devdungeon.com/content/gpg-tutorial"&gt;GPG Tutorial | DevDungeon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=zeObvF1tk8M"&gt;(135) QtPass and opensource project management The road from a 2 day project till inclusion in all distro… - YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category>contenedores</category><category>seguridad</category><guid>https://sergiobelkin.com/posts/gestion-de-contrasenas-usando-contenedores-podman/</guid><pubDate>Tue, 29 Aug 2023 22:06:14 GMT</pubDate></item><item><title>Tutorial de LXC</title><link>https://sergiobelkin.com/posts/tutorial-de-lxc/</link><dc:creator>sebelk</dc:creator><description>&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/frank-mckenna-tjX_sniNzgQ-unsplash.jpg"&gt;&lt;img src="https://sergiobelkin.com/images/frank-mckenna-tjX_sniNzgQ-unsplash.thumbnail.jpg" alt="Containers"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Photo by frank mckenna on Unsplash&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;LXC es una herramienta extraordinaria, algo intermedio entre un chroot y una máquina virtualizada completamente. Usando el mismo kernel que el sistema anfitrión podemos tener sistemas operativos invitados en el propio filesystem. Es decir, cada SO invitado en un directorio. Pero la documentación y la interacción de los distintos componentes puede tornar algo &lt;em&gt;tricky&lt;/em&gt; el proceso. Cansado de lidiar con documentación desperdigada por aquí y por allá decidí crear mi propio tutorial. Intentando en lo posible ser distro-agnóstico.&lt;/p&gt;
&lt;p&gt;Aquí está:&lt;/p&gt;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/lkcu8o8gus8" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;¡Espero que lo disfruten!&lt;/p&gt;</description><category>contenedores</category><guid>https://sergiobelkin.com/posts/tutorial-de-lxc/</guid><pubDate>Mon, 15 Jun 2020 00:59:38 GMT</pubDate></item><item><title>Usando containers con systemd</title><link>https://sergiobelkin.com/posts/usando-containers-con-systemd/</link><dc:creator>sebelk</dc:creator><description>&lt;p&gt;Una funcionalidad tal vez poco conocida de systemd es la capacidad de correr containers sin necesidad de lxc o docker. Debajo describiremos brevemente dos de sus componentes.&lt;/p&gt;
&lt;h3 id="que-es-systemd-nspawn"&gt;¿Qué es systemd-nspawn?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Un container de espacios de nombres liviano para comandos o sistemas operativos&lt;/li&gt;
&lt;li&gt;Virtualiza&lt;ul&gt;
&lt;li&gt;La jerarquía del sistema de archivos&lt;/li&gt;
&lt;li&gt;El árbol de procesos&lt;/li&gt;
&lt;li&gt;Subsistemas de IPC&lt;/li&gt;
&lt;li&gt;El nombre del host y del dominio&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;No se puede desde el container:&lt;ul&gt;
&lt;li&gt;Modificar las interfaces de red del host&lt;/li&gt;
&lt;li&gt;Cambiar el reloj del del sistema&lt;/li&gt;
&lt;li&gt;Crear archivos de dispositivos&lt;/li&gt;
&lt;li&gt;No se puede reiniciar el host&lt;/li&gt;
&lt;li&gt;No se pueden cargar módulos del kernel del host&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Para crear containers se usa:&lt;ul&gt;
&lt;li&gt;dnf&lt;/li&gt;
&lt;li&gt;debootstrap&lt;/li&gt;
&lt;li&gt;pacman&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="que-es-systemd-machined"&gt;¿Qué es systemd-machined?&lt;/h3&gt;
&lt;p&gt;Es un servicio que mantiene un seguimiento de las máquinas virtuales y containers y de los procesos que les pertenecen.&lt;/p&gt;
&lt;h3 id="como-crear-un-container-debian"&gt;Como crear un container Debian&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo debootstrap --arch=amd64 stretch /var/lib/machines/stretch-2&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="como-listar-images"&gt;Como listar images&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;# machinectl list-images&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference" href="https://sergiobelkin.com/images/20190330163822618_1354390153.png" alt="Listar Imágenes"&gt;&lt;img src="https://sergiobelkin.com/images/20190330163822618_1354390153.thumbnail.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="como-setear-la-password-de-root-en-un-container"&gt;Como setear la password de root en un container&lt;/h3&gt;
&lt;p&gt;Para setear la password de root ingresamos el siguiente comando:
&lt;code&gt;# systemd-nspawn -UD /var/lib/machines/stretch-2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La opción &lt;code&gt;-U&lt;/code&gt; hace que se active el espacio de nombres de usuario. Se selecciona números de UID y GID al azar como dueño del directorio raíz del container y de ser necesario se realizan los ajustes de permisos y ACLs necesarios.&lt;/p&gt;
&lt;h3 id="como-preparar-el-container"&gt;Como preparar el container&lt;/h3&gt;
&lt;p&gt;Para poder establecer la comunicación entre el host y el container es necesario instalar en este último el paquete systemd-container, de manera que ejecutamos en el mismo:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# apt-get update &amp;amp;&amp;amp; apt-get install systemd-container&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Luego salimos con Ctrl-D&lt;/p&gt;
&lt;h3 id="como-arrancar-un-container"&gt;Como arrancar un container&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;# machinectl start stretch-2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="reference" href="https://sergiobelkin.com/images/20190330163822618_1354390153.png" alt="Arracando y monitoreando un container"&gt;&lt;img src="https://sergiobelkin.com/images/20190330163822618_1354390153.thumbnail.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="como-loguearse-al-container"&gt;Como loguearse al container&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;# systemd-run --machine stretch-2 --pty /bin/login&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Otra manera posible es:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# machinectl login stretch-2&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="como-configurar-la-red-en-el-container"&gt;Como configurar la red en el container&lt;/h3&gt;
&lt;p&gt;Hay varias maneras de configurar la red en el container, una manera es aprovecharse de una opción que utiliza systemd:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference" href="https://sergiobelkin.com/images/20190330201527297_376939938.png" alt="El proceso del container"&gt;&lt;img src="https://sergiobelkin.com/images/20190330201527297_376939938.thumbnail.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;En resumen&lt;/strong&gt;, &lt;code&gt;--network-veth&lt;/code&gt; :
- Crea un enlace virtual entre el host y el container.
- La interfaz del host se llamará ve-MACHINE_NAME. Donde &lt;em&gt;MACHINE_NAME&lt;/em&gt; será el nombre del container.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference" href="https://sergiobelkin.com/images/20190330203223448_1348206896.png" alt="Interfaz de red del host"&gt;&lt;img src="https://sergiobelkin.com/images/20190330203223448_1348206896.thumbnail.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La interfaz del container se llamará host0.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a class="reference" href="https://sergiobelkin.com/images/20190330203404367_294765593.png" alt="Interfaz del red del container"&gt;&lt;img src="https://sergiobelkin.com/images/20190330203404367_294765593.thumbnail.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tras activar las dos interfaces y darle direcciones IP apropiadas, el host y el container podrán comunicarse por red.&lt;/p&gt;
&lt;p&gt;El problema con esta configuración es que el container no tiene manera de acceder al mundo exterior, más allá del host. Ni siquiera configurando al host como default gateway. La manera de solucionarlo es sencilla: arrancando tanto en host como en container el servicio systemd-networkd &lt;del&gt;y luego lanzando el cliente dhcp en el container&lt;/del&gt;.&lt;/p&gt;
&lt;p&gt;Aquí vemos la configuración asignada al container:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference" href="https://sergiobelkin.com/images/20190330214423420_435886515.png" alt="Configuración asignada mediante systemd-networkd"&gt;&lt;img src="https://sergiobelkin.com/images/20190330214423420_435886515.thumbnail.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Aun así, tuve que configurar el archivo &lt;code&gt;/etc/resolv.conf&lt;/code&gt; a mano.&lt;/p&gt;
&lt;h3 id="como-ver-el-estado-de-un-container"&gt;Como ver el estado de un container&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;# machinectl status stretch-2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Otra opción es:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# systemctl status systemd-nspawn@stretch-2.service&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="conclusion"&gt;Conclusión&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Teniendo en cuento que la mayoría de las distribuciones actuales más utilizadas usan systemd, es útil contar con un gestor de containers directamente integrado. Seguramente no reemplaza a otras soluciones más sofisticadas, pero para hacer demostraciones, debugging y testing es una excelente opción.&lt;/strong&gt;&lt;/p&gt;</description><category>contenedores</category><category>reflexion</category><guid>https://sergiobelkin.com/posts/usando-containers-con-systemd/</guid><pubDate>Tue, 02 Apr 2019 16:02:23 GMT</pubDate></item></channel></rss>