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).
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.
fdisk): solo quien tenga un Linux local propio.getuid / geteuid bajo el bit SetUID.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.
# 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.
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.
errno (siempre en minúsculas): variable global que el sistema establece automáticamente cuando un programa en Linux tiene una condición de error. No se declara ni se inicializa; la provee el entorno de Linux.E; quitando la E da pista del error:
ENOENT (No ENTry) → código 2, "No such file or directory" (error de dedo en rutas o borrado accidental).EPERM (Operation Not Permitted) → falta de privilegios.EIO (Input/Output) → fallo físico o lógico de E/S.0 = éxito (success), estandarizado. Cualquier entero ≠ 0 se interpreta como error. Por eso int main termina con return 0; — le devuelve 0 al proceso padre.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 0 → Success; índice 2 → No such file or directory.
132.247.x.x y 132.248.x.x = direccionamiento público global de la UNAM.59 → infraestructura de la Facultad de Ingeniería.profesores.fi.unam.mx (subdominio .fp.).Teoría general de procesos, ejemplos en C y los programas del profesor están en el Tema 1.