Windows, tercera parte
PowerShell avanzado
Administración del sistema
Seguridad y permisos
Automatización
WSL y desarrollo
Todo mezclado con ejercicios prácticos
Vamos a ir bloque por bloque, con ejercicios reales, como si estuviéramos montando tu “caja de herramientas” de Windows.
Empezamos por lo lógico: PowerShell base (pero ya con mentalidad avanzada). Cuando dominemos esto, pasamos al siguiente bloque.
1️⃣ Primer bloque: PowerShell como usuario avanzado
Objetivo: que te sientas tan cómodo en PowerShell como en Bash.
Ejercicio 1: abrir PowerShell y entender dónde estás
- En Windows, abre PowerShell (no ISE, no Terminal de Windows de momento).
- Ejecuta:powershell
$PSVersionTableTarea: dime qué versión de PowerShell tienes (PSVersion). - Ahora mira tu ruta actual:powershell
Get-LocationTarea: comprueba si estás en algo tipoC:\Users\david.
Ejercicio 2: moverte como en Linux, pero con PowerShell
- Lista archivos:powershell
Get-ChildItem - Entra en tu Escritorio:powershell
Set-Location Desktop Get-ChildItem - Crea una carpeta de pruebas:powershell
New-Item -ItemType Directory -Name "ps-tests" - Entra en ella:powershell
Set-Location ps-tests
Tarea: crea dentro un archivo vacío llamado hola.txt:
powershell
New-Item -ItemType File -Name "hola.txt"
Ejercicio 3: entender que todo son objetos
- Ejecuta:powershell
Get-ChildItem - Ahora:powershell
Get-ChildItem | Get-MemberVerás que cada elemento tiene propiedades (Name,Length,CreationTime, etc.). - Saca solo los nombres:powershell
Get-ChildItem | Select-Object Name - Saca nombre y tamaño:powershell
Get-ChildItem | Select-Object Name, Length
Tarea: muestra solo los archivos de la carpeta actual ordenados por tamaño descendente:
powershell
Get-ChildItem | Sort-Object Length -Descending
Ejercicio 4: procesos al estilo “ps aux”, pero bien
- Lista procesos:powershell
Get-Process - Filtra por nombre:powershell
Get-Process | Where-Object { $_.ProcessName -like "*ssh*" } - Muestra solo nombre e ID:powershell
Get-Process | Select-Object ProcessName, Id
Tarea: mata un proceso concreto (elige algo inofensivo, tipo notepad):
powershell
Stop-Process -Name notepad
Ejercicio 5: red básica
- Haz un “ping” a Google:powershell
Test-Connection google.com -Count 4 - Mira tus IPs:powershell
Get-NetIPAddress
Tarea: filtra solo las IPv4:
powershell
Get-NetIPAddress | Where-Object { $_.AddressFamily -eq "IPv4" }
2️⃣ Mini reto del bloque
En tu carpeta ps-tests, haz esto:
- Crea 5 archivos de texto:
a.txt,b.txt,c.txt,d.txt,e.txt. - Escribe dentro de cada uno una línea distinta usando PowerShell:powershell
"Soy el archivo A" | Set-Content a.txt - Lista los archivos mostrando: nombre, tamaño y fecha de creación, ordenados por fecha.Pista:powershell
Get-ChildItem | Select-Object Name, Length, CreationTime | Sort-Object CreationTime
Cuando termines este bloque, cuéntame:
- La versión de PowerShell que tienes
- Si te han salido bien los ejercicios (y si alguno te ha dado guerra)
Y pasamos al siguiente bloque: PowerShell como lenguaje de scripting de verdad (funciones, scripts .ps1, parámetros, errores, etc.).
Entramos en el segundo bloque, y aquí es donde PowerShell empieza a ponerse realmente interesante: PowerShell como lenguaje de scripting real. Vamos a trabajar con:
- Scripts
.ps1 - Parámetros
- Funciones
- Manejo de errores
- Pipelines avanzados
- Ejercicios prácticos que te convierten en power‑user
Todo con ejemplos que puedes ejecutar en tu VM ahora mismo.
🟦 BLOQUE 2 — PowerShell como lenguaje de scripting
🟩 1. Crear tu primer script .ps1
Vamos a crear un script que liste los procesos y los guarde en un archivo.
📌 Ejercicio 1
En tu Escritorio:
powershell
Set-Location $HOME\Desktop
New-Item -ItemType File -Name "listar-procesos.ps1"
Ahora edítalo con:
powershell
notepad listar-procesos.ps1
Pega dentro:
powershell
# Script: listar-procesos.ps1
# Lista procesos y los guarda en un archivo
$procesos = Get-Process
$procesos | Out-File "procesos.txt"
Write-Output "Procesos guardados en procesos.txt"
Guarda y ejecuta:
powershell
.\listar-procesos.ps1
Resultado esperado: aparece un archivo procesos.txt con la lista de procesos.
🟩 2. Scripts con parámetros (como funciones en Bash)
Vamos a crear un script que reciba un nombre de proceso y lo mate.
📌 Ejercicio 2
Crea:
powershell
New-Item -ItemType File -Name "matar.ps1"
notepad matar.ps1
Pega:
powershell
param(
[string]$Nombre
)
if (-not $Nombre) {
Write-Output "Debes indicar un nombre de proceso."
exit
}
$proceso = Get-Process -Name $Nombre -ErrorAction SilentlyContinue
if ($proceso) {
Stop-Process -Name $Nombre
Write-Output "Proceso '$Nombre' detenido."
} else {
Write-Output "No existe un proceso llamado '$Nombre'."
}
Ejemplo de uso:
powershell
.\matar.ps1 -Nombre notepad
🟩 3. Funciones dentro de PowerShell
Vamos a crear una función que busque archivos por extensión.
📌 Ejercicio 3
En PowerShell:
powershell
function Buscar-Extension {
param(
[string]$Extension
)
Get-ChildItem -Recurse -Filter "*.$Extension" | Select-Object FullName, Length
}
Ejemplo:
powershell
Buscar-Extension -Extension txt
🟩 4. Manejo de errores (try/catch)
Windows falla más que Linux, así que esto es vital.
📌 Ejercicio 4
Crea un script:
powershell
New-Item -ItemType File -Name "errores.ps1"
notepad errores.ps1
Pega:
powershell
try {
Get-Process -Name "proceso_que_no_existe" -ErrorAction Stop
}
catch {
Write-Output "Error detectado: $($_.Exception.Message)"
}
Ejecuta:
powershell
.\errores.ps1
🟩 5. Pipelines avanzados (objetos, no texto)
Vamos a filtrar procesos por memoria y ordenarlos.
📌 Ejercicio 5
powershell
Get-Process |
Where-Object { $_.WorkingSet -gt 100MB } |
Sort-Object WorkingSet -Descending |
Select-Object ProcessName, WorkingSet -First 10
Esto te da los 10 procesos que más RAM consumen.
🟩 6. Crear un módulo (tu propia librería)
Vamos a crear tu primer módulo de PowerShell.
📌 Ejercicio 6
- Crea una carpeta de módulo:
powershell
New-Item -ItemType Directory -Path "$HOME\Documents\PowerShell\Modules\DavidTools"
- Crea el archivo del módulo:
powershell
notepad "$HOME\Documents\PowerShell\Modules\DavidTools\DavidTools.psm1"
- Pega dentro:
powershell
function Saludar {
param([string]$Nombre)
"Hola, $Nombre. Bienvenido a PowerShell."
}
function Contar-Archivos {
param([string]$Ruta)
(Get-ChildItem -Path $Ruta).Count
}
- Importa tu módulo:
powershell
Import-Module DavidTools
- Pruébalo:
powershell
Saludar -Nombre David
Contar-Archivos -Ruta C:\Windows
🟦 Mini‑reto del bloque 2
Crea un script llamado analizar.ps1 que:
- Reciba una extensión como parámetro
- Busque todos los archivos con esa extensión
- Muestre: nombre, tamaño y fecha
- Los ordene por tamaño
- Guarde el resultado en un archivo
resultado.txt
Ejemplo de uso:
powershell
.\analizar.ps1 -Extension log
🟢 Cuando completes este bloque, pasamos al siguiente:
PowerShell avanzado de verdad: automatización, scripts complejos, logs, tareas programadas, y control remoto.
Dime cuando lo tengas listo y seguimos.
Entramos en el BLOQUE 3, donde PowerShell deja de ser “una consola” y se convierte en una herramienta de automatización profesional. Aquí aprenderás a:
- Crear scripts complejos
- Usar funciones avanzadas
- Manejar errores como un pro
- Registrar logs
- Automatizar tareas
- Ejecutar scripts remotos
- Crear herramientas reutilizables
Todo con ejercicios prácticos que puedes hacer ahora mismo en tu VM.
🟦 BLOQUE 3 — PowerShell avanzado y automatización real
Vamos a ir paso a paso, con ejercicios que construyen uno sobre otro.
🟩 1. Estructura profesional de un script
Un script serio en PowerShell suele tener:
- Cabecera
- Parámetros
- Validaciones
- Funciones internas
- Lógica principal
- Logs
- Manejo de errores
Vamos a crear uno.
📌 Ejercicio 1 — Crear un script con estructura profesional
En tu Escritorio:
powershell
notepad $HOME\Desktop\plantilla.ps1
Pega esto:
powershell
<#
.SYNOPSIS
Plantilla profesional de script PowerShell
.DESCRIPTION
Ejemplo de estructura avanzada para scripts reutilizables.
.PARAMETER Nombre
Nombre de usuario para saludar.
.EXAMPLE
.\plantilla.ps1 -Nombre David
#>
param(
[Parameter(Mandatory=$true)]
[string]$Nombre
)
function Escribir-Log {
param([string]$Mensaje)
$fecha = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$fecha - $Mensaje" | Out-File -FilePath "script.log" -Append
}
try {
Escribir-Log "Inicio del script"
Write-Output "Hola, $Nombre"
Escribir-Log "Saludo enviado a $Nombre"
}
catch {
Escribir-Log "ERROR: $($_.Exception.Message)"
}
finally {
Escribir-Log "Fin del script"
}
Ejecuta:
powershell
.\plantilla.ps1 -Nombre David
Resultado esperado:
- Aparece un archivo
script.logcon entradas de log. - El script imprime “Hola, David”.
🟩 2. Funciones avanzadas (con pipeline)
Vamos a crear una función que acepte entrada por pipeline, como los cmdlets nativos.
📌 Ejercicio 2 — Función que recibe objetos por pipeline
powershell
function Mostrar-Info {
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline=$true)]
$Entrada
)
process {
Write-Output "Objeto recibido: $($_.Name)"
}
}
Prueba:
powershell
Get-ChildItem | Mostrar-Info
Resultado esperado: Imprime “Objeto recibido: nombre_del_archivo” para cada archivo.
🟩 3. Validación de parámetros (como en lenguajes tipados)
📌 Ejercicio 3 — Parámetros con validación
powershell
function Crear-Carpeta {
param(
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[string]$Nombre,
[ValidateSet("Roja","Verde","Azul")]
[string]$Color
)
New-Item -ItemType Directory -Name $Nombre
Write-Output "Carpeta '$Nombre' creada con color $Color"
}
Prueba:
powershell
Crear-Carpeta -Nombre Test -Color Roja
Si pones un color no permitido, PowerShell te lo impedirá.
🟩 4. Manejo avanzado de errores
📌 Ejercicio 4 — Capturar errores específicos
powershell
try {
Get-Process -Name "noexiste" -ErrorAction Stop
}
catch [System.Management.Automation.ItemNotFoundException] {
Write-Output "Ese proceso no existe."
}
catch {
Write-Output "Error inesperado: $($_.Exception.Message)"
}
🟩 5. Logs profesionales (rotación incluida)
Vamos a crear un log que se “rota” cuando supera cierto tamaño.
📌 Ejercicio 5 — Log con rotación
powershell
function Escribir-Log {
param([string]$Mensaje)
$log = "actividad.log"
if (Test-Path $log -and (Get-Item $log).Length -gt 1MB) {
Rename-Item $log "actividad_$(Get-Date -Format yyyyMMddHHmmss).log"
}
"$((Get-Date)) - $Mensaje" | Out-File $log -Append
}
Prueba:
powershell
1..5000 | ForEach-Object { Escribir-Log "Entrada $_" }
🟩 6. Automatización: ejecutar scripts desde el Programador de Tareas
Vamos a crear una tarea que ejecute un script cada minuto.
📌 Ejercicio 6 — Crear tarea programada
- Crea un script:
powershell
"$(Get-Date) - Tarea ejecutada" | Out-File C:\tarea.txt -Append
Guárdalo como C:\tarea.ps1.
- Crea la tarea:
powershell
schtasks /create /tn "MiTarea" /tr "powershell.exe -File C:\tarea.ps1" /sc minute
- Comprueba:
powershell
schtasks /query /tn "MiTarea"
🟩 7. Automatización remota (SSH + PowerShell)
Ya que tu Windows tiene SSH, puedes ejecutar comandos desde tu Mac.
📌 Ejercicio 7 — Ejecutar PowerShell remoto desde macOS
En tu Mac:
bash
ssh david@IP-de-tu-windows "powershell.exe -Command Get-Process"
O ejecutar un script remoto:
bash
ssh david@IP-de-tu-windows "powershell.exe -File C:\tarea.ps1"
🟦 Mini‑reto del bloque 3
Crea un script llamado monitor.ps1 que:
- Reciba un nombre de proceso
- Compruebe cada 5 segundos si está vivo
- Si muere, lo reinicie
- Registre todo en un log
- Nunca se cierre (bucle infinito controlado)
Pista:
powershell
while ($true) {
...
Start-Sleep 5
}
🟢 Cuando completes este bloque, pasamos al siguiente:
Administración de Windows como servidor: servicios, firewall, usuarios, permisos, logs, políticas, y seguridad.
BLOQUE 4 — Administración de Windows como servidor
🟩 1. Servicios (el equivalente a systemd en Linux)
Windows usa el Service Control Manager (SCM). Todo lo que en Linux sería un “daemon”, aquí es un “servicio”.
🔧 Comandos esenciales
| Acción | PowerShell |
|---|---|
| Ver todos los servicios | Get-Service |
| Ver un servicio concreto | Get-Service -Name sshd |
| Iniciar | Start-Service sshd |
| Detener | Stop-Service sshd |
| Reiniciar | Restart-Service sshd |
| Cambiar inicio automático | Set-Service sshd -StartupType Automatic |
📌 Ejercicio 1 — Controlar el servicio SSH
- Comprueba su estado:
powershell
Get-Service sshd
- Si está detenido, arráncalo:
powershell
Start-Service sshd
- Ponlo en inicio automático:
powershell
Set-Service sshd -StartupType Automatic
- Reinícialo:
powershell
Restart-Service sshd
Objetivo: que tu Windows sea accesible por SSH siempre.
🟩 2. Firewall de Windows (muy potente y muy estricto)
Windows Firewall es serio: si no abres un puerto, no pasa nada.
🔧 Comandos esenciales
| Acción | PowerShell |
|---|---|
| Ver reglas | Get-NetFirewallRule |
| Ver reglas por puerto | Get-NetFirewallPortFilter |
| Crear regla | New-NetFirewallRule |
| Eliminar regla | Remove-NetFirewallRule |
📌 Ejercicio 2 — Abrir un puerto nuevo
Vamos a abrir el puerto 8080:
powershell
New-NetFirewallRule -DisplayName "Puerto 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
Comprueba que existe:
powershell
Get-NetFirewallRule -DisplayName "Puerto 8080"
🟩 3. Usuarios y grupos (equivalente a /etc/passwd y /etc/group)
Windows tiene:
- Usuarios locales
- Grupos locales
- Usuarios de dominio (cuando hay Active Directory)
🔧 Comandos esenciales
| Acción | PowerShell |
|---|---|
| Ver usuarios | Get-LocalUser |
| Crear usuario | New-LocalUser |
| Ver grupos | Get-LocalGroup |
| Añadir usuario a grupo | Add-LocalGroupMember |
📌 Ejercicio 3 — Crear un usuario administrador
- Crear usuario:
powershell
$pass = Read-Host -AsSecureString
New-LocalUser -Name "pruebas" -Password $pass
- Añadirlo al grupo Administrators:
powershell
Add-LocalGroupMember -Group Administrators -Member pruebas
- Comprueba:
powershell
Get-LocalGroupMember Administrators
🟩 4. Permisos (ACLs) — más complejos que POSIX, pero más flexibles
Windows usa Access Control Lists.
🔧 Comandos esenciales
| Acción | PowerShell |
|---|---|
| Ver permisos | Get-Acl |
| Cambiar permisos | Set-Acl |
📌 Ejercicio 4 — Dar permisos completos a un usuario
- Crea una carpeta:
powershell
New-Item -ItemType Directory -Path C:\pruebas
- Carga su ACL:
powershell
$acl = Get-Acl C:\pruebas
- Crea una regla:
powershell
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("pruebas","FullControl","Allow")
- Añádela:
powershell
$acl.AddAccessRule($rule)
Set-Acl C:\pruebas $acl
🟩 5. Logs del sistema (equivalente a /var/log)
Windows usa el Visor de Eventos.
🔧 Abrirlo:
Código
eventvwr.msc
🔧 Desde PowerShell:
powershell
Get-EventLog -LogName System -Newest 20
📌 Ejercicio 5 — Ver errores recientes
powershell
Get-EventLog -LogName System -EntryType Error -Newest 10
🟩 6. Políticas de seguridad (el equivalente a /etc/security + PAM)
Windows tiene:
- Local Security Policy
- Group Policy (GPO)
🔧 Abrir políticas locales:
Código
secpol.msc
🔧 Abrir editor de políticas:
Código
gpedit.msc
Aquí puedes controlar:
- contraseñas
- bloqueo de cuentas
- permisos de usuario
- scripts de inicio
- firewall
- auditoría
📌 Ejercicio 6 — Ver políticas de contraseña
En PowerShell:
powershell
net accounts
🟦 MINI‑RETO DEL BLOQUE
Crea un entorno de servidor básico:
- Crea un usuario llamado
servidor - Dale permisos completos sobre
C:\servidor - Abre el puerto 9000 en el firewall
- Crea un log con los últimos 20 errores del sistema
- Pon el servicio SSH en inicio automático
Si quieres, puedo revisar tus comandos cuando los tengas.
🟢 Cuando termines este bloque, pasamos al siguiente:
Seguridad avanzada: auditoría, hardening, políticas, control remoto, y buenas prácticas de servidor.
Usuarios de dominios: Active Directory
En windows en cuanto a usuarios y grupos que es el qequivalete al /etc/passwd y /etc/grtoup, existen usuarios locales, grupos locales y usuarios de dominio, y a ellos se les da permisos ACLs. Me puedes explicar la parte de Usuarios de Dominio (Active Directory). En que consiste Active Directory. Y otros sistemas similares que he escuchado.
Muy buena pregunta, porque aquí entramos en la gestión de identidades en redes corporativas, que es una parte central de los sistemas Windows. Voy a conectarlo con lo que ya conoces de Unix/Linux para que se entienda mejor.
1. En Linux: /etc/passwd y /etc/group
En sistemas tipo Unix como Linux, los usuarios y grupos se guardan tradicionalmente en archivos de texto.
Usuarios
Archivo:
/etc/passwd
Ejemplo:
david:x:1000:1000:David Sanchez:/home/david:/bin/bash
Campos:
| campo | significado |
|---|---|
| usuario | nombre |
| UID | identificador |
| GID | grupo |
| home | directorio |
| shell | intérprete |
Grupos
Archivo:
/etc/group
Ejemplo:
admins:x:1001:david,maria
Todo esto es local a ese ordenador.
2. El problema en redes grandes
Imagina una empresa con:
5000 empleados
300 servidores
2000 PCs
Si cada máquina tuviera usuarios locales sería un caos.
Habría que crear el usuario en cada equipo.
3. La solución: directorios centralizados
Aquí entran sistemas como Active Directory.
La idea:
un servidor central
→ guarda todos los usuarios
→ todos los equipos lo consultan
Así un usuario puede iniciar sesión en cualquier ordenador de la empresa.
4. Qué es Active Directory
Active Directory es un sistema de gestión centralizada de identidades y recursos creado por Microsoft.
Permite administrar:
- usuarios
- grupos
- ordenadores
- políticas de seguridad
- recursos de red.
5. Concepto clave: el dominio
En Active Directory todo gira alrededor de un dominio.
Ejemplo:
empresa.local
Ese dominio tiene:
- usuarios
- equipos
- servidores.
6. Domain Controller
El servidor que guarda la base de datos se llama:
Domain Controller
Este servidor contiene el directorio completo.
Los PCs de la red se unen al dominio.
7. La base de datos de AD
Active Directory guarda los objetos en una base de datos llamada:
NTDS.dit
Contiene:
- usuarios
- grupos
- permisos
- equipos.
8. Objetos de Active Directory
Todo en AD es un objeto.
Ejemplos:
| objeto | ejemplo |
|---|---|
| usuario | juan |
| grupo | administradores |
| equipo | PC-VENTAS-01 |
| impresora | HP-LASER |
9. Estructura jerárquica
AD organiza objetos en una jerarquía.
Ejemplo:
empresa.local
│
├── Usuarios
│ ├── Juan
│ └── Ana
│
├── Equipos
│ ├── PC01
│ └── PC02
│
└── Servidores
Esto se organiza mediante Unidades Organizativas (OU).
10. Inicio de sesión en dominio
Cuando un usuario inicia sesión:
PC
↓
envía credenciales
↓
Domain Controller
↓
verifica contraseña
↓
devuelve token de seguridad
Ese token contiene:
- SID del usuario
- grupos
- privilegios.
11. Protocolos que usa Active Directory
AD combina varios estándares.
| protocolo | función |
|---|---|
| LDAP | acceder al directorio |
| Kerberos | autenticación |
| DNS | localizar servidores |
12. Grupos de dominio
Igual que en Linux hay grupos, en AD existen:
- grupos globales
- grupos locales
- grupos universales.
Se usan para asignar permisos.
Ejemplo:
Grupo: Ventas
↓
Permiso a carpeta \\servidor\ventas
13. ACLs con usuarios de dominio
Cuando asignas permisos a una carpeta NTFS puedes poner:
DOMINIO\Juan
DOMINIO\Ventas
Windows usa el SID del dominio para identificarlo.
14. Políticas de grupo (GPO)
Una característica muy potente de AD son las:
Group Policy
Permiten configurar miles de PCs automáticamente.
Ejemplos:
- fondo de pantalla corporativo
- instalar software
- bloquear USB
- políticas de contraseña.
15. Sistemas similares a Active Directory
Existen alternativas en el mundo Unix/Linux.
LDAP
El estándar base es LDAP.
Muchos sistemas usan LDAP para gestionar usuarios.
OpenLDAP
Implementación libre de LDAP:
OpenLDAP
Muy usada en servidores Linux.
FreeIPA
Sistema completo de identidad para Linux:
FreeIPA
Integra:
- LDAP
- Kerberos
- DNS.
Samba Active Directory
Los servidores Linux pueden actuar como AD mediante:
Samba
Esto permite crear controladores de dominio compatibles con Windows.
16. Equivalencia conceptual
| Linux | Windows |
|---|---|
| /etc/passwd | usuarios locales |
| /etc/group | grupos |
| LDAP | Active Directory |
| Kerberos | autenticación de dominio |
17. Idea clave
Active Directory no es solo usuarios.
Es realmente:
base de datos
+
sistema de autenticación
+
gestión de políticas
+
directorio de recursos
Es el centro de identidad de toda la red.
💡 Si quieres, puedo explicarte también algo muy interesante que suele confundir mucho:
- la diferencia entre autenticación y autorización
- cómo funciona exactamente Kerberos cuando inicias sesión en un dominio
Te aclaro primero una cosa importante: Citrix no es exactamente un sistema de identidades como Active Directory.
Citrix se apoya en Active Directory para los usuarios, pero su función es otra capa distinta.
Voy a separarlo en tres partes claras:
1️⃣ qué es Citrix
2️⃣ otros sistemas parecidos (virtualización y acceso remoto)
3️⃣ cómo entra Kerberos en todo esto.
1. Qué es Citrix realmente
Citrix es una plataforma para ejecutar aplicaciones o escritorios de forma remota.
La idea es esta:
usuario
↓
se conecta a servidor
↓
las aplicaciones se ejecutan en el servidor
↓
solo se envía la pantalla al usuario
Es decir:
teclado / ratón → servidor
pantalla ← servidor
El ordenador del usuario no ejecuta realmente el programa.
2. Para qué se usa Citrix
Se usa mucho en empresas grandes para:
- aplicaciones corporativas
- hospitales
- banca
- administración pública.
Ejemplo típico:
usuario desde casa
↓
abre Citrix
↓
ve el escritorio de la empresa
↓
ejecuta SAP o software corporativo
Todo corre en servidores del datacenter.
3. Componentes principales de Citrix
Un sistema Citrix suele tener:
Citrix Gateway
Entrada desde Internet.
Delivery Controller
Decide qué servidor ejecutará la sesión.
VDA (Virtual Desktop Agent)
Servidor donde corre el escritorio o aplicación.
Citrix Workspace
Cliente del usuario.
4. Diferencia con Active Directory
| sistema | función |
|---|---|
| Active Directory | identidades |
| Citrix | acceso remoto a aplicaciones |
Citrix normalmente usa Active Directory para autenticar usuarios.
5. Sistemas parecidos a Citrix
Hay varias tecnologías similares.
Remote Desktop Services
El sistema de Microsoft:
Remote Desktop Services
Permite ejecutar escritorios remotos en Windows Server.
Es como Citrix pero integrado en Windows.
VMware Horizon
Plataforma de virtualización de escritorios:
VMware Horizon
Muy usada en empresas.
VDI (Virtual Desktop Infrastructure)
Es el concepto general:
PCs virtuales en servidores
↓
usuarios acceden remotamente
6. Cómo entra Kerberos en todo esto
Ahora llegamos a algo importante.
Cuando inicias sesión en un dominio Windows, se usa Kerberos.
Kerberos es un sistema de autenticación segura en red.
Fue desarrollado originalmente en el MIT.
7. El problema que resuelve Kerberos
Imagina este escenario:
usuario
↓
accede a servidor archivos
↓
accede a servidor correo
↓
accede a servidor aplicaciones
Sin Kerberos tendrías que:
introducir contraseña en cada servidor
Eso es inseguro.
8. La idea de Kerberos
Kerberos usa tickets de autenticación.
Proceso simplificado:
login usuario
↓
servidor autenticación
↓
entrega ticket
↓
usuario usa ticket para acceder a servicios
El usuario no envía la contraseña constantemente.
9. Componentes de Kerberos
Hay tres actores principales:
| componente | función |
|---|---|
| cliente | usuario |
| servidor | servicio |
| KDC | servidor de autenticación |
KDC significa:
Key Distribution Center
En Active Directory el Domain Controller actúa como KDC.
10. Flujo simplificado de Kerberos
1️⃣ usuario inicia sesión
2️⃣ el sistema pide un ticket al KDC
3️⃣ el KDC devuelve un Ticket Granting Ticket (TGT)
4️⃣ con ese ticket el usuario puede pedir acceso a servicios.
Ejemplo
usuario
↓
login dominio
↓
recibe TGT
↓
accede a servidor archivos
↓
recibe ticket servicio
Todo ocurre automáticamente.
11. Por qué Kerberos es seguro
Ventajas:
✔ no envía contraseñas constantemente
✔ usa criptografía
✔ evita ataques de repetición.
Por eso lo usan:
- Windows
- Linux
- macOS
- sistemas empresariales.
12. Ejemplo real en una empresa
usuario inicia sesión en PC
↓
Active Directory autentica con Kerberos
↓
usuario abre Citrix
↓
Citrix usa el mismo ticket Kerberos
↓
accede a aplicaciones
Esto se llama:
Single Sign-On (SSO)
13. Otros sistemas de identidad modernos
Además de Active Directory existen sistemas actuales como:
Azure AD
Microsoft Entra ID
Directorio de identidades en la nube.
Okta
Okta
Plataforma de identidad para aplicaciones web.
Keycloak
Keycloak
Sistema open source de autenticación.
14. Resumen conceptual
Hay varias capas:
identidad
↓
Active Directory
↓
autenticación
↓
Kerberos
↓
acceso aplicaciones
↓
Citrix / RDS / VDI
💡 Si quieres, puedo explicarte algo muy interesante que casi nadie explica bien pero ayuda mucho a entender redes empresariales:
la diferencia entre:
- autenticación
- autorización
- federación de identidad
- Single Sign-On
y cómo se conectan Active Directory, Kerberos, SAML y OAuth. Es básicamente la arquitectura de identidad de Internet moderno.
Te voy a explicar la arquitectura moderna de identidad, porque conecta todo lo que hemos visto: Active Directory, Kerberos, Citrix, Azure AD, SSO, etc.
Es básicamente cómo se controla quién puede acceder a qué en redes y en Internet.
Primero aclaramos 4 conceptos fundamentales que muchas veces se confunden.
1. Autenticación vs Autorización
Autenticación
Responder a la pregunta:
¿Quién eres?
Ejemplo:
- usuario introduce contraseña
- usa tarjeta inteligente
- usa biometría.
Protocolos típicos:
- Kerberos
- LDAP
Autorización
Responder a la pregunta:
¿qué puedes hacer?
Ejemplo:
| usuario | permiso |
|---|---|
| Juan | leer carpeta |
| Ana | modificar carpeta |
Esto se implementa con:
- ACL
- roles
- grupos.
2. Identidad digital
En redes corporativas cada persona tiene una identidad digital.
Ejemplo:
usuario: juan
correo: juan@empresa.com
grupos: ventas
Estas identidades se guardan en un directorio como:
- Active Directory
- OpenLDAP
3. Single Sign-On (SSO)
SSO significa:
iniciar sesión una vez
↓
acceder a muchos sistemas
Ejemplo:
login PC empresa
↓
correo
↓
intranet
↓
Citrix
↓
aplicaciones corporativas
Todo sin volver a introducir contraseña.
Esto se logra con sistemas de tickets o tokens.
Ejemplo: Kerberos.
4. Federación de identidad
Aquí entramos en algo más moderno.
Federación significa:
un sistema confía en la identidad de otro
Ejemplo típico:
entrar en una web con Google
Tu cuenta Google autentica al usuario.
Protocolos usados:
- SAML
- OAuth 2.0
- OpenID Connect
5. Cómo funciona la identidad en empresas modernas
La arquitectura suele ser así:
usuarios
↓
directorio de identidad
↓
autenticación
↓
tokens
↓
acceso a aplicaciones
Ejemplo real:
usuario
↓
Active Directory
↓
Kerberos
↓
SSO
↓
Citrix / aplicaciones
6. Qué es Azure AD (actualmente Entra ID)
Lo que antes se llamaba Azure Active Directory ahora se llama Microsoft Entra ID.
Es básicamente Active Directory pero en la nube.
Pero hay una diferencia importante.
7. Diferencia entre Active Directory y Azure AD
| característica | Active Directory | Azure AD |
|---|---|---|
| entorno | red local | nube |
| protocolos | Kerberos, LDAP | OAuth, SAML |
| uso | PCs y servidores | aplicaciones web |
| ubicación | datacenter empresa | cloud Microsoft |
Active Directory
Gestiona:
- PCs del dominio
- usuarios de red
- servidores.
Azure AD
Gestiona:
- identidades cloud
- Microsoft 365
- aplicaciones SaaS.
8. Ejemplo práctico Azure AD
Un usuario inicia sesión en:
- Microsoft 365
Proceso:
usuario
↓
login Microsoft
↓
Azure AD autentica
↓
recibe token
↓
accede a Outlook / Teams
9. Tokens modernos
En sistemas web no se usan tickets Kerberos.
Se usan tokens.
Ejemplo:
JWT
(JSON Web Token)
Contiene:
usuario
permisos
expiración
firma criptográfica
10. Arquitectura típica moderna
En muchas empresas hoy existe esto:
usuarios
↓
Active Directory
↓
sincronización
↓
Azure AD
↓
aplicaciones cloud
La sincronización se hace con herramientas de Microsoft.
11. Ejemplo real en una empresa grande
usuario inicia sesión PC
↓
Active Directory autentica
↓
Kerberos
↓
SSO
↓
abre navegador
↓
Azure AD
↓
acceso a Microsoft 365
↓
acceso a Salesforce
↓
acceso a aplicaciones SaaS
12. Otros sistemas similares a Azure AD
Varias empresas ofrecen sistemas de identidad.
Okta
Okta
Muy popular en SaaS.
Keycloak
Keycloak
Open source.
Ping Identity
Ping Identity
Usado en grandes empresas.
13. Concepto clave: Identity Provider
Todos estos sistemas actúan como:
Identity Provider (IdP)
Es decir:
servicio que confirma tu identidad
Ejemplos:
- Azure AD
- Okta
- Google.
14. La arquitectura completa de identidad moderna
usuarios
↓
Identity Provider
↓
autenticación
↓
token
↓
aplicaciones
Protocolos más usados hoy:
- SAML
- OAuth
- OpenID Connect.
💡 Si quieres, puedo explicarte algo muy interesante que conecta todo lo que hemos visto (sistemas operativos + redes + identidad):
cómo funciona realmente el inicio de sesión en una empresa desde que enciendes el PC hasta que puedes abrir aplicaciones en la nube.
Ese flujo mezcla:
- DNS
- Active Directory
- Kerberos
- Azure AD
- tokens
- SSO
y es una de las arquitecturas más elegantes de la informática moderna.
Vamos a cerrar el “mapa mental” completo de identidad y acceso en sistemas modernos. Esto conecta Active Directory, Kerberos, SAML, OAuth, OpenID, Azure AD, Citrix, etc..
Si entiendes esto, prácticamente entiendes cómo funciona la autenticación en casi todo Internet y en redes empresariales. 🔐
1. Primero: tres conceptos básicos
Antes de entrar en protocolos, hay que distinguir tres cosas distintas.
1️⃣ Autenticación (Authentication)
Demostrar quién eres.
Ejemplos:
- Usuario + contraseña
- certificado
- token
- huella
Ejemplo real:
usuario: david
password: ****
2️⃣ Autorización (Authorization)
Determinar qué puedes hacer después de autenticarte.
Ejemplo:
| Usuario | Permiso |
|---|---|
| david | leer carpeta |
| admin | leer + escribir |
Esto suele usarse con ACLs.
3️⃣ Identidad (Identity)
Sistema central que guarda:
- usuarios
- grupos
- permisos
- políticas
Ejemplo:
- Active Directory
- LDAP
- Azure AD
2. Qué es Kerberos
Kerberos
Es el protocolo de autenticación de redes usado por Windows en dominios.
La idea es no enviar la contraseña cada vez.
En vez de eso se usan tickets temporales.
Funcionamiento simplificado
Supongamos:
- usuario: David
- servidor: FileServer
- controlador de dominio: AD
Paso 1 — login
David inicia sesión en su PC.
El PC pide autenticación al controlador de dominio.
El controlador responde con un:
TGT = Ticket Granting Ticket
Paso 2 — acceso a recursos
Cuando David quiere acceder a un servidor:
\\fileserver\documentos
El PC pide al controlador:
ticket para fileserver
El controlador entrega un service ticket.
Paso 3 — acceso
El servidor recibe el ticket.
Lo valida.
Y permite el acceso.
Ventajas
✔ no se envían contraseñas por la red
✔ autenticación rápida
✔ tickets temporales
Por eso es usado por:
- Windows domain
- Linux enterprise
- HPC clusters
3. Qué es SAML
SAML
SAML se usa mucho en login corporativo en webs.
Ejemplo típico:
Login with company account
Ejemplo real
Intentas entrar a:
Salesforce
Pero la empresa usa login corporativo.
Proceso:
1️⃣ vas a Salesforce
2️⃣ te redirige a login empresa
3️⃣ empresa te autentica
4️⃣ envía una SAML assertion
Resultado
Salesforce recibe algo como:
Usuario: david@empresa.com
Autenticado: SI
Y te deja entrar.
Usos comunes
- Google Workspace
- Office 365
- Slack
- Atlassian
- Salesforce
4. Qué es OAuth
OAuth 2.0
OAuth sirve para dar acceso a una aplicación sin compartir contraseña.
Ejemplo clásico
“Login with Google”.
Proceso:
1️⃣ app pide acceso
quiero acceso a tu email
2️⃣ Google muestra consentimiento
¿permitir acceso?
3️⃣ si aceptas → Google entrega access token
El token permite
leer perfil
leer email
pero sin conocer tu contraseña.
5. Qué es OpenID Connect
OpenID Connect
OpenID Connect es OAuth + identidad.
Es decir:
OAuth = autorización
OpenID = autenticación
Ejemplo:
Login with Google
Login with Apple
Login with Microsoft
Todo esto usa OpenID Connect.
6. Qué es Azure AD
Microsoft Entra ID
Antes se llamaba Azure AD.
Ahora se llama Microsoft Entra ID.
Es el Active Directory en la nube.
Qué gestiona
- usuarios
- grupos
- dispositivos
- aplicaciones
- autenticación
Ejemplo
Empresa usa:
- Windows
- Office365
- Teams
- SharePoint
Todos usan Entra ID.
Permite
- SSO (Single Sign-On)
- MFA
- acceso condicional
7. Qué es SSO
Single Sign-On
SSO = una sola autenticación para muchas apps.
Ejemplo:
Login una vez y accedes a:
- correo
- Teams
- SharePoint
- Slack
sin volver a poner contraseña.
8. Qué es Citrix
Citrix Systems
Citrix permite usar aplicaciones o escritorios remotos.
Ejemplo:
Trabajador abre:
Citrix Workspace
y ve:
- escritorio Windows remoto
- apps corporativas
Cómo funciona
Las apps corren en:
servidores centrales
El usuario solo ve la pantalla remota.
Ventajas:
✔ seguridad
✔ datos no salen de la empresa
✔ funciona en cualquier dispositivo
9. Cómo se conectan todas estas tecnologías
En una empresa moderna suele haber esto:
Usuario
↓
Entra ID / Active Directory
↓
Kerberos / OAuth / SAML
↓
Aplicaciones
Ejemplo real:
Usuario → login Windows
↓
Active Directory
↓
SSO
↓
Teams
SharePoint
Salesforce
Citrix
10. Ejemplo real de flujo moderno
Empleado abre portátil.
1️⃣ login Windows
2️⃣ autenticación Kerberos
3️⃣ obtiene ticket
4️⃣ accede a recursos internos
Luego abre navegador.
5️⃣ accede a Teams
6️⃣ SSO con Entra ID
7️⃣ OAuth token
8️⃣ acceso permitido
Todo sin volver a introducir contraseña.
11. Otros sistemas similares a Active Directory
Alternativas comunes:
Linux / open source
- OpenLDAP
- FreeIPA
- 389 Directory Server
Empresas
- Okta
- Ping Identity
12. El mapa final (muy importante)
Arquitectura típica moderna:
Internet
│
Identity Provider
(Entra / Okta / AD)
│
┌───────────┼───────────┐
│ │ │
SAML OAuth OpenID
│ │ │
Web Apps APIs Login Web
💡 Si quieres, en el siguiente nivel puedo explicarte algo MUY interesante que casi nadie entiende bien:
Cómo funciona realmente un login en Windows dentro de un dominio paso a paso
Veremos:
- LSASS
- NTLM
- Kerberos tickets
- Domain Controller
- hash de contraseñas
- pass-the-hash
Es la parte más profunda del sistema de seguridad de Windows. Y también donde ocurren la mayoría de ataques. 🔐
Vamos a entrar en el nivel más profundo del login de Windows en un dominio, porque aquí aparecen muchos componentes internos que casi nadie explica juntos: LSASS, hashes de contraseña, NTLM, Kerberos, Domain Controller, etc.
1. Qué ocurre realmente cuando haces login en Windows
Supongamos este escenario:
- usuario:
DAVID - dominio:
EMPRESA.LOCAL - PC unido al dominio
- hay un controlador de dominio
Ese controlador suele ejecutar Active Directory.
2. Componentes internos del login
Dentro de Windows participan varias piezas del sistema:
| Componente | Función |
|---|---|
| Winlogon | pantalla de login |
| LSASS | autenticación |
| SAM | base de datos de usuarios locales |
| Kerberos | autenticación de dominio |
| NTLM | autenticación antigua |
3. Winlogon: la pantalla de login
Cuando ves la pantalla:
Ctrl + Alt + Del
entra en acción el proceso:
winlogon.exe
Este proceso:
- recibe usuario
- recibe contraseña
- se lo pasa al sistema de autenticación.
4. LSASS (el corazón de la seguridad)
El proceso más importante es:
lsass.exe
LSASS significa:
Local Security Authority Subsystem Service
Su trabajo es:
- verificar contraseñas
- generar tokens de acceso
- gestionar autenticación
Por qué es tan importante
Muchos ataques informáticos intentan robar credenciales desde LSASS.
Herramientas famosas como:
- Mimikatz
intentan leer memoria de LSASS para robar:
- hashes
- tickets Kerberos
5. Qué pasa con tu contraseña
Cuando escribes la contraseña:
MiPassword123
Windows NO la guarda en texto.
La convierte en un hash.
Ejemplo:
hash = 2a7f3c9f8e4...
Ese hash es lo que se compara con la base de datos.
6. Base de datos de usuarios
Si el usuario es local, Windows consulta:
SAM database
SAM significa:
Security Account Manager
Archivo interno del sistema.
Contiene:
- usuarios
- hashes de contraseñas
7. Si el usuario es de dominio
En vez de SAM, Windows contacta con el:
Domain Controller
Ese servidor ejecuta:
Active Directory
8. Dos métodos de autenticación
Windows puede usar:
1️⃣ NTLM
NTLM
Protocolo antiguo.
Proceso simplificado:
cliente → servidor
challenge
response
El servidor envía un reto.
El cliente responde usando el hash.
Problema:
NTLM es más vulnerable.
Por eso Microsoft intenta eliminarlo.
2️⃣ Kerberos (el moderno)
Kerberos
Sistema basado en tickets.
Más seguro.
Más rápido.
9. Flujo completo de Kerberos
Cuando haces login:
Paso 1
PC → Domain Controller
Authentication request
Paso 2
El controlador devuelve:
TGT
Ticket Granting Ticket.
Paso 3
Cuando accedes a un recurso:
\\server\files
El PC usa el TGT para pedir otro ticket.
Paso 4
Obtiene:
Service Ticket
Paso 5
El servidor acepta el ticket.
Acceso concedido.
10. El Access Token (muy importante)
Cuando te autenticas, Windows crea algo llamado:
Access Token
Este token contiene:
- tu SID
- tus grupos
- privilegios
SID
Security Identifier
Es un identificador único del usuario.
Ejemplo:
S-1-5-21-3452345234-23452345-1001
11. Qué hace Windows con ese token
Cada vez que accedes a algo:
- archivo
- carpeta
- programa
Windows compara:
token del usuario
VS
ACL del objeto
Si coincide → acceso permitido.
12. Ataques famosos en dominios Windows
Muchos ataques se basan en robar:
hashes
ataque:
Pass-the-hash
El atacante usa el hash directamente.
tickets
ataque:
Pass-the-ticket
Roba tickets Kerberos.
ataque famoso
Golden Ticket
Si alguien compromete el controlador de dominio puede crear tickets falsos para cualquier usuario.
13. Qué guarda Active Directory realmente
Dentro de Active Directory hay:
- usuarios
- grupos
- ordenadores
- políticas
- certificados
Todo organizado en:
Domain
├─ Users
├─ Groups
├─ Computers
└─ Organizational Units
14. Group Policy
Group Policy
Permite aplicar configuraciones a todos los PCs.
Ejemplo:
- bloquear USB
- instalar software
- configurar firewall
- cambiar fondo de pantalla
15. Arquitectura típica de una empresa
Red empresarial:
Domain Controller
(Active Directory)
│
┌────────┼────────┐
│ │ │
PC usuario Servidor Aplicaciones
Todo se autentica contra el dominio.
16. Qué pasa cuando el PC está fuera de la empresa
Si estás en casa:
Windows puede usar:
- credenciales cacheadas
- VPN
- autenticación en la nube
Ejemplo:
Microsoft Entra ID
17. La evolución moderna
Arquitectura antigua:
Active Directory
+
Kerberos
Arquitectura moderna:
Entra ID
+
OAuth
+
OpenID Connect
18. El mapa completo de identidad moderna
Usuario
│
Login Windows
│
LSASS
│
Kerberos
│
Active Directory
│
SSO
│
Apps corporativas
Seguridad
Vamos a entrar en uno de los bloques más potentes y útiles de todo el curso: Seguridad avanzada en Windows como servidor, con ejercicios prácticos que puedes hacer ahora mismo en tu VM.
Este bloque te va a dar una visión que normalmente solo tienen administradores de sistemas profesionales.
Lo vamos a dividir en:
- Seguridad y permisos avanzados (ACLs, herencia, auditoría)
- Hardening del sistema
- Políticas de seguridad (Local Security Policy y GPO)
- Auditoría del sistema
- Control remoto seguro
- Buenas prácticas de servidor
- Ejercicios prácticos en cada sección
Vamos paso a paso.
🟦 1. Seguridad y permisos avanzados (ACLs, herencia, auditoría)
Windows no usa permisos POSIX. Usa ACLs (Access Control Lists), que son más complejas pero más flexibles.
🟩 Ver permisos de un archivo o carpeta
powershell
Get-Acl C:\carpeta
🟩 Añadir permisos avanzados
powershell
$acl = Get-Acl C:\carpeta
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("usuario","Modify","ContainerInherit,ObjectInherit","None","Allow")
$acl.AddAccessRule($rule)
Set-Acl C:\carpeta $acl
🟩 Quitar permisos
powershell
$acl.RemoveAccessRule($rule)
Set-Acl C:\carpeta $acl
🟩 Desactivar herencia (muy importante en servidores)
powershell
$acl = Get-Acl C:\carpeta
$acl.SetAccessRuleProtection($true,$false)
Set-Acl C:\carpeta $acl
Esto evita que permisos de carpetas superiores se propaguen.
📌 Ejercicio 1 — Control total sobre una carpeta sin herencia
- Crea
C:\seguridad - Desactiva herencia
- Quita todos los permisos
- Añade solo a tu usuario con FullControl
🟦 2. Hardening del sistema (reforzar Windows)
Aquí es donde Windows se convierte en un servidor serio.
🟩 Desactivar servicios innecesarios
Lista servicios:
powershell
Get-Service | Sort-Object Status
Servicios típicos que se pueden desactivar en un servidor aislado:
- Xbox Services
- Print Spooler (si no usas impresoras)
- Remote Registry
- Bluetooth Support Service
Ejemplo:
powershell
Stop-Service -Name Spooler
Set-Service -Name Spooler -StartupType Disabled
🟩 Desactivar ejecución automática de USB
Código
gpedit.msc
Ruta:
Código
Plantillas administrativas → Componentes de Windows → Directivas de reproducción automática
📌 Ejercicio 2 — Hardening básico
- Desactiva Print Spooler
- Desactiva Remote Registry
- Comprueba que no vuelven a iniciarse
🟦 3. Políticas de seguridad (Local Security Policy y GPO)
Windows tiene un sistema muy potente de políticas.
🟩 Abrir políticas locales
Código
secpol.msc
🟩 Configuraciones importantes
🔹 Política de contraseñas
Código
Directivas de cuenta → Directiva de contraseñas
🔹 Bloqueo de cuenta
Código
Directivas de cuenta → Directiva de bloqueo de cuenta
🔹 Derechos de usuario
Código
Directivas locales → Asignación de derechos de usuario
Aquí puedes controlar:
- quién puede iniciar sesión por RDP
- quién puede apagar el sistema
- quién puede ejecutar tareas programadas
📌 Ejercicio 3 — endurecer políticas
- Establece longitud mínima de contraseña: 10
- Establece bloqueo tras 5 intentos
- Deniega “Iniciar sesión localmente” al usuario
pruebas
🟦 4. Auditoría del sistema (saber quién hace qué)
Windows puede registrar:
- accesos a archivos
- cambios en permisos
- inicios de sesión
- fallos de autenticación
- cambios en servicios
- cambios en políticas
🟩 Activar auditoría avanzada
Código
secpol.msc
Ruta:
Código
Directivas locales → Directiva de auditoría
Activa:
- Auditoría de inicio de sesión
- Auditoría de acceso a objetos
- Auditoría de cambios de directivas
- Auditoría de uso de privilegios
🟩 Ver logs
Código
eventvwr.msc
O desde PowerShell:
powershell
Get-WinEvent -LogName Security -MaxEvents 20
📌 Ejercicio 4 — Auditoría real
- Activa auditoría de acceso a objetos
- En
C:\seguridad, activa auditoría para tu usuario - Accede al archivo
- Mira en el Visor de eventos → Security
- Encuentra el evento de acceso
🟦 5. Control remoto seguro
Ya tienes SSH funcionando, lo cual es excelente.
🟩 Buenas prácticas
- Deshabilitar contraseña → usar claves SSH
- Cambiar el puerto (opcional)
- Limitar usuarios permitidos
- Registrar accesos
🟩 Ver quién se conecta por SSH
powershell
Get-WinEvent -LogName Security | Where-Object { $_.Id -eq 4624 }
📌 Ejercicio 5 — endurecer SSH
- Edita
C:\ProgramData\ssh\sshd_config - Cambia:
Código
PasswordAuthentication no
- Añade tu clave pública
- Reinicia SSH:
powershell
Restart-Service sshd
🟦 6. Buenas prácticas de servidor
- No usar el usuario administrador para tareas diarias
- Desactivar servicios innecesarios
- Mantener Windows actualizado
- Usar firewall estricto
- No instalar software innecesario
- Usar logs y auditoría
- Automatizar tareas críticas
- Usar PowerShell para todo lo repetitivo
🟦 MINI‑RETO DEL BLOQUE
Crea un entorno seguro:
- Carpeta
C:\datoscon permisos solo para tu usuario - Auditoría activada sobre esa carpeta
- Puerto 2222 abierto para SSH
- SSH configurado solo con claves
- Servicio Print Spooler desactivado
- Política de contraseñas endurecida
- Log de los últimos 50 eventos de seguridad guardado en
C:\logs\seguridad.txt
🟢 Cuando termines este bloque, pasamos al siguiente:
Automatización avanzada en Windows: scripts, tareas programadas, servicios personalizados, y orquestación.
Automatización avanzada en Windows: scripts, tareas programadas, servicios personalizados, y orquestación.
Entramos en el BLOQUE 6: Automatización avanzada en Windows, donde vas a aprender a hacer que Windows trabaje para ti como un servidor profesional.
Este bloque es muy potente porque combina:
- PowerShell avanzado
- Servicios personalizados
- Tareas programadas
- Scripts que se ejecutan solos
- Automatización remota
- Orquestación entre Windows y tu Mac
- Ejercicios prácticos reales
Vamos a construir automatizaciones que podrías usar en un entorno profesional.
🟦 BLOQUE 6 — Automatización avanzada en Windows
🟩 1. Automatización con PowerShell (scripts inteligentes)
Aquí vamos a crear scripts que:
- se configuran solos
- se ejecutan solos
- se reinician solos
- generan logs
- se comportan como “micro‑servicios”
📌 Ejercicio 1 — Script que se auto‑configura
Crea un script que:
- Comprueba si existe una carpeta
- Si no existe, la crea
- Si existe, escribe un log
- Si falla, captura el error
powershell
param([string]$Ruta = "C:\auto")
try {
if (-not (Test-Path $Ruta)) {
New-Item -ItemType Directory -Path $Ruta
"Carpeta creada: $Ruta" | Out-File C:\auto.log -Append
} else {
"La carpeta ya existía: $Ruta" | Out-File C:\auto.log -Append
}
}
catch {
"ERROR: $($_.Exception.Message)" | Out-File C:\auto.log -Append
}
Ejecuta:
powershell
.\auto.ps1
🟩 2. Automatización con el Programador de Tareas (cron de Windows)
El Programador de Tareas es muy potente. Puedes ejecutar scripts:
- al iniciar Windows
- al iniciar sesión
- cada X minutos
- cuando un evento ocurre
- cuando un servicio falla
- cuando se conecta un usuario
- cuando se crea un archivo
📌 Ejercicio 2 — Ejecutar un script cada minuto
- Crea un script:
powershell
"$(Get-Date) - Tarea ejecutada" | Out-File C:\tarea.log -Append
Guárdalo como:
Código
C:\tarea.ps1
- Crea la tarea:
powershell
schtasks /create /tn "TareaCadaMinuto" /tr "powershell.exe -File C:\tarea.ps1" /sc minute
- Comprueba:
powershell
schtasks /query /tn "TareaCadaMinuto"
🟩 3. Automatización basada en eventos (muy avanzada)
Windows puede ejecutar scripts cuando ocurre un evento del sistema.
Ejemplos:
- Cuando alguien inicia sesión
- Cuando alguien falla un login
- Cuando se crea un archivo
- Cuando un servicio falla
- Cuando se conecta un USB
📌 Ejercicio 3 — Ejecutar un script cuando alguien inicia sesión
- Abre:
Código
taskschd.msc
- Crea una tarea nueva:
- Trigger: “Al iniciar sesión”
- Acción: ejecutar un script PowerShell
- Script: escribe un log con la hora y el usuario
Ejemplo de script:
powershell
"$(Get-Date) - Inicio de sesión de $env:USERNAME" | Out-File C:\logins.log -Append
🟩 4. Crear un servicio personalizado (como systemd)
Esto es nivel profesional.
Vamos a crear un servicio que:
- se ejecuta en segundo plano
- se reinicia si falla
- no necesita sesión iniciada
📌 Ejercicio 4 — Crear un servicio PowerShell
- Crea un script que nunca termine:
powershell
while ($true) {
"$(Get-Date) - Servicio activo" | Out-File C:\servicio.log -Append
Start-Sleep 10
}
Guárdalo como:
Código
C:\servicio.ps1
- Instala el servicio usando NSSM (herramienta estándar en Windows Server).
Descarga NSSM (si quieres te explico cómo instalarlo).
- Crea el servicio:
Código
nssm install MiServicio
- Application:
powershell.exe - Arguments:
-File C:\servicio.ps1
- Inicia el servicio:
powershell
Start-Service MiServicio
🟩 5. Automatización remota (Windows ↔ macOS)
Ya que tu Windows tiene SSH, puedes:
- ejecutar scripts desde tu Mac
- copiar archivos
- automatizar tareas
- reiniciar servicios
- monitorizar procesos
📌 Ejercicio 5 — Ejecutar un script remoto desde tu Mac
En tu Mac:
bash
ssh david@IP-de-tu-windows "powershell.exe -Command Get-Process"
Ejecutar un script remoto:
bash
ssh david@IP-de-tu-windows "powershell.exe -File C:\tarea.ps1"
🟩 6. Orquestación (automatizar varias máquinas)
Esto es opcional, pero muy potente.
Puedes:
- ejecutar un script en varias máquinas
- recopilar logs
- reiniciar servicios en lote
- desplegar software
Ejemplo:
powershell
Invoke-Command -ComputerName windows1,windows2 -ScriptBlock {
Get-Service sshd
}
Las dos grandes formas de conectarse remotamente a Windows
Windows tiene dos sistemas de administración remota:
🟩 1. SSH (moderno, universal, multiplataforma)
- Funciona igual que en Linux
- Usa claves SSH
- Permite ejecutar PowerShell y CMD
- Perfecto para tu Mac-mini
- Seguro, simple, estándar
Ya lo dominas.
🟩 2. WinRM / PowerShell Remoting (el sistema nativo de Windows)
Este es el que te sonaba: Invoke-Command, Enter-PSSession, New-PSSession, etc.
Es más antiguo que SSH, pero mucho más potente dentro del ecosistema Windows.
🟦 ¿Qué es WinRM / PowerShell Remoting?
Es el sistema nativo de Windows para:
- ejecutar comandos remotos
- crear sesiones persistentes
- administrar servicios
- administrar el registro
- ejecutar scripts completos
- copiar archivos
- orquestar varias máquinas a la vez
Funciona sobre:
- HTTP/HTTPS
- WS-Man (Web Services for Management)
- Kerberos (si hay dominio)
- NTLM (si no hay dominio)
Es decir: es el “SSH de Windows”, pero con superpoderes dentro del propio Windows.
🟦 ¿Por qué se usa menos hoy?
Porque:
- SSH es más universal
- WinRM es más complejo de configurar
- WinRM no funciona bien fuera de redes Windows
- WinRM requiere abrir puertos específicos
- WinRM usa protocolos propios de Microsoft
Pero en entornos Windows puros (empresas, servidores, Active Directory)… WinRM sigue siendo el rey.
🟦 Cómo funciona WinRM (PowerShell Remoting)
🟩 1. Habilitarlo
En la máquina remota:
powershell
Enable-PSRemoting -Force
Esto:
- habilita WinRM
- abre el firewall
- crea listeners HTTP
- configura permisos
🟩 2. Conectarse a otra máquina
🔹 Sesión interactiva (como SSH)
powershell
Enter-PSSession -ComputerName NOMBRE -Credential (Get-Credential)
🔹 Ejecutar un comando remoto
powershell
Invoke-Command -ComputerName NOMBRE -ScriptBlock { Get-Process }
🔹 Crear una sesión persistente
powershell
$sesion = New-PSSession -ComputerName NOMBRE
Invoke-Command -Session $sesion -ScriptBlock { Get-Service }
🟦 ¿Qué ventajas tiene sobre SSH?
Aquí viene lo interesante.
🟩 1. Acceso completo al sistema
SSH solo te da una shell. WinRM te da acceso a:
- servicios
- registro
- firewall
- WMI
- eventos
- políticas
- certificados
- Active Directory
🟩 2. Sesiones persistentes
Puedes mantener una sesión abierta en segundo plano:
powershell
$sesion = New-PSSession -ComputerName PC1
Invoke-Command -Session $sesion -ScriptBlock { hostname }
🟩 3. Orquestación de varias máquinas
Esto es brutal:
powershell
Invoke-Command -ComputerName PC1,PC2,PC3 -ScriptBlock { Get-Service sshd }
🟩 4. Copiar archivos remotamente
SSH usa SCP. WinRM usa:
powershell
Copy-Item -Path archivo.txt -Destination C:\ -ToSession $sesion
🟩 5. Integración con Active Directory
Puedes ejecutar comandos como:
powershell
Invoke-Command -ComputerName Servidor -ScriptBlock { Get-ADUser -Filter * }
SSH no puede hacer eso.
🟦 ¿Qué desventajas tiene?
- Más difícil de configurar
- No funciona bien fuera de redes Windows
- No es multiplataforma
- Depende de servicios de Windows
- Más atacado históricamente (por estar muy integrado)
Por eso hoy en día:
- SSH para administración moderna
- WinRM para administración empresarial avanzada
🟦 Ejemplo práctico para que lo entiendas de verdad
Supón que tienes dos Windows:
- Windows-A
- Windows-B
En Windows-B habilitas:
powershell
Enable-PSRemoting -Force
Desde Windows-A:
🔹 Entras en Windows-B como si fuera SSH:
powershell
Enter-PSSession -ComputerName Windows-B
🔹 Ejecutas un comando remoto:
powershell
Invoke-Command -ComputerName Windows-B -ScriptBlock { Get-Process }
🔹 Creas una sesión persistente:
powershell
$ses = New-PSSession -ComputerName Windows-B
Invoke-Command -Session $ses -ScriptBlock { Get-Service }
🔹 Copias un archivo:
powershell
Copy-Item archivo.txt -Destination C:\ -ToSession $ses
🔹 Sales:
powershell
Remove-PSSession $ses
Pero aprender WinRM te da superpoderes
Porque:
- es la forma nativa de administrar Windows
- es lo que usan los administradores de sistemas
- es lo que usan las empresas
- es lo que usa PowerShell en su máximo potencial
Y además, te prepara para:
- Active Directory
- Windows Server
- Automatización masiva
- Orquestación de máquinas
1. Qué es WinRM realmente
- WinRM = Windows Remote Management
- Es la implementación de Microsoft del protocolo WS-Management (WS-Man), un estándar para administración remota sobre HTTP/HTTPS.
- PowerShell Remoting se apoya en WinRM para:
- ejecutar comandos remotos
- abrir sesiones interactivas
- orquestar muchas máquinas a la vez
- exponer “endpoints” de administración controlados
Piensa: SSH es una puerta a una shell; WinRM es una API de administración de Windows con PowerShell como lenguaje.
2. Ejecución remota de comandos y scripts
2.1. Comandos puntuales
powershell
Invoke-Command -ComputerName Servidor1 -ScriptBlock { Get-Process }
- Ejecuta el bloque en la máquina remota.
- Devuelve los resultados a tu sesión local (como objetos deserializados).
Puedes pasar parámetros:
powershell
Invoke-Command -ComputerName Servidor1 -ScriptBlock {
param($Nombre)
Get-Service -Name $Nombre
} -ArgumentList "sshd"
2.2. Scripts completos
powershell
Invoke-Command -ComputerName Servidor1 -FilePath C:\scripts\mantenimiento.ps1
Eso te permite tener un repositorio de scripts y lanzarlos en remoto sin copiar nada manualmente.
3. Sesiones remotas persistentes
Aquí es donde WinRM se separa de SSH.
3.1. Sesión interactiva (tipo “ssh”)
powershell
Enter-PSSession -ComputerName Servidor1 -Credential (Get-Credential)
- Lo que escribes se ejecuta en el remoto.
- El prompt cambia para indicarte que estás “dentro”.
3.2. Sesiones reutilizables
powershell
$ses = New-PSSession -ComputerName Servidor1
Invoke-Command -Session $ses -ScriptBlock { Get-Service }
Invoke-Command -Session $ses -ScriptBlock { Get-EventLog -LogName System -Newest 5 }
Remove-PSSession $ses
- Mantienes contexto (módulos cargados, variables, etc.).
- Ideal para automatizaciones largas o repetitivas.
4. Administración 1 a muchos (orquestación)
WinRM brilla cuando no es “yo ↔ una máquina”, sino “yo ↔ muchas máquinas”.
powershell
Invoke-Command -ComputerName Servidor1,Servidor2,Servidor3 -ScriptBlock {
Get-Service sshd
}
O con una lista:
powershell
$servidores = "Srv1","Srv2","Srv3"
Invoke-Command -ComputerName $servidores -ScriptBlock {
Get-ComputerInfo | Select-Object CsName, OsName, OsVersion
}
- Puedes lanzar el mismo comando en decenas o cientos de equipos.
- Recibes una salida etiquetada por máquina.
Esto es administración de parque, no de “mi PC”.
5. Copia de archivos y despliegues
WinRM no es SCP, pero PowerShell lo integra:
5.1. Copiar hacia el remoto
powershell
$ses = New-PSSession -ComputerName Servidor1
Copy-Item -Path .\app.config -Destination "C:\app\app.config" -ToSession $ses
5.2. Copiar desde el remoto
powershell
Copy-Item -Path "C:\logs\*.log" -Destination .\logs -FromSession $ses
Con esto puedes:
- desplegar configuraciones
- recoger logs
- distribuir scripts
Sin montar shares ni usar SMB.
6. Acceso profundo al sistema: servicios, registro, eventos, WMI
Con WinRM + PowerShell Remoting puedes tocar casi todo:
6.1. Servicios
powershell
Invoke-Command -ComputerName Servidor1 -ScriptBlock {
Get-Service sshd
Restart-Service sshd
}
6.2. Registro
powershell
Invoke-Command -ComputerName Servidor1 -ScriptBlock {
Get-Item "HKLM:\Software\Microsoft\Windows\CurrentVersion"
}
6.3. Eventos
powershell
Invoke-Command -ComputerName Servidor1 -ScriptBlock {
Get-WinEvent -LogName System -MaxEvents 10
}
6.4. WMI / CIM
powershell
Invoke-Command -ComputerName Servidor1 -ScriptBlock {
Get-CimInstance Win32_OperatingSystem
}
Esto es lo que lo hace tan potente en entornos de servidor: no solo ejecutas comandos, administras el sistema entero.
7. Endpoints personalizados y Just Enough Administration (JEA)
Aquí entramos en el “modo enterprise”.
7.1. Endpoints de PowerShell
Puedes definir “puntos de entrada” remotos con capacidades limitadas:
- qué comandos se pueden ejecutar
- con qué permisos reales se ejecutan
- qué módulos están disponibles
Ejemplo conceptual:
powershell
Register-PSSessionConfiguration -Name "Soporte" -RunAsCredential Admin -VisibleCmdlets Get-Service,Restart-Service
Un usuario se conecta a ese endpoint y solo puede usar esos cmdlets, aunque por debajo se ejecuten con permisos de administrador.
7.2. JEA (Just Enough Administration)
Es una arquitectura para:
- delegar tareas de administración
- sin dar permisos de administrador completos
- usando endpoints restringidos y roles definidos
Esto es clave en seguridad: “Te dejo reiniciar servicios de IIS, pero no tocar nada más del servidor”.
8. Integración con RSAT y herramientas de administración
En entornos grandes se usa:
- RSAT (Remote Server Administration Tools) en el equipo del administrador
- Módulos de AD, DNS, DHCP, etc.
- PowerShell Remoting para ejecutar esos módulos en los servidores remotos
Ejemplo:
powershell
Invoke-Command -ComputerName DC1 -ScriptBlock {
Import-Module ActiveDirectory
Get-ADUser -Filter *
}
Tu máquina no tiene AD, pero el servidor sí; tú solo “te conectas” a su contexto.
9. Seguridad, autenticación y transporte
WinRM soporta:
- HTTP (por defecto, en redes internas)
- HTTPS (con certificados, para redes menos confiables)
- Autenticación:
- Kerberos (dominio)
- NTLM (workgroup)
- CredSSP (delegación, con cuidado)
Buenas prácticas:
- Usar HTTPS en redes no totalmente confiables
- Limitar quién puede usar remoting (
Set-PSSessionConfiguration) - Usar JEA para delegar tareas
- Registrar y auditar el uso de remoting
10. Cosas que WinRM NO es (y así lo colocas mentalmente)
- No es un reemplazo de SSH en entornos mixtos (ahí gana SSH).
- No es una VPN.
- No es un túnel genérico de puertos.
- No es un sistema de archivos remoto.
Es: la capa de transporte para que PowerShell pueda administrar Windows a distancia, a lo grande.
11. Resumen rápido de “todo lo que puedes hacer” con WinRM
Con WinRM + PowerShell Remoting puedes:
- Ejecutar comandos y scripts en remoto (1 a 1 y 1 a muchos).
- Abrir sesiones remotas persistentes.
- Orquestar decenas o cientos de máquinas a la vez.
- Copiar archivos hacia y desde máquinas remotas.
- Administrar servicios, registro, firewall, eventos, WMI, AD…
- Definir endpoints restringidos (JEA) para delegar administración segura.
- Integrarte con RSAT y módulos de servidor.
- Automatizar tareas de mantenimiento, despliegue y auditoría a escala.
BLOQUE 7 — WSL (Windows Subsystem for Linux)
🟦 BLOQUE 8 — Desarrollo en Windows (VSCode, Docker, entornos, automatización híbrida)
Y como siempre: todo mezclado con ejercicios prácticos, para que no solo lo entiendas, sino que lo domines.
Este bloque es muy divertido porque convierte tu Windows en un híbrido Windows+Linux, ideal para desarrollo, scripting, servidores y automatización.
🟩 BLOQUE 7 — WSL (Windows Subsystem for Linux)
WSL te permite ejecutar Linux nativo dentro de Windows, sin máquinas virtuales, sin Hyper‑V, sin overhead. Es como tener Ubuntu, Debian o Arch dentro de Windows, compartiendo archivos y red.
Vamos paso a paso.
🟦 1. Instalar WSL
En PowerShell como administrador:
powershell
wsl --install
Esto instala:
- WSL2
- Ubuntu por defecto
- Kernel Linux real
- Integración con Windows
Reinicia Windows y ya tienes Linux dentro.
🟦 2. Comandos esenciales de WSL
Ver distribuciones instaladas:
powershell
wsl --list --verbose
Instalar otra distro:
powershell
wsl --install -d Debian
Entrar en Linux:
powershell
wsl
Ejecutar un comando Linux desde Windows:
powershell
wsl ls -la
Ejecutar un comando Windows desde Linux:
bash
notepad.exe
🟦 3. Sistema de archivos híbrido
Desde Windows → Linux:
Código
\\wsl$\Ubuntu\home\david
Desde Linux → Windows:
bash
cd /mnt/c/Users/david/Desktop
🟦 4. Integración con VSCode
En Windows:
powershell
code .
En Linux (WSL):
bash
code .
VSCode detecta que estás en WSL y abre un entorno Linux real.
🟦 5. Integración con Docker
Docker Desktop usa WSL2 como backend. Esto significa:
- contenedores Linux nativos
- sin Hyper‑V
- sin máquinas virtuales pesadas
🟦 6. Ejercicios prácticos de WSL
📌 Ejercicio 1 — Instalar WSL y Ubuntu
powershell
wsl --install
📌 Ejercicio 2 — Crear un script Linux y ejecutarlo desde Windows
En WSL:
bash
echo "echo Hola desde Linux" > hola.sh
chmod +x hola.sh
Desde Windows:
powershell
wsl ./hola.sh
📌 Ejercicio 3 — Crear un script Windows y ejecutarlo desde Linux
En Windows:
powershell
echo "Write-Output 'Hola desde Windows'" > C:\hola.ps1
En Linux:
bash
powershell.exe -File /mnt/c/hola.ps1
📌 Ejercicio 4 — Compilar algo en Linux y usarlo en Windows
En WSL:
bash
sudo apt install gcc
echo 'int main(){printf("Hola mundo\n");}' > hola.c
gcc hola.c -o hola
Ejecutarlo desde Windows:
powershell
wsl ./hola
🟩 BLOQUE 8 — Desarrollo en Windows (VSCode, Docker, entornos, automatización híbrida)
Este bloque convierte tu Windows en un entorno de desarrollo profesional.
🟦 1. VSCode como IDE universal
VSCode puede trabajar en:
- Windows
- WSL (Linux)
- Contenedores Docker
- SSH remoto
Todo desde la misma interfaz.
Extensiones recomendadas:
- Remote – WSL
- Remote – SSH
- Remote – Containers
- Python
- C/C++
- PowerShell
- Docker
🟦 2. Docker con WSL2
Docker Desktop usa WSL2 como motor. Esto te da:
- contenedores Linux nativos
- integración con Windows
- integración con WSL
- rendimiento casi igual que en Linux real
Comandos básicos:
powershell
docker run hello-world
docker ps
docker images
docker exec -it contenedor bash
🟦 3. Entornos de desarrollo híbridos
Puedes tener:
- Código en Windows
- Compilación en Linux (WSL)
- Contenedores Docker Linux
- Scripts PowerShell para automatizar
- SSH para administración remota
Es un entorno extremadamente flexible.
🟦 4. Ejercicios prácticos de desarrollo
📌 Ejercicio 1 — Crear un proyecto Python en WSL y editarlo en VSCode
En WSL:
bash
mkdir proyecto
cd proyecto
python3 -m venv venv
source venv/bin/activate
pip install flask
Abrir en VSCode:
bash
code .
📌 Ejercicio 2 — Crear un contenedor Docker desde WSL
En WSL:
bash
echo -e "FROM python:3.10\nCMD [\"python3\", \"-c\", \"print('Hola desde Docker')\"]" > Dockerfile
docker build -t hola .
docker run hola
📌 Ejercicio 3 — Automatización híbrida Windows+Linux
Crea un script PowerShell que:
- Ejecuta un comando Linux
- Ejecuta un comando Windows
- Ejecuta un contenedor Docker
- Guarda logs en Windows
Ejemplo:
powershell
"--- Linux ---" | Out-File C:\dev.log -Append
wsl uname -a | Out-File C:\dev.log -Append
"--- Windows ---" | Out-File C:\dev.log -Append
Get-Date | Out-File C:\dev.log -Append
"--- Docker ---" | Out-File C:\dev.log -Append
docker run hello-world | Out-File C:\dev.log -Append
🟦 MINI‑RETO FINAL (para cerrar Windows por completo)
Crea un entorno de desarrollo completo:
- Instala WSL2 con Ubuntu
- Instala VSCode con Remote‑WSL
- Instala Docker Desktop
- Crea un proyecto Python en WSL
- Crea un contenedor Docker que ejecute ese proyecto
- Automatiza todo con un script PowerShell
- Ejecuta el script desde tu Mac por SSH
Si haces esto, tienes un entorno profesional de desarrollo Windows + Linux + Docker + PowerShell + SSH.