De qué va. Vas a construir un escenario de empresa con 5 usuarios y 3 grupos en ambos sistemas, configurar políticas de contraseña, gestionar sudo, y resolver un caso real de «se ha ido el técnico de TI y nadie recuerda la contraseña de admin».
Por qué importa. Casi cualquier auditoría de seguridad mira primero «quién puede entrar y como qué». Si lo gestionas bien, ya tienes 80% del trabajo hecho.
1 Crear usuarios en Windows (GUI + CLI)
Por interfaz gráfica
- Win+I → Cuentas → Otros usuarios → Agregar cuenta.
- Sin cuenta Microsoft. Crea: tecnico1 con contraseña Pwd2026.
- Tipo de cuenta: Estándar.
Por línea de comandos (más rápido)
Abre CMD como administrador:
net user tecnico2 Pwd2026. /add /fullname:"Técnico 2" /comment:"Soporte de turno" net user tecnico3 Pwd2026. /add /fullname:"Técnico 3" net user tecnico4 Pwd2026. /add /fullname:"Técnico 4" net user direccion DirPwd2026. /add /fullname:"Dirección" REM Listar todos los usuarios net user REM Ver detalles de uno net user tecnico2
PowerShell (versión moderna)
New-LocalUser -Name "tecnico5" -Password (ConvertTo-SecureString "Pwd2026." -AsPlainText -Force) -FullName "Técnico 5" -Description "Soporte" Get-LocalUser Get-LocalUser tecnico5 | Format-List
Subir uno a administrador
net localgroup Administradores direccion /add REM (En Win en inglés: "Administrators") net localgroup Administradores Get-LocalGroupMember -Group Administradores
2 Grupos personalizados y permisos
Crearás 3 grupos: Soporte, Direccion, RecursosHumanos.
net localgroup Soporte /add /comment:"Equipo de soporte técnico" net localgroup Direccion /add /comment:"Equipo directivo" net localgroup RecursosHumanos /add /comment:"Departamento RR.HH." REM Asignar usuarios net localgroup Soporte tecnico1 /add net localgroup Soporte tecnico2 /add net localgroup Soporte tecnico3 /add net localgroup Soporte tecnico4 /add net localgroup Soporte tecnico5 /add net localgroup Direccion direccion /add REM Verificar net localgroup Soporte net localgroup Direccion net localgroup RecursosHumanos
Carpeta departamental con permisos por grupo
mkdir C:\Departamentos mkdir C:\Departamentos\Soporte mkdir C:\Departamentos\Direccion mkdir C:\Departamentos\RRHH REM Romper herencia y asignar permisos por grupo icacls C:\Departamentos\Soporte /inheritance:r icacls C:\Departamentos\Soporte /grant Administradores:F SYSTEM:F Soporte:M icacls C:\Departamentos\Direccion /inheritance:r icacls C:\Departamentos\Direccion /grant Administradores:F SYSTEM:F Direccion:F icacls C:\Departamentos\RRHH /inheritance:r icacls C:\Departamentos\RRHH /grant Administradores:F SYSTEM:F RecursosHumanos:M REM Verifica icacls C:\Departamentos\Soporte
- Cierra sesión, entra como tecnico1 / Pwd2026.
- Intenta entrar en C:\Departamentos\Soporte y crear un archivo. ¿Funciona?
- Intenta entrar en C:\Departamentos\Direccion. ¿Qué pasa?
- Vuelve a admin.
| Carpeta | Entrar | Crear archivo |
|---|---|---|
| Soporte | ||
| Direccion | ||
| RRHH |
3 Directivas de contraseña
Solo en Windows Pro/Enterprise. Home no tiene secpol.msc. Si tienes Home, usa net accounts que sí funciona.
secpol.msc · GUI
- Ejecuta secpol.msc (Win+R).
- Directivas de cuenta → Directiva de contraseñas.
- Configura:
- Longitud mínima: 10 caracteres
- Complejidad: Habilitada
- Vigencia máxima: 90 días
- Vigencia mínima: 1 día
- Historial: 5 contraseñas recordadas
- Directivas de cuenta → Directiva de bloqueo de cuenta:
- Umbral: 5 intentos fallidos
- Duración: 30 minutos
- Restablecimiento: 30 minutos
net accounts · equivalente CLI
net accounts /minpwlen:10 /maxpwage:90 /minpwage:1 /uniquepw:5 net accounts /lockoutthreshold:5 /lockoutduration:30 /lockoutwindow:30 net accounts REM ver el estado actual
- Intenta cambiar la contraseña de tecnico1 a 1234. ¿Qué pasa?
- Intenta una contraseña sin mayúsculas: solominus2026. ¿Pasa?
- Cierra sesión, entra como tecnico1 con contraseña incorrecta 5 veces. ¿Te bloquea?
- Vuelve a admin, abre net user tecnico1 y mira el estado. Desbloquéalo si hace falta: net user tecnico1 /active:yes.
Caducidad y «forzar cambio»
REM forzar cambio en el próximo login net user tecnico1 /logonpasswordchg:yes REM caducidad concreta wmic useraccount where name='tecnico1' set PasswordExpires=TRUE
4 Usuarios en Linux: passwd, shadow, group
for u in tecnico1 tecnico2 tecnico3 tecnico4 tecnico5; do
sudo adduser --gecos "Tecnico,,," --disabled-password $u
echo "$u:Pwd2026." | sudo chpasswd
done
sudo adduser --gecos "Direccion,,," --disabled-password direccion
echo "direccion:DirPwd2026." | sudo chpasswd
# Verificar
getent passwd | tail -10
cat /etc/passwd | tail -10
Diseccionar /etc/passwd y /etc/shadow
grep tecnico1 /etc/passwd
Verás algo como:
tecnico1:x:1003:1003:Tecnico,,,:/home/tecnico1:/bin/bash │ │ │ │ │ │ │ │ │ │ │ │ │ └── shell de login │ │ │ │ │ └── carpeta home │ │ │ │ └── GECOS (info descriptiva) │ │ │ └── GID primario │ │ └── UID │ └── la 'x' significa que la contraseña real está en /etc/shadow └── nombre de usuario
sudo grep tecnico1 /etc/shadow
Formato:
tecnico1:$y$j9T$...HASH...:19850:0:99999:7::: │ │ │ │ │ │ │ │ │ │ │ └── días de aviso antes de caducar │ │ │ │ └── máximo días entre cambios │ │ │ └── mínimo días entre cambios │ │ └── último cambio (días desde 1/1/1970) │ └── hash de la contraseña └── usuario
Caducidad y políticas con chage
sudo chage -l tecnico1 # ver política actual # Forzar cambio en próximo login sudo chage -d 0 tecnico1 # Caducidad cada 90 días, aviso a 7 días sudo chage -M 90 -W 7 tecnico1 # Caducar cuenta el 31/12/2026 sudo chage -E 2026-12-31 tecnico1 sudo chage -l tecnico1
Políticas en /etc/login.defs y PAM
sudo grep -E "^PASS_" /etc/login.defs # PASS_MAX_DAYS, PASS_MIN_DAYS, PASS_WARN_AGE # Para complejidad: PAM module pwquality sudo apt install -y libpam-pwquality sudo grep pam_pwquality /etc/pam.d/common-password
5 Grupos y permisos compartidos (Linux)
sudo groupadd soporte sudo groupadd departamento sudo groupadd rrhh sudo usermod -aG soporte tecnico1 sudo usermod -aG soporte tecnico2 sudo usermod -aG soporte tecnico3 sudo usermod -aG soporte tecnico4 sudo usermod -aG soporte tecnico5 sudo usermod -aG departamento direccion # Importante: la -a hace ADD. Sin -a, BORRARÍA los grupos anteriores. # Verificar groups tecnico1 getent group soporte
Carpeta compartida con SGID
Aquí viene un detalle importante de Linux: cuando un usuario crea un archivo, el grupo del archivo es el grupo principal del usuario. Por ejemplo, si tecnico1 crea un archivo, el grupo será «tecnico1» (no «soporte»). Eso rompe la colaboración: aunque todos los técnicos estén en el grupo «soporte», cada archivo nuevo pertenece a un grupo personal distinto y los demás no pueden modificarlo.
La solución es el bit SGID (Set Group ID) en la carpeta: cuando una carpeta tiene SGID, los archivos que se creen dentro heredan el grupo de la carpeta en lugar del usuario que los crea. Así todos los archivos de la carpeta «soporte» pertenecen al grupo «soporte», independientemente de quién los cree.
# 1) Crear la carpeta compartida sudo mkdir -p /srv/departamentos/soporte # 2) Asignar el grupo "soporte" a la carpeta # chown :GRUPO ruta = cambiar solo el grupo (el "user:" se omite) sudo chown :soporte /srv/departamentos/soporte # 3) Permisos: 2770 # El 2 inicial es el bit SGID. # 7 (dueño)=rwx, 7 (grupo)=rwx, 0 (otros)=nada sudo chmod 2770 /srv/departamentos/soporte # Comprobar: en ls -ld debe aparecer "drwxrws---" # La "s" minúscula en lugar de la "x" del grupo = SGID activo ls -ld /srv/departamentos/soporte # 4) Probar: que cada técnico cree un archivo # sudo -u USUARIO COMANDO ejecuta COMANDO como ese USUARIO sudo -u tecnico1 touch /srv/departamentos/soporte/notas_t1.txt sudo -u tecnico2 touch /srv/departamentos/soporte/notas_t2.txt # Mira los archivos: el grupo debería ser "soporte" para los dos, # NO "tecnico1" ni "tecnico2" ls -la /srv/departamentos/soporte/
6 sudo y /etc/sudoers
sudo permite ejecutar un comando con privilegios de root. ¿Quién puede usar sudo? Lo define /etc/sudoers.
Forma 1 · Añadir al grupo sudo. Es la habitual. Cualquiera de ese grupo puede ejecutar cualquier comando como root con su propia contraseña.
sudo usermod -aG sudo tecnico1
Forma 2 · Una regla individual en sudoers. Editas el archivo y añades una línea solo para ese usuario.
sudo visudo
Te abre /etc/sudoers en el editor por defecto (nano). Baja al final del archivo y añade exactamente esta línea:
tecnico1 ALL=(ALL:ALL) ALL
Significado: el usuario tecnico1 puede ejecutar todos los comandos (último ALL) como cualquier usuario (ALL:ALL) desde cualquier máquina (primer ALL). Guarda con Ctrl+O, Enter, Ctrl+X. visudo valida la sintaxis antes de guardar; si te equivocas, te avisa y te deja corregir.
Forma 3 · Regla limitada (lo más seguro). En lugar de dar sudo total, solo permitir comandos concretos. Misma técnica con visudo, pero añade una línea como esta:
tecnico2 ALL=(ALL) NOPASSWD: /usr/bin/apt update, /usr/bin/apt upgrade
Significado: tecnico2 puede ejecutar SOLO «apt update» y «apt upgrade» como root, y además sin contraseña (NOPASSWD). Para cualquier otra cosa, sudo le dirá que no. Es el principio de mínimo privilegio.
su tecnico1
sudo apt update # debería pedirle SU contraseña, no la de root
exit
Diferencia entre su, sudo, sudo -i, sudo su
| Comando | Qué hace |
|---|---|
| su | Cambia a root (necesita contraseña de root). En Ubuntu por defecto está deshabilitado. |
| su - tecnico1 | Cambia a tecnico1 (contraseña de tecnico1) con su entorno completo. |
| sudo cmd | Ejecuta solo «cmd» como root, con TU contraseña. |
| sudo -i | Te da un shell de root completo. |
| sudo su - | Equivalente a sudo -i, más viejo. |
Auditoría de sudo
sudo grep sudo /var/log/auth.log | tail -20
Cada uso de sudo queda registrado. Es la primera parada en una investigación de seguridad.
7 Caso real · Reset de admin perdido
Linux · Modo single user / chroot
- Reinicia, mantén Mayús durante el arranque para ver GRUB.
- Selecciona la entrada habitual, pulsa e (edit).
- Localiza la línea que empieza por linux y al final añade init=/bin/bash.
- Ctrl+X o F10 para arrancar.
- Tendrás shell de root sin contraseña:
mount -o remount,rw /
passwd usuario_admin
# Nueva contraseña
sync; reboot -f
Windows · Reset desde un USB de instalación
- Arranca desde un USB de instalación de Windows 10/11.
- «Reparar el equipo» → Solucionar problemas → Símbolo del sistema.
- El truco clásico es sustituir sethc.exe (sticky keys) o utilman.exe por cmd.exe:
copy c:\windows\system32\cmd.exe c:\windows\system32\utilman.exe # Reiniciar normalmente # En la pantalla de login, pulsa el icono de accesibilidad: abre CMD como SYSTEM # Desde ahí: net user usuario_admin NuevaPwd2026.
Esto demuestra que el cifrado de disco (BitLocker) es imprescindible: sin él, cualquiera con acceso físico al disco puede entrar.