← Arquitectura Cliente-Servidor

Clase 03

Mtro. Carlos Alberto Román Zamitiz · 1 sep 2026 · Tema 1 — Demo del bit SetUID paso a paso en Codespaces, bits especiales (SetGID / sticky), /etc/shadow, errno y códigos de error, y la red de la Facultad de Ingeniería (subredes e IPs de la UNAM).

Clase 3 — Codespaces y ajuste de la Tarea 2

Contenedores en Codespaces: si sales del navegador sin destruir el contenedor, queda pausado pero vivo y sigue consumiendo la cuota gratis. Puedes tener varios (uno por materia); se pausan al salir y se retoman.

# iniciar un Codespace:
1. botón verde "Code" en el repo
2. pestaña "Codespaces"   (solo aparece si estás logueado en GitHub)
3. "Create codespace on main"
4. si pregunta por seguridad -> "Confiar y continuar"
# abre VS Code en el navegador; terminal abajo; se puede dividir (split terminal)

Tarea 2 ajustada: fdisk no viene en el contenedor de Codespaces.

get = leer / obtener; set = escribir / establecer. C y Python no son estrictos con el nombre del archivo (a diferencia de Java): en C todo se estructura desde main.

Clase 3 — Demo del bit SetUID en Codespaces, paso a paso
# en ambas terminales:
whoami                       # -> codespace   (usuario NO privilegiado por defecto)

gcc programa02_ids.c -o programa02_ids
# al autocompletar con TAB, QUITAR el .c del -o para no sobrescribir el fuente
./programa02_ids            # real == efectivo == 1000  (lo corre su propio dueño)

# --- terminal izquierda: hacerse root ---
sudo su                     # whoami -> root
                            # con root: rm -rf /  te vuela todo -> destruir y recrear el Codespace
cat /etc/passwd             # metadatos de usuarios; codespace tiene ID 1000 (uid gid = 1000 1000)
cat /etc/shadow             # en algunas distros root (ID SIEMPRE 0) no está en /etc/passwd
                            # sino "en las sombras" en /etc/shadow, junto a demonios como sys
pwd                         # ruta absoluta actual  (/workspaces/arquitectura-cliente-servidor)

chown root:root programa02_ids     # change owner  usuario:grupo archivo
ls -l programa02_ids               # ahora pertenece a  root root  (antes codespace codespace)

chmod 700 programa02_ids           # solo el dueño (root) tiene rwx; grupo y otros = 0
# --- terminal derecha (usuario codespace, cae en "otros") ---
./programa02_ids                   # -> "Permiso denegado"

# --- terminal izquierda (root): activar SetUID ---
chmod 4511 programa02_ids          # 4 = SetUID en la terna del USUARIO
ls -l programa02_ids               # la 'x' del usuario se vuelve 's'/'S'; nombre en rojo (si hay color)

# --- terminal derecha ---
./programa02_ids                   # AHORA SÍ corre:
                                   #   Real     = 1000  (codespace, quien lo lanzó)
                                   #   Efectivo = 0     (root, dueño del archivo)

Ciclo de vida: el cambio de identidad es temporal — solo mientras el proceso vive en memoria. Antes de ejecutar y una vez que termina, el usuario sigue siendo el 1000.

Clase 3 — Bits especiales (Q&A): SetUID / SetGID / sticky

El 4.º dígito de chmod:

4 = SetUID  (usuario)
2 = SetGID  (grupo: cambia grupo real y efectivo)
6 = 4+2     (ambos)
1 = sticky bit   ej. chmod 1511 -> sin error; en la terna de "otros" aparece una 'T';
                 el archivo se ve en verde/dorado

No hay funciones "get others ID" en C. Solo existen las 4 estándar: getuid() / geteuid() (usuario) y getgid() / getegid() (grupo). Por eso no se puede demostrar dinámicamente el efecto del 1 (otros). Tarea de investigación que dejó el profe para sí mismo: el comportamiento exacto de la T (sticky) en los SO modernos.

Clase 3 — Gestión de errores en Linux: errno

programa03_codigos_sistema.c: bucle for de i = 0 (éxito) a 150. Aunque el estándar dice 131, se puede iterar más sin riesgo; los índices sobrantes imprimen Unknown error. En la distro del contenedor la tabla real llega hasta el código 133. Salida: índice 0Success; índice 2No such file or directory.

Clase 3 — Red de la Facultad de Ingeniería e IPs de la UNAM

Teoría general de procesos, ejemplos en C y los programas del profesor están en el Tema 1.