{"id":662,"date":"2026-03-07T10:38:53","date_gmt":"2026-03-07T09:38:53","guid":{"rendered":"https:\/\/cienciaytecnology.com\/wordpress\/?p=662"},"modified":"2026-03-07T10:41:03","modified_gmt":"2026-03-07T09:41:03","slug":"windows-tercera-parte","status":"publish","type":"post","link":"https:\/\/cienciaytecnology.com\/wordpress\/windows-tercera-parte\/","title":{"rendered":"Windows, tercera parte"},"content":{"rendered":"\n<p><strong>PowerShell avanzado<\/strong><\/p>\n\n\n\n<p><strong>Administraci\u00f3n del sistema<\/strong><\/p>\n\n\n\n<p><strong>Seguridad y permisos<\/strong><\/p>\n\n\n\n<p><strong>Automatizaci\u00f3n<\/strong><\/p>\n\n\n\n<p><strong>WSL y desarrollo<\/strong><\/p>\n\n\n\n<p><strong>Todo mezclado con ejercicios pr\u00e1cticos<\/strong><\/p>\n\n\n\n<p>Vamos a ir <strong>bloque por bloque, con ejercicios reales<\/strong>, como si estuvi\u00e9ramos montando tu \u201ccaja de herramientas\u201d de Windows.<\/p>\n\n\n\n<p>Empezamos por lo l\u00f3gico: <strong>PowerShell base (pero ya con mentalidad avanzada)<\/strong>. Cuando dominemos esto, pasamos al siguiente bloque.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1\ufe0f\u20e3 Primer bloque: PowerShell como usuario avanzado<\/h3>\n\n\n\n<p>Objetivo: que te sientas tan c\u00f3modo en PowerShell como en Bash.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Ejercicio 1: abrir PowerShell y entender d\u00f3nde est\u00e1s<\/h4>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>En Windows, abre <strong>PowerShell<\/strong> (no ISE, no Terminal de Windows de momento).<\/li>\n\n\n\n<li>Ejecuta:powershell<code>$PSVersionTable <\/code><strong>Tarea:<\/strong> dime qu\u00e9 versi\u00f3n de PowerShell tienes (<code>PSVersion<\/code>).<\/li>\n\n\n\n<li>Ahora mira tu ruta actual:powershell<code>Get-Location <\/code><strong>Tarea:<\/strong> comprueba si est\u00e1s en algo tipo <code>C:\\Users\\david<\/code>.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Ejercicio 2: moverte como en Linux, pero con PowerShell<\/h4>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Lista archivos:powershell<code>Get-ChildItem<\/code><\/li>\n\n\n\n<li>Entra en tu Escritorio:powershell<code>Set-Location Desktop Get-ChildItem<\/code><\/li>\n\n\n\n<li>Crea una carpeta de pruebas:powershell<code>New-Item -ItemType Directory -Name \"ps-tests\"<\/code><\/li>\n\n\n\n<li>Entra en ella:powershell<code>Set-Location ps-tests<\/code><\/li>\n<\/ol>\n\n\n\n<p><strong>Tarea:<\/strong> crea dentro un archivo vac\u00edo llamado <code>hola.txt<\/code>:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>New-Item -ItemType File -Name \"hola.txt\"\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Ejercicio 3: entender que todo son objetos<\/h4>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Ejecuta:powershell<code>Get-ChildItem<\/code><\/li>\n\n\n\n<li>Ahora:powershell<code>Get-ChildItem | Get-Member <\/code>Ver\u00e1s que cada elemento tiene propiedades (<code>Name<\/code>, <code>Length<\/code>, <code>CreationTime<\/code>, etc.).<\/li>\n\n\n\n<li>Saca solo los nombres:powershell<code>Get-ChildItem | Select-Object Name<\/code><\/li>\n\n\n\n<li>Saca nombre y tama\u00f1o:powershell<code>Get-ChildItem | Select-Object Name, Length<\/code><\/li>\n<\/ol>\n\n\n\n<p><strong>Tarea:<\/strong> muestra solo los archivos de la carpeta actual ordenados por tama\u00f1o descendente:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ChildItem | Sort-Object Length -Descending\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Ejercicio 4: procesos al estilo \u201cps aux\u201d, pero bien<\/h4>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Lista procesos:powershell<code>Get-Process<\/code><\/li>\n\n\n\n<li>Filtra por nombre:powershell<code>Get-Process | Where-Object { $_.ProcessName -like \"*ssh*\" }<\/code><\/li>\n\n\n\n<li>Muestra solo nombre e ID:powershell<code>Get-Process | Select-Object ProcessName, Id<\/code><\/li>\n<\/ol>\n\n\n\n<p><strong>Tarea:<\/strong> mata un proceso concreto (elige algo inofensivo, tipo <code>notepad<\/code>):<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Stop-Process -Name notepad\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Ejercicio 5: red b\u00e1sica<\/h4>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Haz un \u201cping\u201d a Google:powershell<code>Test-Connection google.com -Count 4<\/code><\/li>\n\n\n\n<li>Mira tus IPs:powershell<code>Get-NetIPAddress<\/code><\/li>\n<\/ol>\n\n\n\n<p><strong>Tarea:<\/strong> filtra solo las IPv4:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-NetIPAddress | Where-Object { $_.AddressFamily -eq \"IPv4\" }\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2\ufe0f\u20e3 Mini reto del bloque<\/h3>\n\n\n\n<p>En tu carpeta <code>ps-tests<\/code>, haz esto:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Crea 5 archivos de texto: <code>a.txt<\/code>, <code>b.txt<\/code>, <code>c.txt<\/code>, <code>d.txt<\/code>, <code>e.txt<\/code>.<\/li>\n\n\n\n<li>Escribe dentro de cada uno una l\u00ednea distinta usando PowerShell:powershell<code>\"Soy el archivo A\" | Set-Content a.txt<\/code><\/li>\n\n\n\n<li>Lista los archivos mostrando: nombre, tama\u00f1o y fecha de creaci\u00f3n, ordenados por fecha.Pista:powershell<code>Get-ChildItem | Select-Object Name, Length, CreationTime | Sort-Object CreationTime<\/code><\/li>\n<\/ol>\n\n\n\n<p>Cuando termines este bloque, cu\u00e9ntame:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La versi\u00f3n de PowerShell que tienes<\/li>\n\n\n\n<li>Si te han salido bien los ejercicios (y si alguno te ha dado guerra)<\/li>\n<\/ul>\n\n\n\n<p>Y pasamos al siguiente bloque: <strong>PowerShell como lenguaje de scripting de verdad (funciones, scripts <\/strong><code>.ps1<\/code><strong>, par\u00e1metros, errores, etc.)<\/strong>.<\/p>\n\n\n\n<p>Entramos en <strong>el segundo bloque<\/strong>, y aqu\u00ed es donde PowerShell empieza a ponerse realmente interesante: <strong>PowerShell como lenguaje de scripting real<\/strong>. Vamos a trabajar con:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scripts <code>.ps1<\/code><\/li>\n\n\n\n<li>Par\u00e1metros<\/li>\n\n\n\n<li>Funciones<\/li>\n\n\n\n<li>Manejo de errores<\/li>\n\n\n\n<li>Pipelines avanzados<\/li>\n\n\n\n<li>Ejercicios pr\u00e1cticos que te convierten en power\u2011user<\/li>\n<\/ul>\n\n\n\n<p>Todo con ejemplos que puedes ejecutar en tu VM ahora mismo.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 <strong>BLOQUE 2 \u2014 PowerShell como lenguaje de scripting<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 1. Crear tu primer script <code>.ps1<\/code><\/h2>\n\n\n\n<p>Vamos a crear un script que liste los procesos y los guarde en un archivo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 1<\/h3>\n\n\n\n<p>En tu Escritorio:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set-Location $HOME\\Desktop\nNew-Item -ItemType File -Name \"listar-procesos.ps1\"\n<\/code><\/pre>\n\n\n\n<p>Ahora ed\u00edtalo con:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>notepad listar-procesos.ps1\n<\/code><\/pre>\n\n\n\n<p>Pega dentro:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Script: listar-procesos.ps1\n# Lista procesos y los guarda en un archivo\n\n$procesos = Get-Process\n$procesos | Out-File \"procesos.txt\"\n\nWrite-Output \"Procesos guardados en procesos.txt\"\n<\/code><\/pre>\n\n\n\n<p>Guarda y ejecuta:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\\listar-procesos.ps1\n<\/code><\/pre>\n\n\n\n<p><strong>Resultado esperado:<\/strong> aparece un archivo <code>procesos.txt<\/code> con la lista de procesos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 2. Scripts con par\u00e1metros (como funciones en Bash)<\/h2>\n\n\n\n<p>Vamos a crear un script que reciba un nombre de proceso y lo mate.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 2<\/h3>\n\n\n\n<p>Crea:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>New-Item -ItemType File -Name \"matar.ps1\"\nnotepad matar.ps1\n<\/code><\/pre>\n\n\n\n<p>Pega:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>param(\n    &#91;string]$Nombre\n)\n\nif (-not $Nombre) {\n    Write-Output \"Debes indicar un nombre de proceso.\"\n    exit\n}\n\n$proceso = Get-Process -Name $Nombre -ErrorAction SilentlyContinue\n\nif ($proceso) {\n    Stop-Process -Name $Nombre\n    Write-Output \"Proceso '$Nombre' detenido.\"\n} else {\n    Write-Output \"No existe un proceso llamado '$Nombre'.\"\n}\n<\/code><\/pre>\n\n\n\n<p>Ejemplo de uso:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\\matar.ps1 -Nombre notepad\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 3. Funciones dentro de PowerShell<\/h2>\n\n\n\n<p>Vamos a crear una funci\u00f3n que busque archivos por extensi\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 3<\/h3>\n\n\n\n<p>En PowerShell:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function Buscar-Extension {\n    param(\n        &#91;string]$Extension\n    )\n\n    Get-ChildItem -Recurse -Filter \"*.$Extension\" | Select-Object FullName, Length\n}\n<\/code><\/pre>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Buscar-Extension -Extension txt\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 4. Manejo de errores (try\/catch)<\/h2>\n\n\n\n<p>Windows falla m\u00e1s que Linux, as\u00ed que esto es vital.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 4<\/h3>\n\n\n\n<p>Crea un script:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>New-Item -ItemType File -Name \"errores.ps1\"\nnotepad errores.ps1\n<\/code><\/pre>\n\n\n\n<p>Pega:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>try {\n    Get-Process -Name \"proceso_que_no_existe\" -ErrorAction Stop\n}\ncatch {\n    Write-Output \"Error detectado: $($_.Exception.Message)\"\n}\n<\/code><\/pre>\n\n\n\n<p>Ejecuta:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\\errores.ps1\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 5. Pipelines avanzados (objetos, no texto)<\/h2>\n\n\n\n<p>Vamos a filtrar procesos por memoria y ordenarlos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 5<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-Process |\n    Where-Object { $_.WorkingSet -gt 100MB } |\n    Sort-Object WorkingSet -Descending |\n    Select-Object ProcessName, WorkingSet -First 10\n<\/code><\/pre>\n\n\n\n<p>Esto te da los 10 procesos que m\u00e1s RAM consumen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 6. Crear un m\u00f3dulo (tu propia librer\u00eda)<\/h2>\n\n\n\n<p>Vamos a crear tu primer m\u00f3dulo de PowerShell.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 6<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Crea una carpeta de m\u00f3dulo:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>New-Item -ItemType Directory -Path \"$HOME\\Documents\\PowerShell\\Modules\\DavidTools\"\n<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Crea el archivo del m\u00f3dulo:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>notepad \"$HOME\\Documents\\PowerShell\\Modules\\DavidTools\\DavidTools.psm1\"\n<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Pega dentro:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function Saludar {\n    param(&#91;string]$Nombre)\n    \"Hola, $Nombre. Bienvenido a PowerShell.\"\n}\n\nfunction Contar-Archivos {\n    param(&#91;string]$Ruta)\n    (Get-ChildItem -Path $Ruta).Count\n}\n<\/code><\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Importa tu m\u00f3dulo:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Import-Module DavidTools\n<\/code><\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Pru\u00e9balo:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Saludar -Nombre David\nContar-Archivos -Ruta C:\\Windows\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 <strong>Mini\u2011reto del bloque 2<\/strong><\/h1>\n\n\n\n<p>Crea un script llamado <code>analizar.ps1<\/code> que:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Reciba una extensi\u00f3n como par\u00e1metro<\/li>\n\n\n\n<li>Busque todos los archivos con esa extensi\u00f3n<\/li>\n\n\n\n<li>Muestre: nombre, tama\u00f1o y fecha<\/li>\n\n\n\n<li>Los ordene por tama\u00f1o<\/li>\n\n\n\n<li>Guarde el resultado en un archivo <code>resultado.txt<\/code><\/li>\n<\/ol>\n\n\n\n<p>Ejemplo de uso:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\\analizar.ps1 -Extension log\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe2 Cuando completes este bloque, pasamos al siguiente:<\/h1>\n\n\n\n<p><strong>PowerShell avanzado de verdad: automatizaci\u00f3n, scripts complejos, logs, tareas programadas, y control remoto.<\/strong><\/p>\n\n\n\n<p>Dime cuando lo tengas listo y seguimos.<\/p>\n\n\n\n<p>Entramos en <strong>el BLOQUE 3<\/strong>, donde PowerShell deja de ser \u201cuna consola\u201d y se convierte en <strong>una herramienta de automatizaci\u00f3n profesional<\/strong>. Aqu\u00ed aprender\u00e1s a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Crear scripts complejos<\/li>\n\n\n\n<li>Usar funciones avanzadas<\/li>\n\n\n\n<li>Manejar errores como un pro<\/li>\n\n\n\n<li>Registrar logs<\/li>\n\n\n\n<li>Automatizar tareas<\/li>\n\n\n\n<li>Ejecutar scripts remotos<\/li>\n\n\n\n<li>Crear herramientas reutilizables<\/li>\n<\/ul>\n\n\n\n<p>Todo con ejercicios pr\u00e1cticos que puedes hacer ahora mismo en tu VM.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 <strong>BLOQUE 3 \u2014 PowerShell avanzado y automatizaci\u00f3n real<\/strong><\/h1>\n\n\n\n<p>Vamos a ir paso a paso, con ejercicios que construyen uno sobre otro.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 1. Estructura profesional de un script<\/h1>\n\n\n\n<p>Un script serio en PowerShell suele tener:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Cabecera<\/strong><\/li>\n\n\n\n<li><strong>Par\u00e1metros<\/strong><\/li>\n\n\n\n<li><strong>Validaciones<\/strong><\/li>\n\n\n\n<li><strong>Funciones internas<\/strong><\/li>\n\n\n\n<li><strong>L\u00f3gica principal<\/strong><\/li>\n\n\n\n<li><strong>Logs<\/strong><\/li>\n\n\n\n<li><strong>Manejo de errores<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Vamos a crear uno.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 1 \u2014 Crear un script con estructura profesional<\/h3>\n\n\n\n<p>En tu Escritorio:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>notepad $HOME\\Desktop\\plantilla.ps1\n<\/code><\/pre>\n\n\n\n<p>Pega esto:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;#\n.SYNOPSIS\n    Plantilla profesional de script PowerShell\n\n.DESCRIPTION\n    Ejemplo de estructura avanzada para scripts reutilizables.\n\n.PARAMETER Nombre\n    Nombre de usuario para saludar.\n\n.EXAMPLE\n    .\\plantilla.ps1 -Nombre David\n#&gt;\n\nparam(\n    &#91;Parameter(Mandatory=$true)]\n    &#91;string]$Nombre\n)\n\nfunction Escribir-Log {\n    param(&#91;string]$Mensaje)\n\n    $fecha = Get-Date -Format \"yyyy-MM-dd HH:mm:ss\"\n    \"$fecha - $Mensaje\" | Out-File -FilePath \"script.log\" -Append\n}\n\ntry {\n    Escribir-Log \"Inicio del script\"\n    Write-Output \"Hola, $Nombre\"\n    Escribir-Log \"Saludo enviado a $Nombre\"\n}\ncatch {\n    Escribir-Log \"ERROR: $($_.Exception.Message)\"\n}\nfinally {\n    Escribir-Log \"Fin del script\"\n}\n<\/code><\/pre>\n\n\n\n<p>Ejecuta:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\\plantilla.ps1 -Nombre David\n<\/code><\/pre>\n\n\n\n<p><strong>Resultado esperado:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Aparece un archivo <code>script.log<\/code> con entradas de log.<\/li>\n\n\n\n<li>El script imprime \u201cHola, David\u201d.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 2. Funciones avanzadas (con pipeline)<\/h1>\n\n\n\n<p>Vamos a crear una funci\u00f3n que acepte entrada por pipeline, como los cmdlets nativos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 2 \u2014 Funci\u00f3n que recibe objetos por pipeline<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function Mostrar-Info {\n    &#91;CmdletBinding()]\n    param(\n        &#91;Parameter(ValueFromPipeline=$true)]\n        $Entrada\n    )\n\n    process {\n        Write-Output \"Objeto recibido: $($_.Name)\"\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>Prueba:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-ChildItem | Mostrar-Info\n<\/code><\/pre>\n\n\n\n<p><strong>Resultado esperado:<\/strong> Imprime \u201cObjeto recibido: nombre_del_archivo\u201d para cada archivo.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 3. Validaci\u00f3n de par\u00e1metros (como en lenguajes tipados)<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 3 \u2014 Par\u00e1metros con validaci\u00f3n<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function Crear-Carpeta {\n    param(\n        &#91;Parameter(Mandatory=$true)]\n        &#91;ValidateNotNullOrEmpty()]\n        &#91;string]$Nombre,\n\n        &#91;ValidateSet(\"Roja\",\"Verde\",\"Azul\")]\n        &#91;string]$Color\n    )\n\n    New-Item -ItemType Directory -Name $Nombre\n    Write-Output \"Carpeta '$Nombre' creada con color $Color\"\n}\n<\/code><\/pre>\n\n\n\n<p>Prueba:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Crear-Carpeta -Nombre Test -Color Roja\n<\/code><\/pre>\n\n\n\n<p>Si pones un color no permitido, PowerShell te lo impedir\u00e1.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 4. Manejo avanzado de errores<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 4 \u2014 Capturar errores espec\u00edficos<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>try {\n    Get-Process -Name \"noexiste\" -ErrorAction Stop\n}\ncatch &#91;System.Management.Automation.ItemNotFoundException] {\n    Write-Output \"Ese proceso no existe.\"\n}\ncatch {\n    Write-Output \"Error inesperado: $($_.Exception.Message)\"\n}\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 5. Logs profesionales (rotaci\u00f3n incluida)<\/h1>\n\n\n\n<p>Vamos a crear un log que se \u201crota\u201d cuando supera cierto tama\u00f1o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 5 \u2014 Log con rotaci\u00f3n<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function Escribir-Log {\n    param(&#91;string]$Mensaje)\n\n    $log = \"actividad.log\"\n\n    if (Test-Path $log -and (Get-Item $log).Length -gt 1MB) {\n        Rename-Item $log \"actividad_$(Get-Date -Format yyyyMMddHHmmss).log\"\n    }\n\n    \"$((Get-Date)) - $Mensaje\" | Out-File $log -Append\n}\n<\/code><\/pre>\n\n\n\n<p>Prueba:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1..5000 | ForEach-Object { Escribir-Log \"Entrada $_\" }\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 6. Automatizaci\u00f3n: ejecutar scripts desde el Programador de Tareas<\/h1>\n\n\n\n<p>Vamos a crear una tarea que ejecute un script cada minuto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 6 \u2014 Crear tarea programada<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Crea un script:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"$(Get-Date) - Tarea ejecutada\" | Out-File C:\\tarea.txt -Append\n<\/code><\/pre>\n\n\n\n<p>Gu\u00e1rdalo como <code>C:\\tarea.ps1<\/code>.<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Crea la tarea:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>schtasks \/create \/tn \"MiTarea\" \/tr \"powershell.exe -File C:\\tarea.ps1\" \/sc minute\n<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Comprueba:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>schtasks \/query \/tn \"MiTarea\"\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 7. Automatizaci\u00f3n remota (SSH + PowerShell)<\/h1>\n\n\n\n<p>Ya que tu Windows tiene SSH, puedes ejecutar comandos desde tu Mac.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 7 \u2014 Ejecutar PowerShell remoto desde macOS<\/h3>\n\n\n\n<p>En tu Mac:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh david@IP-de-tu-windows \"powershell.exe -Command Get-Process\"\n<\/code><\/pre>\n\n\n\n<p>O ejecutar un script remoto:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh david@IP-de-tu-windows \"powershell.exe -File C:\\tarea.ps1\"\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 <strong>Mini\u2011reto del bloque 3<\/strong><\/h1>\n\n\n\n<p>Crea un script llamado <code>monitor.ps1<\/code> que:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Reciba un nombre de proceso<\/li>\n\n\n\n<li>Compruebe cada 5 segundos si est\u00e1 vivo<\/li>\n\n\n\n<li>Si muere, lo reinicie<\/li>\n\n\n\n<li>Registre todo en un log<\/li>\n\n\n\n<li>Nunca se cierre (bucle infinito controlado)<\/li>\n<\/ol>\n\n\n\n<p>Pista:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>while ($true) {\n    ...\n    Start-Sleep 5\n}\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe2 Cuando completes este bloque, pasamos al siguiente:<\/h1>\n\n\n\n<p><strong>Administraci\u00f3n de Windows como servidor: servicios, firewall, usuarios, permisos, logs, pol\u00edticas, y seguridad.<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">BLOQUE 4 \u2014 Administraci\u00f3n de Windows como servidor<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 1. Servicios (el equivalente a systemd en Linux)<\/h2>\n\n\n\n<p>Windows usa el <strong>Service Control Manager (SCM)<\/strong>. Todo lo que en Linux ser\u00eda un \u201cdaemon\u201d, aqu\u00ed es un \u201cservicio\u201d.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 Comandos esenciales<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Acci\u00f3n<\/th><th>PowerShell<\/th><\/tr><\/thead><tbody><tr><td>Ver todos los servicios<\/td><td><code>Get-Service<\/code><\/td><\/tr><tr><td>Ver un servicio concreto<\/td><td><code>Get-Service -Name sshd<\/code><\/td><\/tr><tr><td>Iniciar<\/td><td><code>Start-Service sshd<\/code><\/td><\/tr><tr><td>Detener<\/td><td><code>Stop-Service sshd<\/code><\/td><\/tr><tr><td>Reiniciar<\/td><td><code>Restart-Service sshd<\/code><\/td><\/tr><tr><td>Cambiar inicio autom\u00e1tico<\/td><td><code>Set-Service sshd -StartupType Automatic<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 1 \u2014 Controlar el servicio SSH<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Comprueba su estado:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-Service sshd\n<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Si est\u00e1 detenido, arr\u00e1ncalo:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Start-Service sshd\n<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Ponlo en inicio autom\u00e1tico:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set-Service sshd -StartupType Automatic\n<\/code><\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Rein\u00edcialo:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Restart-Service sshd\n<\/code><\/pre>\n\n\n\n<p><strong>Objetivo:<\/strong> que tu Windows sea accesible por SSH siempre.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 2. Firewall de Windows (muy potente y muy estricto)<\/h1>\n\n\n\n<p>Windows Firewall es serio: si no abres un puerto, no pasa nada.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 Comandos esenciales<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Acci\u00f3n<\/th><th>PowerShell<\/th><\/tr><\/thead><tbody><tr><td>Ver reglas<\/td><td><code>Get-NetFirewallRule<\/code><\/td><\/tr><tr><td>Ver reglas por puerto<\/td><td><code>Get-NetFirewallPortFilter<\/code><\/td><\/tr><tr><td>Crear regla<\/td><td><code>New-NetFirewallRule<\/code><\/td><\/tr><tr><td>Eliminar regla<\/td><td><code>Remove-NetFirewallRule<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 2 \u2014 Abrir un puerto nuevo<\/h3>\n\n\n\n<p>Vamos a abrir el puerto 8080:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>New-NetFirewallRule -DisplayName \"Puerto 8080\" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow\n<\/code><\/pre>\n\n\n\n<p>Comprueba que existe:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-NetFirewallRule -DisplayName \"Puerto 8080\"\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 3. Usuarios y grupos (equivalente a \/etc\/passwd y \/etc\/group)<\/h1>\n\n\n\n<p>Windows tiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Usuarios locales<\/strong><\/li>\n\n\n\n<li><strong>Grupos locales<\/strong><\/li>\n\n\n\n<li><strong>Usuarios de dominio<\/strong> (cuando hay Active Directory)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 Comandos esenciales<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Acci\u00f3n<\/th><th>PowerShell<\/th><\/tr><\/thead><tbody><tr><td>Ver usuarios<\/td><td><code>Get-LocalUser<\/code><\/td><\/tr><tr><td>Crear usuario<\/td><td><code>New-LocalUser<\/code><\/td><\/tr><tr><td>Ver grupos<\/td><td><code>Get-LocalGroup<\/code><\/td><\/tr><tr><td>A\u00f1adir usuario a grupo<\/td><td><code>Add-LocalGroupMember<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 3 \u2014 Crear un usuario administrador<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Crear usuario:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$pass = Read-Host -AsSecureString\nNew-LocalUser -Name \"pruebas\" -Password $pass\n<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>A\u00f1adirlo al grupo Administrators:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Add-LocalGroupMember -Group Administrators -Member pruebas\n<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Comprueba:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-LocalGroupMember Administrators\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 4. Permisos (ACLs) \u2014 m\u00e1s complejos que POSIX, pero m\u00e1s flexibles<\/h1>\n\n\n\n<p>Windows usa <strong>Access Control Lists<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 Comandos esenciales<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Acci\u00f3n<\/th><th>PowerShell<\/th><\/tr><\/thead><tbody><tr><td>Ver permisos<\/td><td><code>Get-Acl<\/code><\/td><\/tr><tr><td>Cambiar permisos<\/td><td><code>Set-Acl<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 4 \u2014 Dar permisos completos a un usuario<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Crea una carpeta:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>New-Item -ItemType Directory -Path C:\\pruebas\n<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Carga su ACL:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$acl = Get-Acl C:\\pruebas\n<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Crea una regla:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(\"pruebas\",\"FullControl\",\"Allow\")\n<\/code><\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>A\u00f1\u00e1dela:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$acl.AddAccessRule($rule)\nSet-Acl C:\\pruebas $acl\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 5. Logs del sistema (equivalente a \/var\/log)<\/h1>\n\n\n\n<p>Windows usa el <strong>Visor de Eventos<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 Abrirlo:<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>eventvwr.msc\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 Desde PowerShell:<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-EventLog -LogName System -Newest 20\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 5 \u2014 Ver errores recientes<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-EventLog -LogName System -EntryType Error -Newest 10\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 6. Pol\u00edticas de seguridad (el equivalente a \/etc\/security + PAM)<\/h1>\n\n\n\n<p>Windows tiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Local Security Policy<\/strong><\/li>\n\n\n\n<li><strong>Group Policy (GPO)<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 Abrir pol\u00edticas locales:<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>secpol.msc\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 Abrir editor de pol\u00edticas:<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gpedit.msc\n<\/code><\/pre>\n\n\n\n<p>Aqu\u00ed puedes controlar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>contrase\u00f1as<\/li>\n\n\n\n<li>bloqueo de cuentas<\/li>\n\n\n\n<li>permisos de usuario<\/li>\n\n\n\n<li>scripts de inicio<\/li>\n\n\n\n<li>firewall<\/li>\n\n\n\n<li>auditor\u00eda<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 6 \u2014 Ver pol\u00edticas de contrase\u00f1a<\/h3>\n\n\n\n<p>En PowerShell:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>net accounts\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 MINI\u2011RETO DEL BLOQUE<\/h1>\n\n\n\n<p>Crea un entorno de servidor b\u00e1sico:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Crea un usuario llamado <code>servidor<\/code><\/li>\n\n\n\n<li>Dale permisos completos sobre <code>C:\\servidor<\/code><\/li>\n\n\n\n<li>Abre el puerto 9000 en el firewall<\/li>\n\n\n\n<li>Crea un log con los \u00faltimos 20 errores del sistema<\/li>\n\n\n\n<li>Pon el servicio SSH en inicio autom\u00e1tico<\/li>\n<\/ol>\n\n\n\n<p>Si quieres, puedo revisar tus comandos cuando los tengas.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe2 Cuando termines este bloque, pasamos al siguiente:<\/h1>\n\n\n\n<p><strong>Seguridad avanzada: auditor\u00eda, hardening, pol\u00edticas, control remoto, y buenas pr\u00e1cticas de servidor.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Usuarios de dominios: Active Directory<\/h2>\n\n\n\n<p>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.&nbsp;<\/p>\n\n\n\n<p>Muy buena pregunta, porque aqu\u00ed entramos en&nbsp;<strong>la gesti\u00f3n de identidades en redes corporativas<\/strong>, que es una parte central de los sistemas Windows. Voy a conectarlo con lo que ya conoces de&nbsp;<strong>Unix\/Linux<\/strong>&nbsp;para que se entienda mejor.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1. En Linux: \/etc\/passwd y \/etc\/group<\/h1>\n\n\n\n<p>En sistemas tipo Unix como&nbsp;<strong>Linux<\/strong>, los usuarios y grupos se guardan tradicionalmente en archivos de texto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Usuarios<\/h3>\n\n\n\n<p>Archivo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/etc\/passwd<\/pre>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">david:x:1000:1000:David Sanchez:\/home\/david:\/bin\/bash<\/pre>\n\n\n\n<p>Campos:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>campo<\/th><th>significado<\/th><\/tr><\/thead><tbody><tr><td>usuario<\/td><td>nombre<\/td><\/tr><tr><td>UID<\/td><td>identificador<\/td><\/tr><tr><td>GID<\/td><td>grupo<\/td><\/tr><tr><td>home<\/td><td>directorio<\/td><\/tr><tr><td>shell<\/td><td>int\u00e9rprete<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Grupos<\/h3>\n\n\n\n<p>Archivo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/etc\/group<\/pre>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">admins:x:1001:david,maria<\/pre>\n\n\n\n<p>Todo esto es&nbsp;<strong>local a ese ordenador<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. El problema en redes grandes<\/h1>\n\n\n\n<p>Imagina una empresa con:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">5000 empleados<br>300 servidores<br>2000 PCs<\/pre>\n\n\n\n<p>Si cada m\u00e1quina tuviera usuarios locales ser\u00eda un caos.<\/p>\n\n\n\n<p>Habr\u00eda que crear el usuario&nbsp;<strong>en cada equipo<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. La soluci\u00f3n: directorios centralizados<\/h1>\n\n\n\n<p>Aqu\u00ed entran sistemas como&nbsp;<strong>Active Directory<\/strong>.<\/p>\n\n\n\n<p>La idea:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">un servidor central<br>\u2192 guarda todos los usuarios<br>\u2192 todos los equipos lo consultan<\/pre>\n\n\n\n<p>As\u00ed un usuario puede iniciar sesi\u00f3n&nbsp;<strong>en cualquier ordenador de la empresa<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. Qu\u00e9 es Active Directory<\/h1>\n\n\n\n<p><strong>Active Directory<\/strong>&nbsp;es un sistema de&nbsp;<strong>gesti\u00f3n centralizada de identidades y recursos<\/strong>&nbsp;creado por&nbsp;<strong>Microsoft<\/strong>.<\/p>\n\n\n\n<p>Permite administrar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>usuarios<\/li>\n\n\n\n<li>grupos<\/li>\n\n\n\n<li>ordenadores<\/li>\n\n\n\n<li>pol\u00edticas de seguridad<\/li>\n\n\n\n<li>recursos de red.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. Concepto clave: el dominio<\/h1>\n\n\n\n<p>En Active Directory todo gira alrededor de un&nbsp;<strong>dominio<\/strong>.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">empresa.local<\/pre>\n\n\n\n<p>Ese dominio tiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>usuarios<\/li>\n\n\n\n<li>equipos<\/li>\n\n\n\n<li>servidores.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. Domain Controller<\/h1>\n\n\n\n<p>El servidor que guarda la base de datos se llama:<\/p>\n\n\n\n<p><strong>Domain Controller<\/strong><\/p>\n\n\n\n<p>Este servidor contiene el directorio completo.<\/p>\n\n\n\n<p>Los PCs de la red se&nbsp;<strong>unen al dominio<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. La base de datos de AD<\/h1>\n\n\n\n<p>Active Directory guarda los objetos en una base de datos llamada:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">NTDS.dit<\/pre>\n\n\n\n<p>Contiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>usuarios<\/li>\n\n\n\n<li>grupos<\/li>\n\n\n\n<li>permisos<\/li>\n\n\n\n<li>equipos.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. Objetos de Active Directory<\/h1>\n\n\n\n<p>Todo en AD es un&nbsp;<strong>objeto<\/strong>.<\/p>\n\n\n\n<p>Ejemplos:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>objeto<\/th><th>ejemplo<\/th><\/tr><\/thead><tbody><tr><td>usuario<\/td><td>juan<\/td><\/tr><tr><td>grupo<\/td><td>administradores<\/td><\/tr><tr><td>equipo<\/td><td>PC-VENTAS-01<\/td><\/tr><tr><td>impresora<\/td><td>HP-LASER<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. Estructura jer\u00e1rquica<\/h1>\n\n\n\n<p>AD organiza objetos en una jerarqu\u00eda.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">empresa.local<br>\u2502<br>\u251c\u2500\u2500 Usuarios<br>\u2502   \u251c\u2500\u2500 Juan<br>\u2502   \u2514\u2500\u2500 Ana<br>\u2502<br>\u251c\u2500\u2500 Equipos<br>\u2502   \u251c\u2500\u2500 PC01<br>\u2502   \u2514\u2500\u2500 PC02<br>\u2502<br>\u2514\u2500\u2500 Servidores<\/pre>\n\n\n\n<p>Esto se organiza mediante&nbsp;<strong>Unidades Organizativas (OU)<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. Inicio de sesi\u00f3n en dominio<\/h1>\n\n\n\n<p>Cuando un usuario inicia sesi\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">PC<br>\u2193<br>env\u00eda credenciales<br>\u2193<br>Domain Controller<br>\u2193<br>verifica contrase\u00f1a<br>\u2193<br>devuelve token de seguridad<\/pre>\n\n\n\n<p>Ese token contiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SID del usuario<\/li>\n\n\n\n<li>grupos<\/li>\n\n\n\n<li>privilegios.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. Protocolos que usa Active Directory<\/h1>\n\n\n\n<p>AD combina varios est\u00e1ndares.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>protocolo<\/th><th>funci\u00f3n<\/th><\/tr><\/thead><tbody><tr><td><strong>LDAP<\/strong><\/td><td>acceder al directorio<\/td><\/tr><tr><td><strong>Kerberos<\/strong><\/td><td>autenticaci\u00f3n<\/td><\/tr><tr><td><strong>DNS<\/strong><\/td><td>localizar servidores<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. Grupos de dominio<\/h1>\n\n\n\n<p>Igual que en Linux hay grupos, en AD existen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>grupos globales<\/li>\n\n\n\n<li>grupos locales<\/li>\n\n\n\n<li>grupos universales.<\/li>\n<\/ul>\n\n\n\n<p>Se usan para asignar permisos.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Grupo: Ventas<br>\u2193<br>Permiso a carpeta \\\\servidor\\ventas<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">13. ACLs con usuarios de dominio<\/h1>\n\n\n\n<p>Cuando asignas permisos a una carpeta NTFS puedes poner:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">DOMINIO\\Juan<br>DOMINIO\\Ventas<\/pre>\n\n\n\n<p>Windows usa el&nbsp;<strong>SID del dominio<\/strong>&nbsp;para identificarlo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">14. Pol\u00edticas de grupo (GPO)<\/h1>\n\n\n\n<p>Una caracter\u00edstica muy potente de AD son las:<\/p>\n\n\n\n<p><strong>Group Policy<\/strong><\/p>\n\n\n\n<p>Permiten configurar miles de PCs autom\u00e1ticamente.<\/p>\n\n\n\n<p>Ejemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>fondo de pantalla corporativo<\/li>\n\n\n\n<li>instalar software<\/li>\n\n\n\n<li>bloquear USB<\/li>\n\n\n\n<li>pol\u00edticas de contrase\u00f1a.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">15. Sistemas similares a Active Directory<\/h1>\n\n\n\n<p>Existen alternativas en el mundo Unix\/Linux.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">LDAP<\/h3>\n\n\n\n<p>El est\u00e1ndar base es&nbsp;<strong>LDAP<\/strong>.<\/p>\n\n\n\n<p>Muchos sistemas usan LDAP para gestionar usuarios.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">OpenLDAP<\/h3>\n\n\n\n<p>Implementaci\u00f3n libre de LDAP:<\/p>\n\n\n\n<p><strong>OpenLDAP<\/strong><\/p>\n\n\n\n<p>Muy usada en servidores Linux.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">FreeIPA<\/h3>\n\n\n\n<p>Sistema completo de identidad para Linux:<\/p>\n\n\n\n<p><strong>FreeIPA<\/strong><\/p>\n\n\n\n<p>Integra:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>LDAP<\/li>\n\n\n\n<li>Kerberos<\/li>\n\n\n\n<li>DNS.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Samba Active Directory<\/h3>\n\n\n\n<p>Los servidores Linux pueden actuar como AD mediante:<\/p>\n\n\n\n<p><strong>Samba<\/strong><\/p>\n\n\n\n<p>Esto permite crear&nbsp;<strong>controladores de dominio compatibles con Windows<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">16. Equivalencia conceptual<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Linux<\/th><th>Windows<\/th><\/tr><\/thead><tbody><tr><td>\/etc\/passwd<\/td><td>usuarios locales<\/td><\/tr><tr><td>\/etc\/group<\/td><td>grupos<\/td><\/tr><tr><td>LDAP<\/td><td>Active Directory<\/td><\/tr><tr><td>Kerberos<\/td><td>autenticaci\u00f3n de dominio<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">17. Idea clave<\/h1>\n\n\n\n<p>Active Directory no es solo usuarios.<\/p>\n\n\n\n<p>Es realmente:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">base de datos<br>+<br>sistema de autenticaci\u00f3n<br>+<br>gesti\u00f3n de pol\u00edticas<br>+<br>directorio de recursos<\/pre>\n\n\n\n<p>Es el&nbsp;<strong>centro de identidad de toda la red<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\ud83d\udca1 Si quieres, puedo explicarte tambi\u00e9n algo muy interesante que suele confundir mucho:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>la diferencia entre autenticaci\u00f3n y autorizaci\u00f3n<\/strong><\/li>\n\n\n\n<li>c\u00f3mo funciona exactamente\u00a0<strong>Kerberos cuando inicias sesi\u00f3n en un dominio<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Te aclaro primero una cosa importante:&nbsp;<strong>Citrix<\/strong>&nbsp;no es exactamente un sistema de identidades como&nbsp;<strong>Active Directory<\/strong>.<br>Citrix se apoya en Active Directory para los usuarios, pero su funci\u00f3n es&nbsp;<strong>otra capa distinta<\/strong>.<\/p>\n\n\n\n<p>Voy a separarlo en tres partes claras:<\/p>\n\n\n\n<p>1\ufe0f\u20e3 qu\u00e9 es Citrix<br>2\ufe0f\u20e3 otros sistemas parecidos (virtualizaci\u00f3n y acceso remoto)<br>3\ufe0f\u20e3 c\u00f3mo entra&nbsp;<strong>Kerberos<\/strong>&nbsp;en todo esto.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1. Qu\u00e9 es Citrix realmente<\/h1>\n\n\n\n<p><strong>Citrix<\/strong>&nbsp;es una plataforma para&nbsp;<strong>ejecutar aplicaciones o escritorios de forma remota<\/strong>.<\/p>\n\n\n\n<p>La idea es esta:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">usuario<br>\u2193<br>se conecta a servidor<br>\u2193<br>las aplicaciones se ejecutan en el servidor<br>\u2193<br>solo se env\u00eda la pantalla al usuario<\/pre>\n\n\n\n<p>Es decir:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">teclado \/ rat\u00f3n \u2192 servidor<br>pantalla \u2190 servidor<\/pre>\n\n\n\n<p>El ordenador del usuario&nbsp;<strong>no ejecuta realmente el programa<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. Para qu\u00e9 se usa Citrix<\/h1>\n\n\n\n<p>Se usa mucho en empresas grandes para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>aplicaciones corporativas<\/li>\n\n\n\n<li>hospitales<\/li>\n\n\n\n<li>banca<\/li>\n\n\n\n<li>administraci\u00f3n p\u00fablica.<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo t\u00edpico:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">usuario desde casa<br>\u2193<br>abre Citrix<br>\u2193<br>ve el escritorio de la empresa<br>\u2193<br>ejecuta SAP o software corporativo<\/pre>\n\n\n\n<p>Todo corre en servidores del datacenter.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. Componentes principales de Citrix<\/h1>\n\n\n\n<p>Un sistema Citrix suele tener:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Citrix Gateway<\/h3>\n\n\n\n<p>Entrada desde Internet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Delivery Controller<\/h3>\n\n\n\n<p>Decide qu\u00e9 servidor ejecutar\u00e1 la sesi\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">VDA (Virtual Desktop Agent)<\/h3>\n\n\n\n<p>Servidor donde corre el escritorio o aplicaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Citrix Workspace<\/h3>\n\n\n\n<p>Cliente del usuario.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. Diferencia con Active Directory<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>sistema<\/th><th>funci\u00f3n<\/th><\/tr><\/thead><tbody><tr><td>Active Directory<\/td><td>identidades<\/td><\/tr><tr><td>Citrix<\/td><td>acceso remoto a aplicaciones<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Citrix normalmente&nbsp;<strong>usa Active Directory para autenticar usuarios<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. Sistemas parecidos a Citrix<\/h1>\n\n\n\n<p>Hay varias tecnolog\u00edas similares.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Remote Desktop Services<\/h2>\n\n\n\n<p>El sistema de Microsoft:<\/p>\n\n\n\n<p><strong>Remote Desktop Services<\/strong><\/p>\n\n\n\n<p>Permite ejecutar escritorios remotos en Windows Server.<\/p>\n\n\n\n<p>Es como Citrix pero integrado en Windows.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">VMware Horizon<\/h2>\n\n\n\n<p>Plataforma de virtualizaci\u00f3n de escritorios:<\/p>\n\n\n\n<p><strong>VMware Horizon<\/strong><\/p>\n\n\n\n<p>Muy usada en empresas.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">VDI (Virtual Desktop Infrastructure)<\/h2>\n\n\n\n<p>Es el concepto general:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">PCs virtuales en servidores<br>\u2193<br>usuarios acceden remotamente<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. C\u00f3mo entra Kerberos en todo esto<\/h1>\n\n\n\n<p>Ahora llegamos a algo importante.<\/p>\n\n\n\n<p>Cuando inicias sesi\u00f3n en un dominio Windows, se usa&nbsp;<strong>Kerberos<\/strong>.<\/p>\n\n\n\n<p>Kerberos es un sistema de&nbsp;<strong>autenticaci\u00f3n segura en red<\/strong>.<\/p>\n\n\n\n<p>Fue desarrollado originalmente en el MIT.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. El problema que resuelve Kerberos<\/h1>\n\n\n\n<p>Imagina este escenario:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">usuario<br>\u2193<br>accede a servidor archivos<br>\u2193<br>accede a servidor correo<br>\u2193<br>accede a servidor aplicaciones<\/pre>\n\n\n\n<p>Sin Kerberos tendr\u00edas que:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">introducir contrase\u00f1a en cada servidor<\/pre>\n\n\n\n<p>Eso es inseguro.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. La idea de Kerberos<\/h1>\n\n\n\n<p>Kerberos usa&nbsp;<strong>tickets de autenticaci\u00f3n<\/strong>.<\/p>\n\n\n\n<p>Proceso simplificado:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">login usuario<br>\u2193<br>servidor autenticaci\u00f3n<br>\u2193<br>entrega ticket<br>\u2193<br>usuario usa ticket para acceder a servicios<\/pre>\n\n\n\n<p>El usuario&nbsp;<strong>no env\u00eda la contrase\u00f1a constantemente<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. Componentes de Kerberos<\/h1>\n\n\n\n<p>Hay tres actores principales:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>componente<\/th><th>funci\u00f3n<\/th><\/tr><\/thead><tbody><tr><td>cliente<\/td><td>usuario<\/td><\/tr><tr><td>servidor<\/td><td>servicio<\/td><\/tr><tr><td>KDC<\/td><td>servidor de autenticaci\u00f3n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>KDC significa:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Key Distribution Center<\/pre>\n\n\n\n<p>En Active Directory el&nbsp;<strong>Domain Controller act\u00faa como KDC<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. Flujo simplificado de Kerberos<\/h1>\n\n\n\n<p>1\ufe0f\u20e3 usuario inicia sesi\u00f3n<\/p>\n\n\n\n<p>2\ufe0f\u20e3 el sistema pide un ticket al KDC<\/p>\n\n\n\n<p>3\ufe0f\u20e3 el KDC devuelve un&nbsp;<strong>Ticket Granting Ticket (TGT)<\/strong><\/p>\n\n\n\n<p>4\ufe0f\u20e3 con ese ticket el usuario puede pedir acceso a servicios.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">usuario<br>\u2193<br>login dominio<br>\u2193<br>recibe TGT<br>\u2193<br>accede a servidor archivos<br>\u2193<br>recibe ticket servicio<\/pre>\n\n\n\n<p>Todo ocurre autom\u00e1ticamente.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. Por qu\u00e9 Kerberos es seguro<\/h1>\n\n\n\n<p>Ventajas:<\/p>\n\n\n\n<p>\u2714 no env\u00eda contrase\u00f1as constantemente<br>\u2714 usa criptograf\u00eda<br>\u2714 evita ataques de repetici\u00f3n.<\/p>\n\n\n\n<p>Por eso lo usan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Windows<\/li>\n\n\n\n<li>Linux<\/li>\n\n\n\n<li>macOS<\/li>\n\n\n\n<li>sistemas empresariales.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. Ejemplo real en una empresa<\/h1>\n\n\n\n<pre class=\"wp-block-preformatted\">usuario inicia sesi\u00f3n en PC<br>\u2193<br>Active Directory autentica con Kerberos<br>\u2193<br>usuario abre Citrix<br>\u2193<br>Citrix usa el mismo ticket Kerberos<br>\u2193<br>accede a aplicaciones<\/pre>\n\n\n\n<p>Esto se llama:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Single Sign-On (SSO)<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">13. Otros sistemas de identidad modernos<\/h1>\n\n\n\n<p>Adem\u00e1s de Active Directory existen sistemas actuales como:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Azure AD<\/h3>\n\n\n\n<p><strong>Microsoft Entra ID<\/strong><\/p>\n\n\n\n<p>Directorio de identidades en la nube.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Okta<\/h3>\n\n\n\n<p><strong>Okta<\/strong><\/p>\n\n\n\n<p>Plataforma de identidad para aplicaciones web.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Keycloak<\/h3>\n\n\n\n<p><strong>Keycloak<\/strong><\/p>\n\n\n\n<p>Sistema open source de autenticaci\u00f3n.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">14. Resumen conceptual<\/h1>\n\n\n\n<p>Hay varias capas:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">identidad<br>\u2193<br>Active Directory<br>\u2193<br>autenticaci\u00f3n<br>\u2193<br>Kerberos<br>\u2193<br>acceso aplicaciones<br>\u2193<br>Citrix \/ RDS \/ VDI<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\ud83d\udca1 Si quieres, puedo explicarte algo muy interesante que casi nadie explica bien pero ayuda mucho a entender redes empresariales:<\/p>\n\n\n\n<p><strong>la diferencia entre:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>autenticaci\u00f3n<\/li>\n\n\n\n<li>autorizaci\u00f3n<\/li>\n\n\n\n<li>federaci\u00f3n de identidad<\/li>\n\n\n\n<li>Single Sign-On<\/li>\n<\/ul>\n\n\n\n<p>y c\u00f3mo se conectan&nbsp;<strong>Active Directory, Kerberos, SAML y OAuth<\/strong>. Es b\u00e1sicamente&nbsp;<strong>la arquitectura de identidad de Internet moderno<\/strong>.<\/p>\n\n\n\n<p>Te voy a explicar&nbsp;<strong>la arquitectura moderna de identidad<\/strong>, porque conecta todo lo que hemos visto:&nbsp;<strong>Active Directory, Kerberos, Citrix, Azure AD, SSO, etc.<\/strong><br>Es b\u00e1sicamente&nbsp;<strong>c\u00f3mo se controla qui\u00e9n puede acceder a qu\u00e9 en redes y en Internet<\/strong>.<\/p>\n\n\n\n<p>Primero aclaramos&nbsp;<strong>4 conceptos fundamentales<\/strong>&nbsp;que muchas veces se confunden.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1. Autenticaci\u00f3n vs Autorizaci\u00f3n<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Autenticaci\u00f3n<\/h2>\n\n\n\n<p>Responder a la pregunta:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u00bfQui\u00e9n eres?<\/pre>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>usuario introduce contrase\u00f1a<\/li>\n\n\n\n<li>usa tarjeta inteligente<\/li>\n\n\n\n<li>usa biometr\u00eda.<\/li>\n<\/ul>\n\n\n\n<p>Protocolos t\u00edpicos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Kerberos<\/strong><\/li>\n\n\n\n<li><strong>LDAP<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Autorizaci\u00f3n<\/h2>\n\n\n\n<p>Responder a la pregunta:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u00bfqu\u00e9 puedes hacer?<\/pre>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>usuario<\/th><th>permiso<\/th><\/tr><\/thead><tbody><tr><td>Juan<\/td><td>leer carpeta<\/td><\/tr><tr><td>Ana<\/td><td>modificar carpeta<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Esto se implementa con:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ACL<\/li>\n\n\n\n<li>roles<\/li>\n\n\n\n<li>grupos.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. Identidad digital<\/h1>\n\n\n\n<p>En redes corporativas cada persona tiene una&nbsp;<strong>identidad digital<\/strong>.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">usuario: juan<br>correo: juan@empresa.com<br>grupos: ventas<\/pre>\n\n\n\n<p>Estas identidades se guardan en un&nbsp;<strong>directorio<\/strong>&nbsp;como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Active Directory<\/strong><\/li>\n\n\n\n<li><strong>OpenLDAP<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. Single Sign-On (SSO)<\/h1>\n\n\n\n<p>SSO significa:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">iniciar sesi\u00f3n una vez<br>\u2193<br>acceder a muchos sistemas<\/pre>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">login PC empresa<br>\u2193<br>correo<br>\u2193<br>intranet<br>\u2193<br>Citrix<br>\u2193<br>aplicaciones corporativas<\/pre>\n\n\n\n<p>Todo sin volver a introducir contrase\u00f1a.<\/p>\n\n\n\n<p>Esto se logra con sistemas de&nbsp;<strong>tickets o tokens<\/strong>.<\/p>\n\n\n\n<p>Ejemplo:&nbsp;<strong>Kerberos<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. Federaci\u00f3n de identidad<\/h1>\n\n\n\n<p>Aqu\u00ed entramos en algo m\u00e1s moderno.<\/p>\n\n\n\n<p>Federaci\u00f3n significa:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">un sistema conf\u00eda en la identidad de otro<\/pre>\n\n\n\n<p>Ejemplo t\u00edpico:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">entrar en una web con Google<\/pre>\n\n\n\n<p>Tu cuenta Google autentica al usuario.<\/p>\n\n\n\n<p>Protocolos usados:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SAML<\/strong><\/li>\n\n\n\n<li><strong>OAuth 2.0<\/strong><\/li>\n\n\n\n<li><strong>OpenID Connect<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. C\u00f3mo funciona la identidad en empresas modernas<\/h1>\n\n\n\n<p>La arquitectura suele ser as\u00ed:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">usuarios<br>\u2193<br>directorio de identidad<br>\u2193<br>autenticaci\u00f3n<br>\u2193<br>tokens<br>\u2193<br>acceso a aplicaciones<\/pre>\n\n\n\n<p>Ejemplo real:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">usuario<br>\u2193<br>Active Directory<br>\u2193<br>Kerberos<br>\u2193<br>SSO<br>\u2193<br>Citrix \/ aplicaciones<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. Qu\u00e9 es Azure AD (actualmente Entra ID)<\/h1>\n\n\n\n<p>Lo que antes se llamaba&nbsp;<strong>Azure Active Directory<\/strong>&nbsp;ahora se llama&nbsp;<strong>Microsoft Entra ID<\/strong>.<\/p>\n\n\n\n<p>Es b\u00e1sicamente&nbsp;<strong>Active Directory pero en la nube<\/strong>.<\/p>\n\n\n\n<p>Pero hay una diferencia importante.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. Diferencia entre Active Directory y Azure AD<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>caracter\u00edstica<\/th><th>Active Directory<\/th><th>Azure AD<\/th><\/tr><\/thead><tbody><tr><td>entorno<\/td><td>red local<\/td><td>nube<\/td><\/tr><tr><td>protocolos<\/td><td>Kerberos, LDAP<\/td><td>OAuth, SAML<\/td><\/tr><tr><td>uso<\/td><td>PCs y servidores<\/td><td>aplicaciones web<\/td><\/tr><tr><td>ubicaci\u00f3n<\/td><td>datacenter empresa<\/td><td>cloud Microsoft<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Active Directory<\/h2>\n\n\n\n<p>Gestiona:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PCs del dominio<\/li>\n\n\n\n<li>usuarios de red<\/li>\n\n\n\n<li>servidores.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Azure AD<\/h2>\n\n\n\n<p>Gestiona:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>identidades cloud<\/li>\n\n\n\n<li>Microsoft 365<\/li>\n\n\n\n<li>aplicaciones SaaS.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. Ejemplo pr\u00e1ctico Azure AD<\/h1>\n\n\n\n<p>Un usuario inicia sesi\u00f3n en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Microsoft 365<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Proceso:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">usuario<br>\u2193<br>login Microsoft<br>\u2193<br>Azure AD autentica<br>\u2193<br>recibe token<br>\u2193<br>accede a Outlook \/ Teams<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. Tokens modernos<\/h1>\n\n\n\n<p>En sistemas web no se usan tickets Kerberos.<\/p>\n\n\n\n<p>Se usan&nbsp;<strong>tokens<\/strong>.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">JWT<\/pre>\n\n\n\n<p>(JSON Web Token)<\/p>\n\n\n\n<p>Contiene:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">usuario<br>permisos<br>expiraci\u00f3n<br>firma criptogr\u00e1fica<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. Arquitectura t\u00edpica moderna<\/h1>\n\n\n\n<p>En muchas empresas hoy existe esto:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">usuarios<br>\u2193<br>Active Directory<br>\u2193<br>sincronizaci\u00f3n<br>\u2193<br>Azure AD<br>\u2193<br>aplicaciones cloud<\/pre>\n\n\n\n<p>La sincronizaci\u00f3n se hace con herramientas de Microsoft.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. Ejemplo real en una empresa grande<\/h1>\n\n\n\n<pre class=\"wp-block-preformatted\">usuario inicia sesi\u00f3n PC<br>\u2193<br>Active Directory autentica<br>\u2193<br>Kerberos<br>\u2193<br>SSO<br>\u2193<br>abre navegador<br>\u2193<br>Azure AD<br>\u2193<br>acceso a Microsoft 365<br>\u2193<br>acceso a Salesforce<br>\u2193<br>acceso a aplicaciones SaaS<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. Otros sistemas similares a Azure AD<\/h1>\n\n\n\n<p>Varias empresas ofrecen sistemas de identidad.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Okta<\/h3>\n\n\n\n<p><strong>Okta<\/strong><\/p>\n\n\n\n<p>Muy popular en SaaS.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Keycloak<\/h3>\n\n\n\n<p><strong>Keycloak<\/strong><\/p>\n\n\n\n<p>Open source.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Ping Identity<\/h3>\n\n\n\n<p><strong>Ping Identity<\/strong><\/p>\n\n\n\n<p>Usado en grandes empresas.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">13. Concepto clave: Identity Provider<\/h1>\n\n\n\n<p>Todos estos sistemas act\u00faan como:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Identity Provider (IdP)<\/pre>\n\n\n\n<p>Es decir:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">servicio que confirma tu identidad<\/pre>\n\n\n\n<p>Ejemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Azure AD<\/li>\n\n\n\n<li>Okta<\/li>\n\n\n\n<li>Google.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">14. La arquitectura completa de identidad moderna<\/h1>\n\n\n\n<pre class=\"wp-block-preformatted\">usuarios<br>\u2193<br>Identity Provider<br>\u2193<br>autenticaci\u00f3n<br>\u2193<br>token<br>\u2193<br>aplicaciones<\/pre>\n\n\n\n<p>Protocolos m\u00e1s usados hoy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SAML<\/li>\n\n\n\n<li>OAuth<\/li>\n\n\n\n<li>OpenID Connect.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\ud83d\udca1 Si quieres, puedo explicarte algo muy interesante que conecta&nbsp;<strong>todo lo que hemos visto (sistemas operativos + redes + identidad)<\/strong>:<\/p>\n\n\n\n<p><strong>c\u00f3mo funciona realmente el inicio de sesi\u00f3n en una empresa desde que enciendes el PC hasta que puedes abrir aplicaciones en la nube<\/strong>.<\/p>\n\n\n\n<p>Ese flujo mezcla:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DNS<\/li>\n\n\n\n<li>Active Directory<\/li>\n\n\n\n<li>Kerberos<\/li>\n\n\n\n<li>Azure AD<\/li>\n\n\n\n<li>tokens<\/li>\n\n\n\n<li>SSO<\/li>\n<\/ul>\n\n\n\n<p>y es&nbsp;<strong>una de las arquitecturas m\u00e1s elegantes de la inform\u00e1tica moderna<\/strong>.<\/p>\n\n\n\n<p>Vamos a cerrar el \u201cmapa mental\u201d completo de&nbsp;<strong>identidad y acceso en sistemas modernos<\/strong>. Esto conecta&nbsp;<strong>Active Directory, Kerberos, SAML, OAuth, OpenID, Azure AD, Citrix, etc.<\/strong>.<br>Si entiendes esto, pr\u00e1cticamente entiendes&nbsp;<strong>c\u00f3mo funciona la autenticaci\u00f3n en casi todo Internet y en redes empresariales<\/strong>. \ud83d\udd10<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1. Primero: tres conceptos b\u00e1sicos<\/h1>\n\n\n\n<p>Antes de entrar en protocolos, hay que distinguir&nbsp;<strong>tres cosas distintas<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1\ufe0f\u20e3 Autenticaci\u00f3n (Authentication)<\/h3>\n\n\n\n<p>Demostrar&nbsp;<strong>qui\u00e9n eres<\/strong>.<\/p>\n\n\n\n<p>Ejemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Usuario + contrase\u00f1a<\/li>\n\n\n\n<li>certificado<\/li>\n\n\n\n<li>token<\/li>\n\n\n\n<li>huella<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo real:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">usuario: david<br>password: ****<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">2\ufe0f\u20e3 Autorizaci\u00f3n (Authorization)<\/h3>\n\n\n\n<p>Determinar&nbsp;<strong>qu\u00e9 puedes hacer<\/strong>&nbsp;despu\u00e9s de autenticarte.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Usuario<\/th><th>Permiso<\/th><\/tr><\/thead><tbody><tr><td>david<\/td><td>leer carpeta<\/td><\/tr><tr><td>admin<\/td><td>leer + escribir<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Esto suele usarse con&nbsp;<strong>ACLs<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">3\ufe0f\u20e3 Identidad (Identity)<\/h3>\n\n\n\n<p>Sistema central que guarda:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>usuarios<\/li>\n\n\n\n<li>grupos<\/li>\n\n\n\n<li>permisos<\/li>\n\n\n\n<li>pol\u00edticas<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Active Directory<\/li>\n\n\n\n<li>LDAP<\/li>\n\n\n\n<li>Azure AD<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. Qu\u00e9 es Kerberos<\/h1>\n\n\n\n<p>Kerberos<\/p>\n\n\n\n<p>Es el&nbsp;<strong>protocolo de autenticaci\u00f3n de redes usado por Windows en dominios<\/strong>.<\/p>\n\n\n\n<p>La idea es&nbsp;<strong>no enviar la contrase\u00f1a cada vez<\/strong>.<\/p>\n\n\n\n<p>En vez de eso se usan&nbsp;<strong>tickets temporales<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Funcionamiento simplificado<\/h2>\n\n\n\n<p>Supongamos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>usuario: David<\/li>\n\n\n\n<li>servidor: FileServer<\/li>\n\n\n\n<li>controlador de dominio: AD<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 1 \u2014 login<\/h3>\n\n\n\n<p>David inicia sesi\u00f3n en su PC.<\/p>\n\n\n\n<p>El PC pide autenticaci\u00f3n al&nbsp;<strong>controlador de dominio<\/strong>.<\/p>\n\n\n\n<p>El controlador responde con un:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">TGT = Ticket Granting Ticket<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 2 \u2014 acceso a recursos<\/h3>\n\n\n\n<p>Cuando David quiere acceder a un servidor:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\\\\fileserver\\documentos<\/pre>\n\n\n\n<p>El PC pide al controlador:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ticket para fileserver<\/pre>\n\n\n\n<p>El controlador entrega un&nbsp;<strong>service ticket<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 3 \u2014 acceso<\/h3>\n\n\n\n<p>El servidor recibe el ticket.<\/p>\n\n\n\n<p>Lo valida.<\/p>\n\n\n\n<p>Y permite el acceso.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Ventajas<\/h3>\n\n\n\n<p>\u2714 no se env\u00edan contrase\u00f1as por la red<br>\u2714 autenticaci\u00f3n r\u00e1pida<br>\u2714 tickets temporales<\/p>\n\n\n\n<p>Por eso es usado por:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Windows domain<\/li>\n\n\n\n<li>Linux enterprise<\/li>\n\n\n\n<li>HPC clusters<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. Qu\u00e9 es SAML<\/h1>\n\n\n\n<p>SAML<\/p>\n\n\n\n<p>SAML se usa mucho en&nbsp;<strong>login corporativo en webs<\/strong>.<\/p>\n\n\n\n<p>Ejemplo t\u00edpico:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Login with company account<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo real<\/h3>\n\n\n\n<p>Intentas entrar a:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Salesforce<\/pre>\n\n\n\n<p>Pero la empresa usa login corporativo.<\/p>\n\n\n\n<p>Proceso:<\/p>\n\n\n\n<p>1\ufe0f\u20e3 vas a Salesforce<br>2\ufe0f\u20e3 te redirige a login empresa<br>3\ufe0f\u20e3 empresa te autentica<br>4\ufe0f\u20e3 env\u00eda una&nbsp;<strong>SAML assertion<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Resultado<\/h3>\n\n\n\n<p>Salesforce recibe algo como:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Usuario: david@empresa.com<br>Autenticado: SI<\/pre>\n\n\n\n<p>Y te deja entrar.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Usos comunes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Google Workspace<\/li>\n\n\n\n<li>Office 365<\/li>\n\n\n\n<li>Slack<\/li>\n\n\n\n<li>Atlassian<\/li>\n\n\n\n<li>Salesforce<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. Qu\u00e9 es OAuth<\/h1>\n\n\n\n<p>OAuth 2.0<\/p>\n\n\n\n<p>OAuth sirve para&nbsp;<strong>dar acceso a una aplicaci\u00f3n sin compartir contrase\u00f1a<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo cl\u00e1sico<\/h3>\n\n\n\n<p>\u201cLogin with Google\u201d.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Proceso:<\/p>\n\n\n\n<p>1\ufe0f\u20e3 app pide acceso<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">quiero acceso a tu email<\/pre>\n\n\n\n<p>2\ufe0f\u20e3 Google muestra consentimiento<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u00bfpermitir acceso?<\/pre>\n\n\n\n<p>3\ufe0f\u20e3 si aceptas \u2192 Google entrega&nbsp;<strong>access token<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">El token permite<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">leer perfil<br>leer email<\/pre>\n\n\n\n<p>pero&nbsp;<strong>sin conocer tu contrase\u00f1a<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. Qu\u00e9 es OpenID Connect<\/h1>\n\n\n\n<p>OpenID Connect<\/p>\n\n\n\n<p>OpenID Connect es&nbsp;<strong>OAuth + identidad<\/strong>.<\/p>\n\n\n\n<p>Es decir:<\/p>\n\n\n\n<p>OAuth = autorizaci\u00f3n<br>OpenID = autenticaci\u00f3n<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Login with Google<br>Login with Apple<br>Login with Microsoft<\/pre>\n\n\n\n<p>Todo esto usa&nbsp;<strong>OpenID Connect<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. Qu\u00e9 es Azure AD<\/h1>\n\n\n\n<p>Microsoft Entra ID<\/p>\n\n\n\n<p>Antes se llamaba&nbsp;<strong>Azure AD<\/strong>.<\/p>\n\n\n\n<p>Ahora se llama&nbsp;<strong>Microsoft Entra ID<\/strong>.<\/p>\n\n\n\n<p>Es el&nbsp;<strong>Active Directory en la nube<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 gestiona<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>usuarios<\/li>\n\n\n\n<li>grupos<\/li>\n\n\n\n<li>dispositivos<\/li>\n\n\n\n<li>aplicaciones<\/li>\n\n\n\n<li>autenticaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo<\/h3>\n\n\n\n<p>Empresa usa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Windows<\/li>\n\n\n\n<li>Office365<\/li>\n\n\n\n<li>Teams<\/li>\n\n\n\n<li>SharePoint<\/li>\n<\/ul>\n\n\n\n<p>Todos usan&nbsp;<strong>Entra ID<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Permite<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SSO (Single Sign-On)<\/li>\n\n\n\n<li>MFA<\/li>\n\n\n\n<li>acceso condicional<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. Qu\u00e9 es SSO<\/h1>\n\n\n\n<p>Single Sign-On<\/p>\n\n\n\n<p>SSO =&nbsp;<strong>una sola autenticaci\u00f3n para muchas apps<\/strong>.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>Login una vez y accedes a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>correo<\/li>\n\n\n\n<li>Teams<\/li>\n\n\n\n<li>SharePoint<\/li>\n\n\n\n<li>Slack<\/li>\n<\/ul>\n\n\n\n<p>sin volver a poner contrase\u00f1a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. Qu\u00e9 es Citrix<\/h1>\n\n\n\n<p>Citrix Systems<\/p>\n\n\n\n<p>Citrix permite&nbsp;<strong>usar aplicaciones o escritorios remotos<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>Trabajador abre:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Citrix Workspace<\/pre>\n\n\n\n<p>y ve:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>escritorio Windows remoto<\/li>\n\n\n\n<li>apps corporativas<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3mo funciona<\/h3>\n\n\n\n<p>Las apps corren en:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">servidores centrales<\/pre>\n\n\n\n<p>El usuario solo ve la&nbsp;<strong>pantalla remota<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Ventajas:<\/p>\n\n\n\n<p>\u2714 seguridad<br>\u2714 datos no salen de la empresa<br>\u2714 funciona en cualquier dispositivo<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. C\u00f3mo se conectan todas estas tecnolog\u00edas<\/h1>\n\n\n\n<p>En una empresa moderna suele haber esto:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Usuario<br>   \u2193<br>Entra ID \/ Active Directory<br>   \u2193<br>Kerberos \/ OAuth \/ SAML<br>   \u2193<br>Aplicaciones<\/pre>\n\n\n\n<p>Ejemplo real:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Usuario \u2192 login Windows<br>\u2193<br>Active Directory<br>\u2193<br>SSO<br>\u2193<br>Teams<br>SharePoint<br>Salesforce<br>Citrix<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. Ejemplo real de flujo moderno<\/h1>\n\n\n\n<p>Empleado abre port\u00e1til.<\/p>\n\n\n\n<p>1\ufe0f\u20e3 login Windows<br>2\ufe0f\u20e3 autenticaci\u00f3n Kerberos<br>3\ufe0f\u20e3 obtiene ticket<br>4\ufe0f\u20e3 accede a recursos internos<\/p>\n\n\n\n<p>Luego abre navegador.<\/p>\n\n\n\n<p>5\ufe0f\u20e3 accede a Teams<br>6\ufe0f\u20e3 SSO con Entra ID<br>7\ufe0f\u20e3 OAuth token<br>8\ufe0f\u20e3 acceso permitido<\/p>\n\n\n\n<p>Todo&nbsp;<strong>sin volver a introducir contrase\u00f1a<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. Otros sistemas similares a Active Directory<\/h1>\n\n\n\n<p>Alternativas comunes:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Linux \/ open source<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OpenLDAP<\/li>\n\n\n\n<li>FreeIPA<\/li>\n\n\n\n<li>389 Directory Server<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Empresas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Okta<\/li>\n\n\n\n<li>Ping Identity<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. El mapa final (muy importante)<\/h1>\n\n\n\n<p>Arquitectura t\u00edpica moderna:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">                Internet<br>                    \u2502<br>              Identity Provider<br>             (Entra \/ Okta \/ AD)<br>                    \u2502<br>        \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br>        \u2502           \u2502           \u2502<br>      SAML       OAuth      OpenID<br>        \u2502           \u2502           \u2502<br>     Web Apps     APIs       Login Web<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\ud83d\udca1 Si quieres, en el siguiente nivel puedo explicarte algo&nbsp;<strong>MUY interesante que casi nadie entiende bien<\/strong>:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>C\u00f3mo funciona realmente un login en Windows dentro de un dominio paso a paso<\/strong><\/h3>\n\n\n\n<p>Veremos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>LSASS<\/li>\n\n\n\n<li>NTLM<\/li>\n\n\n\n<li>Kerberos tickets<\/li>\n\n\n\n<li>Domain Controller<\/li>\n\n\n\n<li>hash de contrase\u00f1as<\/li>\n\n\n\n<li>pass-the-hash<\/li>\n<\/ul>\n\n\n\n<p>Es&nbsp;<strong>la parte m\u00e1s profunda del sistema de seguridad de Windows<\/strong>. Y tambi\u00e9n donde ocurren la mayor\u00eda de ataques. \ud83d\udd10<\/p>\n\n\n\n<p>Vamos a entrar en&nbsp;<strong>el nivel m\u00e1s profundo del login de Windows en un dominio<\/strong>, porque aqu\u00ed aparecen muchos componentes internos que casi nadie explica juntos:&nbsp;<strong>LSASS, hashes de contrase\u00f1a, NTLM, Kerberos, Domain Controller, etc.<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1. Qu\u00e9 ocurre realmente cuando haces login en Windows<\/h1>\n\n\n\n<p>Supongamos este escenario:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>usuario:\u00a0<code>DAVID<\/code><\/li>\n\n\n\n<li>dominio:\u00a0<code>EMPRESA.LOCAL<\/code><\/li>\n\n\n\n<li>PC unido al dominio<\/li>\n\n\n\n<li>hay un\u00a0<strong>controlador de dominio<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Ese controlador suele ejecutar&nbsp;<strong>Active Directory<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. Componentes internos del login<\/h1>\n\n\n\n<p>Dentro de Windows participan varias piezas del sistema:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Componente<\/th><th>Funci\u00f3n<\/th><\/tr><\/thead><tbody><tr><td>Winlogon<\/td><td>pantalla de login<\/td><\/tr><tr><td>LSASS<\/td><td>autenticaci\u00f3n<\/td><\/tr><tr><td>SAM<\/td><td>base de datos de usuarios locales<\/td><\/tr><tr><td>Kerberos<\/td><td>autenticaci\u00f3n de dominio<\/td><\/tr><tr><td>NTLM<\/td><td>autenticaci\u00f3n antigua<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. Winlogon: la pantalla de login<\/h1>\n\n\n\n<p>Cuando ves la pantalla:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Ctrl + Alt + Del<\/pre>\n\n\n\n<p>entra en acci\u00f3n el proceso:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">winlogon.exe<\/pre>\n\n\n\n<p>Este proceso:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>recibe usuario<\/li>\n\n\n\n<li>recibe contrase\u00f1a<\/li>\n\n\n\n<li>se lo pasa al sistema de autenticaci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. LSASS (el coraz\u00f3n de la seguridad)<\/h1>\n\n\n\n<p>El proceso m\u00e1s importante es:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">lsass.exe<\/pre>\n\n\n\n<p>LSASS significa:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Local Security Authority Subsystem Service<\/pre>\n\n\n\n<p>Su trabajo es:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>verificar contrase\u00f1as<\/li>\n\n\n\n<li>generar tokens de acceso<\/li>\n\n\n\n<li>gestionar autenticaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Por qu\u00e9 es tan importante<\/h2>\n\n\n\n<p>Muchos ataques inform\u00e1ticos intentan robar credenciales desde&nbsp;<strong>LSASS<\/strong>.<\/p>\n\n\n\n<p>Herramientas famosas como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mimikatz<\/li>\n<\/ul>\n\n\n\n<p>intentan leer memoria de LSASS para robar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>hashes<\/li>\n\n\n\n<li>tickets Kerberos<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. Qu\u00e9 pasa con tu contrase\u00f1a<\/h1>\n\n\n\n<p>Cuando escribes la contrase\u00f1a:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">MiPassword123<\/pre>\n\n\n\n<p>Windows&nbsp;<strong>NO la guarda en texto<\/strong>.<\/p>\n\n\n\n<p>La convierte en un&nbsp;<strong>hash<\/strong>.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">hash = 2a7f3c9f8e4...<\/pre>\n\n\n\n<p>Ese hash es lo que se compara con la base de datos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. Base de datos de usuarios<\/h1>\n\n\n\n<p>Si el usuario es&nbsp;<strong>local<\/strong>, Windows consulta:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">SAM database<\/pre>\n\n\n\n<p>SAM significa:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Security Account Manager<\/pre>\n\n\n\n<p>Archivo interno del sistema.<\/p>\n\n\n\n<p>Contiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>usuarios<\/li>\n\n\n\n<li>hashes de contrase\u00f1as<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. Si el usuario es de dominio<\/h1>\n\n\n\n<p>En vez de SAM, Windows contacta con el:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Domain Controller<\/pre>\n\n\n\n<p>Ese servidor ejecuta:<\/p>\n\n\n\n<p><strong>Active Directory<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. Dos m\u00e9todos de autenticaci\u00f3n<\/h1>\n\n\n\n<p>Windows puede usar:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1\ufe0f\u20e3 NTLM<\/h3>\n\n\n\n<p>NTLM<\/p>\n\n\n\n<p>Protocolo antiguo.<\/p>\n\n\n\n<p>Proceso simplificado:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cliente \u2192 servidor<br>challenge<br>response<\/pre>\n\n\n\n<p>El servidor env\u00eda un&nbsp;<strong>reto<\/strong>.<\/p>\n\n\n\n<p>El cliente responde usando el hash.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Problema:<\/p>\n\n\n\n<p>NTLM es m\u00e1s vulnerable.<\/p>\n\n\n\n<p>Por eso Microsoft intenta eliminarlo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">2\ufe0f\u20e3 Kerberos (el moderno)<\/h3>\n\n\n\n<p>Kerberos<\/p>\n\n\n\n<p>Sistema basado en&nbsp;<strong>tickets<\/strong>.<\/p>\n\n\n\n<p>M\u00e1s seguro.<\/p>\n\n\n\n<p>M\u00e1s r\u00e1pido.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. Flujo completo de Kerberos<\/h1>\n\n\n\n<p>Cuando haces login:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 1<\/h3>\n\n\n\n<p>PC \u2192 Domain Controller<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Authentication request<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 2<\/h3>\n\n\n\n<p>El controlador devuelve:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">TGT<\/pre>\n\n\n\n<p>Ticket Granting Ticket.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 3<\/h3>\n\n\n\n<p>Cuando accedes a un recurso:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\\\\server\\files<\/pre>\n\n\n\n<p>El PC usa el TGT para pedir otro ticket.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 4<\/h3>\n\n\n\n<p>Obtiene:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Service Ticket<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 5<\/h3>\n\n\n\n<p>El servidor acepta el ticket.<\/p>\n\n\n\n<p>Acceso concedido.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. El Access Token (muy importante)<\/h1>\n\n\n\n<p>Cuando te autenticas, Windows crea algo llamado:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Access Token<\/pre>\n\n\n\n<p>Este token contiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tu SID<\/li>\n\n\n\n<li>tus grupos<\/li>\n\n\n\n<li>privilegios<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">SID<\/h3>\n\n\n\n<p>Security Identifier<\/p>\n\n\n\n<p>Es un identificador \u00fanico del usuario.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">S-1-5-21-3452345234-23452345-1001<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. Qu\u00e9 hace Windows con ese token<\/h1>\n\n\n\n<p>Cada vez que accedes a algo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>archivo<\/li>\n\n\n\n<li>carpeta<\/li>\n\n\n\n<li>programa<\/li>\n<\/ul>\n\n\n\n<p>Windows compara:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">token del usuario<br>VS<br>ACL del objeto<\/pre>\n\n\n\n<p>Si coincide \u2192 acceso permitido.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. Ataques famosos en dominios Windows<\/h1>\n\n\n\n<p>Muchos ataques se basan en robar:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">hashes<\/h3>\n\n\n\n<p>ataque:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Pass-the-hash<\/pre>\n\n\n\n<p>El atacante usa el hash directamente.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">tickets<\/h3>\n\n\n\n<p>ataque:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Pass-the-ticket<\/pre>\n\n\n\n<p>Roba tickets Kerberos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">ataque famoso<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">Golden Ticket<\/pre>\n\n\n\n<p>Si alguien compromete el controlador de dominio puede crear&nbsp;<strong>tickets falsos para cualquier usuario<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">13. Qu\u00e9 guarda Active Directory realmente<\/h1>\n\n\n\n<p>Dentro de&nbsp;<strong>Active Directory<\/strong>&nbsp;hay:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>usuarios<\/li>\n\n\n\n<li>grupos<\/li>\n\n\n\n<li>ordenadores<\/li>\n\n\n\n<li>pol\u00edticas<\/li>\n\n\n\n<li>certificados<\/li>\n<\/ul>\n\n\n\n<p>Todo organizado en:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Domain<br>   \u251c\u2500 Users<br>   \u251c\u2500 Groups<br>   \u251c\u2500 Computers<br>   \u2514\u2500 Organizational Units<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">14. Group Policy<\/h1>\n\n\n\n<p>Group Policy<\/p>\n\n\n\n<p>Permite aplicar configuraciones a todos los PCs.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bloquear USB<\/li>\n\n\n\n<li>instalar software<\/li>\n\n\n\n<li>configurar firewall<\/li>\n\n\n\n<li>cambiar fondo de pantalla<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">15. Arquitectura t\u00edpica de una empresa<\/h1>\n\n\n\n<p>Red empresarial:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">           Domain Controller<br>          (Active Directory)<br>                \u2502<br>       \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br>       \u2502        \u2502        \u2502<br>    PC usuario  Servidor  Aplicaciones<\/pre>\n\n\n\n<p>Todo se autentica contra el dominio.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">16. Qu\u00e9 pasa cuando el PC est\u00e1 fuera de la empresa<\/h1>\n\n\n\n<p>Si est\u00e1s en casa:<\/p>\n\n\n\n<p>Windows puede usar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>credenciales cacheadas<\/li>\n\n\n\n<li>VPN<\/li>\n\n\n\n<li>autenticaci\u00f3n en la nube<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p><strong>Microsoft Entra ID<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">17. La evoluci\u00f3n moderna<\/h1>\n\n\n\n<p>Arquitectura antigua:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Active Directory<br>+<br>Kerberos<\/pre>\n\n\n\n<p>Arquitectura moderna:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Entra ID<br>+<br>OAuth<br>+<br>OpenID Connect<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">18. El mapa completo de identidad moderna<\/h1>\n\n\n\n<pre class=\"wp-block-preformatted\">Usuario<br>   \u2502<br>Login Windows<br>   \u2502<br>LSASS<br>   \u2502<br>Kerberos<br>   \u2502<br>Active Directory<br>   \u2502<br>SSO<br>   \u2502<br>Apps corporativas<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Seguridad<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p>Vamos a entrar en <strong>uno de los bloques m\u00e1s potentes y \u00fatiles de todo el curso<\/strong>: <strong>Seguridad avanzada en Windows como servidor<\/strong>, con ejercicios pr\u00e1cticos que puedes hacer ahora mismo en tu VM.<\/p>\n\n\n\n<p>Este bloque te va a dar una visi\u00f3n que normalmente solo tienen administradores de sistemas profesionales.<\/p>\n\n\n\n<p>Lo vamos a dividir en:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Seguridad y permisos avanzados (ACLs, herencia, auditor\u00eda)<\/strong><\/li>\n\n\n\n<li><strong>Hardening del sistema<\/strong><\/li>\n\n\n\n<li><strong>Pol\u00edticas de seguridad (Local Security Policy y GPO)<\/strong><\/li>\n\n\n\n<li><strong>Auditor\u00eda del sistema<\/strong><\/li>\n\n\n\n<li><strong>Control remoto seguro<\/strong><\/li>\n\n\n\n<li><strong>Buenas pr\u00e1cticas de servidor<\/strong><\/li>\n\n\n\n<li><strong>Ejercicios pr\u00e1cticos en cada secci\u00f3n<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 1. Seguridad y permisos avanzados (ACLs, herencia, auditor\u00eda)<\/h1>\n\n\n\n<p>Windows no usa permisos POSIX. Usa <strong>ACLs (Access Control Lists)<\/strong>, que son m\u00e1s complejas pero m\u00e1s flexibles.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 Ver permisos de un archivo o carpeta<\/h2>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-Acl C:\\carpeta\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 A\u00f1adir permisos avanzados<\/h2>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$acl = Get-Acl C:\\carpeta\n$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(\"usuario\",\"Modify\",\"ContainerInherit,ObjectInherit\",\"None\",\"Allow\")\n$acl.AddAccessRule($rule)\nSet-Acl C:\\carpeta $acl\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 Quitar permisos<\/h2>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$acl.RemoveAccessRule($rule)\nSet-Acl C:\\carpeta $acl\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 Desactivar herencia (muy importante en servidores)<\/h2>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$acl = Get-Acl C:\\carpeta\n$acl.SetAccessRuleProtection($true,$false)\nSet-Acl C:\\carpeta $acl\n<\/code><\/pre>\n\n\n\n<p>Esto evita que permisos de carpetas superiores se propaguen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc <strong>Ejercicio 1 \u2014 Control total sobre una carpeta sin herencia<\/strong><\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Crea <code>C:\\seguridad<\/code><\/li>\n\n\n\n<li>Desactiva herencia<\/li>\n\n\n\n<li>Quita todos los permisos<\/li>\n\n\n\n<li>A\u00f1ade solo a tu usuario con FullControl<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 2. Hardening del sistema (reforzar Windows)<\/h1>\n\n\n\n<p>Aqu\u00ed es donde Windows se convierte en un servidor serio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 Desactivar servicios innecesarios<\/h2>\n\n\n\n<p>Lista servicios:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-Service | Sort-Object Status\n<\/code><\/pre>\n\n\n\n<p>Servicios t\u00edpicos que se pueden desactivar en un servidor aislado:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Xbox Services<\/strong><\/li>\n\n\n\n<li><strong>Print Spooler<\/strong> (si no usas impresoras)<\/li>\n\n\n\n<li><strong>Remote Registry<\/strong><\/li>\n\n\n\n<li><strong>Bluetooth Support Service<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Stop-Service -Name Spooler\nSet-Service -Name Spooler -StartupType Disabled\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 Desactivar ejecuci\u00f3n autom\u00e1tica de USB<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gpedit.msc\n<\/code><\/pre>\n\n\n\n<p>Ruta:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Plantillas administrativas \u2192 Componentes de Windows \u2192 Directivas de reproducci\u00f3n autom\u00e1tica\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc <strong>Ejercicio 2 \u2014 Hardening b\u00e1sico<\/strong><\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Desactiva Print Spooler<\/li>\n\n\n\n<li>Desactiva Remote Registry<\/li>\n\n\n\n<li>Comprueba que no vuelven a iniciarse<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 3. Pol\u00edticas de seguridad (Local Security Policy y GPO)<\/h1>\n\n\n\n<p>Windows tiene un sistema muy potente de pol\u00edticas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 Abrir pol\u00edticas locales<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>secpol.msc\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 Configuraciones importantes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Pol\u00edtica de contrase\u00f1as<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Directivas de cuenta \u2192 Directiva de contrase\u00f1as\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Bloqueo de cuenta<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Directivas de cuenta \u2192 Directiva de bloqueo de cuenta\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Derechos de usuario<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Directivas locales \u2192 Asignaci\u00f3n de derechos de usuario\n<\/code><\/pre>\n\n\n\n<p>Aqu\u00ed puedes controlar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>qui\u00e9n puede iniciar sesi\u00f3n por RDP<\/li>\n\n\n\n<li>qui\u00e9n puede apagar el sistema<\/li>\n\n\n\n<li>qui\u00e9n puede ejecutar tareas programadas<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc <strong>Ejercicio 3 \u2014 endurecer pol\u00edticas<\/strong><\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Establece longitud m\u00ednima de contrase\u00f1a: 10<\/li>\n\n\n\n<li>Establece bloqueo tras 5 intentos<\/li>\n\n\n\n<li>Deniega \u201cIniciar sesi\u00f3n localmente\u201d al usuario <code>pruebas<\/code><\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 4. Auditor\u00eda del sistema (saber qui\u00e9n hace qu\u00e9)<\/h1>\n\n\n\n<p>Windows puede registrar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>accesos a archivos<\/li>\n\n\n\n<li>cambios en permisos<\/li>\n\n\n\n<li>inicios de sesi\u00f3n<\/li>\n\n\n\n<li>fallos de autenticaci\u00f3n<\/li>\n\n\n\n<li>cambios en servicios<\/li>\n\n\n\n<li>cambios en pol\u00edticas<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 Activar auditor\u00eda avanzada<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>secpol.msc\n<\/code><\/pre>\n\n\n\n<p>Ruta:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Directivas locales \u2192 Directiva de auditor\u00eda\n<\/code><\/pre>\n\n\n\n<p>Activa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Auditor\u00eda de inicio de sesi\u00f3n<\/li>\n\n\n\n<li>Auditor\u00eda de acceso a objetos<\/li>\n\n\n\n<li>Auditor\u00eda de cambios de directivas<\/li>\n\n\n\n<li>Auditor\u00eda de uso de privilegios<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 Ver logs<\/h2>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>eventvwr.msc\n<\/code><\/pre>\n\n\n\n<p>O desde PowerShell:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-WinEvent -LogName Security -MaxEvents 20\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc <strong>Ejercicio 4 \u2014 Auditor\u00eda real<\/strong><\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Activa auditor\u00eda de acceso a objetos<\/li>\n\n\n\n<li>En <code>C:\\seguridad<\/code>, activa auditor\u00eda para tu usuario<\/li>\n\n\n\n<li>Accede al archivo<\/li>\n\n\n\n<li>Mira en el Visor de eventos \u2192 Security<\/li>\n\n\n\n<li>Encuentra el evento de acceso<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 5. Control remoto seguro<\/h1>\n\n\n\n<p>Ya tienes SSH funcionando, lo cual es excelente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 Buenas pr\u00e1cticas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Deshabilitar contrase\u00f1a \u2192 usar claves SSH<\/li>\n\n\n\n<li>Cambiar el puerto (opcional)<\/li>\n\n\n\n<li>Limitar usuarios permitidos<\/li>\n\n\n\n<li>Registrar accesos<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 Ver qui\u00e9n se conecta por SSH<\/h2>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-WinEvent -LogName Security | Where-Object { $_.Id -eq 4624 }\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc <strong>Ejercicio 5 \u2014 endurecer SSH<\/strong><\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Edita <code>C:\\ProgramData\\ssh\\sshd_config<\/code><\/li>\n\n\n\n<li>Cambia:<\/li>\n<\/ol>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PasswordAuthentication no\n<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>A\u00f1ade tu clave p\u00fablica<\/li>\n\n\n\n<li>Reinicia SSH:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Restart-Service sshd\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 6. Buenas pr\u00e1cticas de servidor<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No usar el usuario administrador para tareas diarias<\/li>\n\n\n\n<li>Desactivar servicios innecesarios<\/li>\n\n\n\n<li>Mantener Windows actualizado<\/li>\n\n\n\n<li>Usar firewall estricto<\/li>\n\n\n\n<li>No instalar software innecesario<\/li>\n\n\n\n<li>Usar logs y auditor\u00eda<\/li>\n\n\n\n<li>Automatizar tareas cr\u00edticas<\/li>\n\n\n\n<li>Usar PowerShell para todo lo repetitivo<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 MINI\u2011RETO DEL BLOQUE<\/h1>\n\n\n\n<p>Crea un entorno seguro:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Carpeta <code>C:\\datos<\/code> con permisos solo para tu usuario<\/li>\n\n\n\n<li>Auditor\u00eda activada sobre esa carpeta<\/li>\n\n\n\n<li>Puerto 2222 abierto para SSH<\/li>\n\n\n\n<li>SSH configurado solo con claves<\/li>\n\n\n\n<li>Servicio Print Spooler desactivado<\/li>\n\n\n\n<li>Pol\u00edtica de contrase\u00f1as endurecida<\/li>\n\n\n\n<li>Log de los \u00faltimos 50 eventos de seguridad guardado en <code>C:\\logs\\seguridad.txt<\/code><\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe2 Cuando termines este bloque, pasamos al siguiente:<\/h1>\n\n\n\n<p><strong>Automatizaci\u00f3n avanzada en Windows: scripts, tareas programadas, servicios personalizados, y orquestaci\u00f3n.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Automatizaci\u00f3n avanzada en Windows: scripts, tareas programadas, servicios personalizados, y orquestaci\u00f3n.<\/strong><\/h2>\n\n\n\n<p>Entramos en <strong>el BLOQUE 6: Automatizaci\u00f3n avanzada en Windows<\/strong>, donde vas a aprender a hacer que Windows trabaje para ti como un servidor profesional.<\/p>\n\n\n\n<p>Este bloque es muy potente porque combina:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PowerShell avanzado<\/li>\n\n\n\n<li>Servicios personalizados<\/li>\n\n\n\n<li>Tareas programadas<\/li>\n\n\n\n<li>Scripts que se ejecutan solos<\/li>\n\n\n\n<li>Automatizaci\u00f3n remota<\/li>\n\n\n\n<li>Orquestaci\u00f3n entre Windows y tu Mac<\/li>\n\n\n\n<li>Ejercicios pr\u00e1cticos reales<\/li>\n<\/ul>\n\n\n\n<p>Vamos a construir automatizaciones que podr\u00edas usar en un entorno profesional.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 BLOQUE 6 \u2014 Automatizaci\u00f3n avanzada en Windows<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 1. Automatizaci\u00f3n con PowerShell (scripts inteligentes)<\/h2>\n\n\n\n<p>Aqu\u00ed vamos a crear scripts que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>se configuran solos<\/li>\n\n\n\n<li>se ejecutan solos<\/li>\n\n\n\n<li>se reinician solos<\/li>\n\n\n\n<li>generan logs<\/li>\n\n\n\n<li>se comportan como \u201cmicro\u2011servicios\u201d<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 1 \u2014 Script que se auto\u2011configura<\/h3>\n\n\n\n<p>Crea un script que:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Comprueba si existe una carpeta<\/li>\n\n\n\n<li>Si no existe, la crea<\/li>\n\n\n\n<li>Si existe, escribe un log<\/li>\n\n\n\n<li>Si falla, captura el error<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>param(&#91;string]$Ruta = \"C:\\auto\")\n\ntry {\n    if (-not (Test-Path $Ruta)) {\n        New-Item -ItemType Directory -Path $Ruta\n        \"Carpeta creada: $Ruta\" | Out-File C:\\auto.log -Append\n    } else {\n        \"La carpeta ya exist\u00eda: $Ruta\" | Out-File C:\\auto.log -Append\n    }\n}\ncatch {\n    \"ERROR: $($_.Exception.Message)\" | Out-File C:\\auto.log -Append\n}\n<\/code><\/pre>\n\n\n\n<p>Ejecuta:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\\auto.ps1\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 2. Automatizaci\u00f3n con el Programador de Tareas (cron de Windows)<\/h1>\n\n\n\n<p>El Programador de Tareas es <strong>muy potente<\/strong>. Puedes ejecutar scripts:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>al iniciar Windows<\/li>\n\n\n\n<li>al iniciar sesi\u00f3n<\/li>\n\n\n\n<li>cada X minutos<\/li>\n\n\n\n<li>cuando un evento ocurre<\/li>\n\n\n\n<li>cuando un servicio falla<\/li>\n\n\n\n<li>cuando se conecta un usuario<\/li>\n\n\n\n<li>cuando se crea un archivo<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 2 \u2014 Ejecutar un script cada minuto<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Crea un script:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"$(Get-Date) - Tarea ejecutada\" | Out-File C:\\tarea.log -Append\n<\/code><\/pre>\n\n\n\n<p>Gu\u00e1rdalo como:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>C:\\tarea.ps1\n<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Crea la tarea:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>schtasks \/create \/tn \"TareaCadaMinuto\" \/tr \"powershell.exe -File C:\\tarea.ps1\" \/sc minute\n<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Comprueba:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>schtasks \/query \/tn \"TareaCadaMinuto\"\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 3. Automatizaci\u00f3n basada en eventos (muy avanzada)<\/h1>\n\n\n\n<p>Windows puede ejecutar scripts cuando ocurre un evento del sistema.<\/p>\n\n\n\n<p>Ejemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cuando alguien inicia sesi\u00f3n<\/li>\n\n\n\n<li>Cuando alguien falla un login<\/li>\n\n\n\n<li>Cuando se crea un archivo<\/li>\n\n\n\n<li>Cuando un servicio falla<\/li>\n\n\n\n<li>Cuando se conecta un USB<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 3 \u2014 Ejecutar un script cuando alguien inicia sesi\u00f3n<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Abre:<\/li>\n<\/ol>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>taskschd.msc\n<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Crea una tarea nueva:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Trigger:<\/strong> \u201cAl iniciar sesi\u00f3n\u201d<\/li>\n\n\n\n<li><strong>Acci\u00f3n:<\/strong> ejecutar un script PowerShell<\/li>\n\n\n\n<li><strong>Script:<\/strong> escribe un log con la hora y el usuario<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo de script:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"$(Get-Date) - Inicio de sesi\u00f3n de $env:USERNAME\" | Out-File C:\\logins.log -Append\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 4. Crear un servicio personalizado (como systemd)<\/h1>\n\n\n\n<p>Esto es nivel profesional.<\/p>\n\n\n\n<p>Vamos a crear un servicio que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>se ejecuta en segundo plano<\/li>\n\n\n\n<li>se reinicia si falla<\/li>\n\n\n\n<li>no necesita sesi\u00f3n iniciada<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 4 \u2014 Crear un servicio PowerShell<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Crea un script que nunca termine:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>while ($true) {\n    \"$(Get-Date) - Servicio activo\" | Out-File C:\\servicio.log -Append\n    Start-Sleep 10\n}\n<\/code><\/pre>\n\n\n\n<p>Gu\u00e1rdalo como:<\/p>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>C:\\servicio.ps1\n<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Instala el servicio usando <strong>NSSM<\/strong> (herramienta est\u00e1ndar en Windows Server).<\/li>\n<\/ol>\n\n\n\n<p>Descarga NSSM (si quieres te explico c\u00f3mo instalarlo).<\/p>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Crea el servicio:<\/li>\n<\/ol>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nssm install MiServicio\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Application: <code>powershell.exe<\/code><\/li>\n\n\n\n<li>Arguments: <code>-File C:\\servicio.ps1<\/code><\/li>\n<\/ul>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Inicia el servicio:<\/li>\n<\/ol>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Start-Service MiServicio\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 5. Automatizaci\u00f3n remota (Windows \u2194 macOS)<\/h1>\n\n\n\n<p>Ya que tu Windows tiene SSH, puedes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ejecutar scripts desde tu Mac<\/li>\n\n\n\n<li>copiar archivos<\/li>\n\n\n\n<li>automatizar tareas<\/li>\n\n\n\n<li>reiniciar servicios<\/li>\n\n\n\n<li>monitorizar procesos<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 5 \u2014 Ejecutar un script remoto desde tu Mac<\/h3>\n\n\n\n<p>En tu Mac:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh david@IP-de-tu-windows \"powershell.exe -Command Get-Process\"\n<\/code><\/pre>\n\n\n\n<p>Ejecutar un script remoto:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh david@IP-de-tu-windows \"powershell.exe -File C:\\tarea.ps1\"\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 6. Orquestaci\u00f3n (automatizar varias m\u00e1quinas)<\/h1>\n\n\n\n<p>Esto es opcional, pero muy potente.<\/p>\n\n\n\n<p>Puedes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ejecutar un script en varias m\u00e1quinas<\/li>\n\n\n\n<li>recopilar logs<\/li>\n\n\n\n<li>reiniciar servicios en lote<\/li>\n\n\n\n<li>desplegar software<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName windows1,windows2 -ScriptBlock {\n    Get-Service sshd\n}\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Las dos grandes formas de conectarse remotamente a Windows<\/h1>\n\n\n\n<p>Windows tiene <strong>dos sistemas de administraci\u00f3n remota<\/strong>:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 1. SSH (moderno, universal, multiplataforma)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Funciona igual que en Linux<\/li>\n\n\n\n<li>Usa claves SSH<\/li>\n\n\n\n<li>Permite ejecutar PowerShell y CMD<\/li>\n\n\n\n<li>Perfecto para tu Mac-mini<\/li>\n\n\n\n<li>Seguro, simple, est\u00e1ndar<\/li>\n<\/ul>\n\n\n\n<p><strong>Ya lo dominas.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 2. WinRM \/ PowerShell Remoting (el sistema nativo de Windows)<\/h2>\n\n\n\n<p>Este es el que te sonaba: <strong>Invoke-Command<\/strong>, <strong>Enter-PSSession<\/strong>, <strong>New-PSSession<\/strong>, etc.<\/p>\n\n\n\n<p>Es m\u00e1s antiguo que SSH, pero <strong>mucho m\u00e1s potente dentro del ecosistema Windows<\/strong>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 \u00bfQu\u00e9 es WinRM \/ PowerShell Remoting?<\/h1>\n\n\n\n<p>Es el sistema nativo de Windows para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ejecutar comandos remotos<\/li>\n\n\n\n<li>crear sesiones persistentes<\/li>\n\n\n\n<li>administrar servicios<\/li>\n\n\n\n<li>administrar el registro<\/li>\n\n\n\n<li>ejecutar scripts completos<\/li>\n\n\n\n<li>copiar archivos<\/li>\n\n\n\n<li>orquestar varias m\u00e1quinas a la vez<\/li>\n<\/ul>\n\n\n\n<p>Funciona sobre:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>HTTP\/HTTPS<\/strong><\/li>\n\n\n\n<li><strong>WS-Man (Web Services for Management)<\/strong><\/li>\n\n\n\n<li><strong>Kerberos<\/strong> (si hay dominio)<\/li>\n\n\n\n<li><strong>NTLM<\/strong> (si no hay dominio)<\/li>\n<\/ul>\n\n\n\n<p>Es decir: <strong>es el \u201cSSH de Windows\u201d, pero con superpoderes dentro del propio Windows.<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 \u00bfPor qu\u00e9 se usa menos hoy?<\/h1>\n\n\n\n<p>Porque:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SSH es m\u00e1s universal<\/li>\n\n\n\n<li>WinRM es m\u00e1s complejo de configurar<\/li>\n\n\n\n<li>WinRM no funciona bien fuera de redes Windows<\/li>\n\n\n\n<li>WinRM requiere abrir puertos espec\u00edficos<\/li>\n\n\n\n<li>WinRM usa protocolos propios de Microsoft<\/li>\n<\/ul>\n\n\n\n<p>Pero en entornos Windows puros (empresas, servidores, Active Directory)\u2026 <strong>WinRM sigue siendo el rey.<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 C\u00f3mo funciona WinRM (PowerShell Remoting)<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 1. Habilitarlo<\/h2>\n\n\n\n<p>En la m\u00e1quina remota:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Enable-PSRemoting -Force\n<\/code><\/pre>\n\n\n\n<p>Esto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>habilita WinRM<\/li>\n\n\n\n<li>abre el firewall<\/li>\n\n\n\n<li>crea listeners HTTP<\/li>\n\n\n\n<li>configura permisos<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 2. Conectarse a otra m\u00e1quina<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Sesi\u00f3n interactiva (como SSH)<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Enter-PSSession -ComputerName NOMBRE -Credential (Get-Credential)\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Ejecutar un comando remoto<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName NOMBRE -ScriptBlock { Get-Process }\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Crear una sesi\u00f3n persistente<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$sesion = New-PSSession -ComputerName NOMBRE\nInvoke-Command -Session $sesion -ScriptBlock { Get-Service }\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 \u00bfQu\u00e9 ventajas tiene sobre SSH?<\/h1>\n\n\n\n<p>Aqu\u00ed viene lo interesante.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 1. Acceso completo al sistema<\/h2>\n\n\n\n<p>SSH solo te da una shell. WinRM te da acceso a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>servicios<\/li>\n\n\n\n<li>registro<\/li>\n\n\n\n<li>firewall<\/li>\n\n\n\n<li>WMI<\/li>\n\n\n\n<li>eventos<\/li>\n\n\n\n<li>pol\u00edticas<\/li>\n\n\n\n<li>certificados<\/li>\n\n\n\n<li>Active Directory<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 2. Sesiones persistentes<\/h2>\n\n\n\n<p>Puedes mantener una sesi\u00f3n abierta en segundo plano:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$sesion = New-PSSession -ComputerName PC1\nInvoke-Command -Session $sesion -ScriptBlock { hostname }\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 3. Orquestaci\u00f3n de varias m\u00e1quinas<\/h2>\n\n\n\n<p>Esto es brutal:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName PC1,PC2,PC3 -ScriptBlock { Get-Service sshd }\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 4. Copiar archivos remotamente<\/h2>\n\n\n\n<p>SSH usa SCP. WinRM usa:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Copy-Item -Path archivo.txt -Destination C:\\ -ToSession $sesion\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe9 5. Integraci\u00f3n con Active Directory<\/h2>\n\n\n\n<p>Puedes ejecutar comandos como:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName Servidor -ScriptBlock { Get-ADUser -Filter * }\n<\/code><\/pre>\n\n\n\n<p>SSH no puede hacer eso.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 \u00bfQu\u00e9 desventajas tiene?<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u00e1s dif\u00edcil de configurar<\/li>\n\n\n\n<li>No funciona bien fuera de redes Windows<\/li>\n\n\n\n<li>No es multiplataforma<\/li>\n\n\n\n<li>Depende de servicios de Windows<\/li>\n\n\n\n<li>M\u00e1s atacado hist\u00f3ricamente (por estar muy integrado)<\/li>\n<\/ul>\n\n\n\n<p>Por eso hoy en d\u00eda:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SSH<\/strong> para administraci\u00f3n moderna<\/li>\n\n\n\n<li><strong>WinRM<\/strong> para administraci\u00f3n empresarial avanzada<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 Ejemplo pr\u00e1ctico para que lo entiendas de verdad<\/h1>\n\n\n\n<p>Sup\u00f3n que tienes dos Windows:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Windows-A<\/li>\n\n\n\n<li>Windows-B<\/li>\n<\/ul>\n\n\n\n<p>En Windows-B habilitas:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Enable-PSRemoting -Force\n<\/code><\/pre>\n\n\n\n<p>Desde Windows-A:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Entras en Windows-B como si fuera SSH:<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Enter-PSSession -ComputerName Windows-B\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Ejecutas un comando remoto:<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName Windows-B -ScriptBlock { Get-Process }\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Creas una sesi\u00f3n persistente:<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ses = New-PSSession -ComputerName Windows-B\nInvoke-Command -Session $ses -ScriptBlock { Get-Service }\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Copias un archivo:<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Copy-Item archivo.txt -Destination C:\\ -ToSession $ses\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 Sales:<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Remove-PSSession $ses\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Pero aprender WinRM te da superpoderes<\/h3>\n\n\n\n<p>Porque:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>es la forma nativa de administrar Windows<\/li>\n\n\n\n<li>es lo que usan los administradores de sistemas<\/li>\n\n\n\n<li>es lo que usan las empresas<\/li>\n\n\n\n<li>es lo que usa PowerShell en su m\u00e1ximo potencial<\/li>\n<\/ul>\n\n\n\n<p>Y adem\u00e1s, te prepara para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Active Directory<\/li>\n\n\n\n<li>Windows Server<\/li>\n\n\n\n<li>Automatizaci\u00f3n masiva<\/li>\n\n\n\n<li>Orquestaci\u00f3n de m\u00e1quinas<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">1. Qu\u00e9 es WinRM realmente<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>WinRM<\/strong> = Windows Remote Management<\/li>\n\n\n\n<li>Es la implementaci\u00f3n de Microsoft del protocolo <strong>WS-Management (WS-Man)<\/strong>, un est\u00e1ndar para administraci\u00f3n remota sobre HTTP\/HTTPS.<\/li>\n\n\n\n<li>PowerShell Remoting se apoya en WinRM para:\n<ul class=\"wp-block-list\">\n<li>ejecutar comandos remotos<\/li>\n\n\n\n<li>abrir sesiones interactivas<\/li>\n\n\n\n<li>orquestar muchas m\u00e1quinas a la vez<\/li>\n\n\n\n<li>exponer \u201cendpoints\u201d de administraci\u00f3n controlados<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Piensa: <strong>SSH es una puerta a una shell; WinRM es una API de administraci\u00f3n de Windows con PowerShell como lenguaje.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Ejecuci\u00f3n remota de comandos y scripts<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2.1. Comandos puntuales<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName Servidor1 -ScriptBlock { Get-Process }\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ejecuta el bloque en la m\u00e1quina remota.<\/li>\n\n\n\n<li>Devuelve los resultados a tu sesi\u00f3n local (como objetos deserializados).<\/li>\n<\/ul>\n\n\n\n<p>Puedes pasar par\u00e1metros:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName Servidor1 -ScriptBlock {\n    param($Nombre)\n    Get-Service -Name $Nombre\n} -ArgumentList \"sshd\"\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.2. Scripts completos<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName Servidor1 -FilePath C:\\scripts\\mantenimiento.ps1\n<\/code><\/pre>\n\n\n\n<p>Eso te permite tener un repositorio de scripts y lanzarlos en remoto sin copiar nada manualmente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Sesiones remotas persistentes<\/h2>\n\n\n\n<p>Aqu\u00ed es donde WinRM se separa de SSH.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.1. Sesi\u00f3n interactiva (tipo \u201cssh\u201d)<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Enter-PSSession -ComputerName Servidor1 -Credential (Get-Credential)\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lo que escribes se ejecuta en el remoto.<\/li>\n\n\n\n<li>El prompt cambia para indicarte que est\u00e1s \u201cdentro\u201d.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3.2. Sesiones reutilizables<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ses = New-PSSession -ComputerName Servidor1\n\nInvoke-Command -Session $ses -ScriptBlock { Get-Service }\nInvoke-Command -Session $ses -ScriptBlock { Get-EventLog -LogName System -Newest 5 }\n\nRemove-PSSession $ses\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mantienes contexto (m\u00f3dulos cargados, variables, etc.).<\/li>\n\n\n\n<li>Ideal para automatizaciones largas o repetitivas.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">4. Administraci\u00f3n 1 a muchos (orquestaci\u00f3n)<\/h2>\n\n\n\n<p>WinRM brilla cuando no es \u201cyo \u2194 una m\u00e1quina\u201d, sino \u201cyo \u2194 muchas m\u00e1quinas\u201d.<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName Servidor1,Servidor2,Servidor3 -ScriptBlock {\n    Get-Service sshd\n}\n<\/code><\/pre>\n\n\n\n<p>O con una lista:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$servidores = \"Srv1\",\"Srv2\",\"Srv3\"\nInvoke-Command -ComputerName $servidores -ScriptBlock {\n    Get-ComputerInfo | Select-Object CsName, OsName, OsVersion\n}\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Puedes lanzar el mismo comando en <strong>decenas o cientos de equipos<\/strong>.<\/li>\n\n\n\n<li>Recibes una salida etiquetada por m\u00e1quina.<\/li>\n<\/ul>\n\n\n\n<p>Esto es administraci\u00f3n de parque, no de \u201cmi PC\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Copia de archivos y despliegues<\/h2>\n\n\n\n<p>WinRM no es SCP, pero PowerShell lo integra:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.1. Copiar hacia el remoto<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ses = New-PSSession -ComputerName Servidor1\nCopy-Item -Path .\\app.config -Destination \"C:\\app\\app.config\" -ToSession $ses\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5.2. Copiar desde el remoto<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Copy-Item -Path \"C:\\logs\\*.log\" -Destination .\\logs -FromSession $ses\n<\/code><\/pre>\n\n\n\n<p>Con esto puedes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>desplegar configuraciones<\/li>\n\n\n\n<li>recoger logs<\/li>\n\n\n\n<li>distribuir scripts<\/li>\n<\/ul>\n\n\n\n<p>Sin montar shares ni usar SMB.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Acceso profundo al sistema: servicios, registro, eventos, WMI<\/h2>\n\n\n\n<p>Con WinRM + PowerShell Remoting puedes tocar casi todo:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6.1. Servicios<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName Servidor1 -ScriptBlock {\n    Get-Service sshd\n    Restart-Service sshd\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">6.2. Registro<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName Servidor1 -ScriptBlock {\n    Get-Item \"HKLM:\\Software\\Microsoft\\Windows\\CurrentVersion\"\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">6.3. Eventos<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName Servidor1 -ScriptBlock {\n    Get-WinEvent -LogName System -MaxEvents 10\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">6.4. WMI \/ CIM<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName Servidor1 -ScriptBlock {\n    Get-CimInstance Win32_OperatingSystem\n}\n<\/code><\/pre>\n\n\n\n<p>Esto es lo que lo hace tan potente en entornos de servidor: <strong>no solo ejecutas comandos, administras el sistema entero.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Endpoints personalizados y Just Enough Administration (JEA)<\/h2>\n\n\n\n<p>Aqu\u00ed entramos en el \u201cmodo enterprise\u201d.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7.1. Endpoints de PowerShell<\/h3>\n\n\n\n<p>Puedes definir \u201cpuntos de entrada\u201d remotos con capacidades limitadas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>qu\u00e9 comandos se pueden ejecutar<\/li>\n\n\n\n<li>con qu\u00e9 permisos reales se ejecutan<\/li>\n\n\n\n<li>qu\u00e9 m\u00f3dulos est\u00e1n disponibles<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo conceptual:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Register-PSSessionConfiguration -Name \"Soporte\" -RunAsCredential Admin -VisibleCmdlets Get-Service,Restart-Service\n<\/code><\/pre>\n\n\n\n<p>Un usuario se conecta a ese endpoint y <strong>solo puede usar esos cmdlets<\/strong>, aunque por debajo se ejecuten con permisos de administrador.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7.2. JEA (Just Enough Administration)<\/h3>\n\n\n\n<p>Es una arquitectura para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>delegar tareas de administraci\u00f3n<\/li>\n\n\n\n<li>sin dar permisos de administrador completos<\/li>\n\n\n\n<li>usando endpoints restringidos y roles definidos<\/li>\n<\/ul>\n\n\n\n<p>Esto es clave en seguridad: \u201cTe dejo reiniciar servicios de IIS, pero no tocar nada m\u00e1s del servidor\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8. Integraci\u00f3n con RSAT y herramientas de administraci\u00f3n<\/h2>\n\n\n\n<p>En entornos grandes se usa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>RSAT<\/strong> (Remote Server Administration Tools) en el equipo del administrador<\/li>\n\n\n\n<li>M\u00f3dulos de AD, DNS, DHCP, etc.<\/li>\n\n\n\n<li>PowerShell Remoting para ejecutar esos m\u00f3dulos en los servidores remotos<\/li>\n<\/ul>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Invoke-Command -ComputerName DC1 -ScriptBlock {\n    Import-Module ActiveDirectory\n    Get-ADUser -Filter *\n}\n<\/code><\/pre>\n\n\n\n<p>Tu m\u00e1quina no tiene AD, pero el servidor s\u00ed; t\u00fa solo \u201cte conectas\u201d a su contexto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. Seguridad, autenticaci\u00f3n y transporte<\/h2>\n\n\n\n<p>WinRM soporta:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>HTTP<\/strong> (por defecto, en redes internas)<\/li>\n\n\n\n<li><strong>HTTPS<\/strong> (con certificados, para redes menos confiables)<\/li>\n\n\n\n<li>Autenticaci\u00f3n:\n<ul class=\"wp-block-list\">\n<li>Kerberos (dominio)<\/li>\n\n\n\n<li>NTLM (workgroup)<\/li>\n\n\n\n<li>CredSSP (delegaci\u00f3n, con cuidado)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Buenas pr\u00e1cticas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Usar HTTPS en redes no totalmente confiables<\/li>\n\n\n\n<li>Limitar qui\u00e9n puede usar remoting (<code>Set-PSSessionConfiguration<\/code>)<\/li>\n\n\n\n<li>Usar JEA para delegar tareas<\/li>\n\n\n\n<li>Registrar y auditar el uso de remoting<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">10. Cosas que WinRM NO es (y as\u00ed lo colocas mentalmente)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No es un reemplazo de SSH en entornos mixtos (ah\u00ed gana SSH).<\/li>\n\n\n\n<li>No es una VPN.<\/li>\n\n\n\n<li>No es un t\u00fanel gen\u00e9rico de puertos.<\/li>\n\n\n\n<li>No es un sistema de archivos remoto.<\/li>\n<\/ul>\n\n\n\n<p>Es: <strong>la capa de transporte para que PowerShell pueda administrar Windows a distancia, a lo grande.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">11. Resumen r\u00e1pido de \u201ctodo lo que puedes hacer\u201d con WinRM<\/h2>\n\n\n\n<p>Con WinRM + PowerShell Remoting puedes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ejecutar comandos y scripts en remoto (1 a 1 y 1 a muchos).<\/li>\n\n\n\n<li>Abrir sesiones remotas persistentes.<\/li>\n\n\n\n<li>Orquestar decenas o cientos de m\u00e1quinas a la vez.<\/li>\n\n\n\n<li>Copiar archivos hacia y desde m\u00e1quinas remotas.<\/li>\n\n\n\n<li>Administrar servicios, registro, firewall, eventos, WMI, AD\u2026<\/li>\n\n\n\n<li>Definir endpoints restringidos (JEA) para delegar administraci\u00f3n segura.<\/li>\n\n\n\n<li>Integrarte con RSAT y m\u00f3dulos de servidor.<\/li>\n\n\n\n<li>Automatizar tareas de mantenimiento, despliegue y auditor\u00eda a escala.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>BLOQUE 7 \u2014 WSL (Windows Subsystem for Linux)<\/strong><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 <strong>BLOQUE 8 \u2014 Desarrollo en Windows (VSCode, Docker, entornos, automatizaci\u00f3n h\u00edbrida)<\/strong><\/h1>\n\n\n\n<p>Y como siempre: <strong>todo mezclado con ejercicios pr\u00e1cticos<\/strong>, para que no solo lo entiendas, sino que lo domines.<\/p>\n\n\n\n<p>Este bloque es muy divertido porque convierte tu Windows en <strong>un h\u00edbrido Windows+Linux<\/strong>, ideal para desarrollo, scripting, servidores y automatizaci\u00f3n.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 BLOQUE 7 \u2014 WSL (Windows Subsystem for Linux)<\/h1>\n\n\n\n<p>WSL te permite ejecutar Linux <strong>nativo<\/strong> dentro de Windows, sin m\u00e1quinas virtuales, sin Hyper\u2011V, sin overhead. Es como tener Ubuntu, Debian o Arch dentro de Windows, compartiendo archivos y red.<\/p>\n\n\n\n<p>Vamos paso a paso.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 1. Instalar WSL<\/h2>\n\n\n\n<p>En PowerShell como administrador:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wsl --install\n<\/code><\/pre>\n\n\n\n<p>Esto instala:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>WSL2<\/li>\n\n\n\n<li>Ubuntu por defecto<\/li>\n\n\n\n<li>Kernel Linux real<\/li>\n\n\n\n<li>Integraci\u00f3n con Windows<\/li>\n<\/ul>\n\n\n\n<p>Reinicia Windows y ya tienes Linux dentro.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 2. Comandos esenciales de WSL<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Ver distribuciones instaladas:<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wsl --list --verbose\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Instalar otra distro:<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wsl --install -d Debian\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Entrar en Linux:<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wsl\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ejecutar un comando Linux desde Windows:<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wsl ls -la\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ejecutar un comando Windows desde Linux:<\/h3>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>notepad.exe\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 3. Sistema de archivos h\u00edbrido<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Desde Windows \u2192 Linux:<\/h3>\n\n\n\n<p>C\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\\\\wsl$\\Ubuntu\\home\\david\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Desde Linux \u2192 Windows:<\/h3>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/mnt\/c\/Users\/david\/Desktop\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 4. Integraci\u00f3n con VSCode<\/h2>\n\n\n\n<p>En Windows:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>code .\n<\/code><\/pre>\n\n\n\n<p>En Linux (WSL):<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>code .\n<\/code><\/pre>\n\n\n\n<p>VSCode detecta que est\u00e1s en WSL y abre un entorno Linux real.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 5. Integraci\u00f3n con Docker<\/h2>\n\n\n\n<p>Docker Desktop usa WSL2 como backend. Esto significa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>contenedores Linux nativos<\/li>\n\n\n\n<li>sin Hyper\u2011V<\/li>\n\n\n\n<li>sin m\u00e1quinas virtuales pesadas<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe6 6. Ejercicios pr\u00e1cticos de WSL<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 1 \u2014 Instalar WSL y Ubuntu<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wsl --install\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 2 \u2014 Crear un script Linux y ejecutarlo desde Windows<\/h3>\n\n\n\n<p>En WSL:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo \"echo Hola desde Linux\" &gt; hola.sh\nchmod +x hola.sh\n<\/code><\/pre>\n\n\n\n<p>Desde Windows:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wsl .\/hola.sh\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 3 \u2014 Crear un script Windows y ejecutarlo desde Linux<\/h3>\n\n\n\n<p>En Windows:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo \"Write-Output 'Hola desde Windows'\" &gt; C:\\hola.ps1\n<\/code><\/pre>\n\n\n\n<p>En Linux:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>powershell.exe -File \/mnt\/c\/hola.ps1\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 4 \u2014 Compilar algo en Linux y usarlo en Windows<\/h3>\n\n\n\n<p>En WSL:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install gcc\necho 'int main(){printf(\"Hola mundo\\n\");}' &gt; hola.c\ngcc hola.c -o hola\n<\/code><\/pre>\n\n\n\n<p>Ejecutarlo desde Windows:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wsl .\/hola\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe9 BLOQUE 8 \u2014 Desarrollo en Windows (VSCode, Docker, entornos, automatizaci\u00f3n h\u00edbrida)<\/h1>\n\n\n\n<p>Este bloque convierte tu Windows en un entorno de desarrollo profesional.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 1. VSCode como IDE universal<\/h1>\n\n\n\n<p>VSCode puede trabajar en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Windows<\/li>\n\n\n\n<li>WSL (Linux)<\/li>\n\n\n\n<li>Contenedores Docker<\/li>\n\n\n\n<li>SSH remoto<\/li>\n<\/ul>\n\n\n\n<p>Todo desde la misma interfaz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Extensiones recomendadas:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Remote &#8211; WSL<\/strong><\/li>\n\n\n\n<li><strong>Remote &#8211; SSH<\/strong><\/li>\n\n\n\n<li><strong>Remote &#8211; Containers<\/strong><\/li>\n\n\n\n<li>Python<\/li>\n\n\n\n<li>C\/C++<\/li>\n\n\n\n<li>PowerShell<\/li>\n\n\n\n<li>Docker<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 2. Docker con WSL2<\/h1>\n\n\n\n<p>Docker Desktop usa WSL2 como motor. Esto te da:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>contenedores Linux nativos<\/li>\n\n\n\n<li>integraci\u00f3n con Windows<\/li>\n\n\n\n<li>integraci\u00f3n con WSL<\/li>\n\n\n\n<li>rendimiento casi igual que en Linux real<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Comandos b\u00e1sicos:<\/h3>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run hello-world\ndocker ps\ndocker images\ndocker exec -it contenedor bash\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 3. Entornos de desarrollo h\u00edbridos<\/h1>\n\n\n\n<p>Puedes tener:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C\u00f3digo en Windows<\/li>\n\n\n\n<li>Compilaci\u00f3n en Linux (WSL)<\/li>\n\n\n\n<li>Contenedores Docker Linux<\/li>\n\n\n\n<li>Scripts PowerShell para automatizar<\/li>\n\n\n\n<li>SSH para administraci\u00f3n remota<\/li>\n<\/ul>\n\n\n\n<p>Es un entorno extremadamente flexible.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 4. Ejercicios pr\u00e1cticos de desarrollo<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 1 \u2014 Crear un proyecto Python en WSL y editarlo en VSCode<\/h3>\n\n\n\n<p>En WSL:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir proyecto\ncd proyecto\npython3 -m venv venv\nsource venv\/bin\/activate\npip install flask\n<\/code><\/pre>\n\n\n\n<p>Abrir en VSCode:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>code .\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 2 \u2014 Crear un contenedor Docker desde WSL<\/h3>\n\n\n\n<p>En WSL:<\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo -e \"FROM python:3.10\\nCMD &#91;\\\"python3\\\", \\\"-c\\\", \\\"print('Hola desde Docker')\\\"]\" &gt; Dockerfile\ndocker build -t hola .\ndocker run hola\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Ejercicio 3 \u2014 Automatizaci\u00f3n h\u00edbrida Windows+Linux<\/h3>\n\n\n\n<p>Crea un script PowerShell que:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Ejecuta un comando Linux<\/li>\n\n\n\n<li>Ejecuta un comando Windows<\/li>\n\n\n\n<li>Ejecuta un contenedor Docker<\/li>\n\n\n\n<li>Guarda logs en Windows<\/li>\n<\/ol>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<p>powershell<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"--- Linux ---\" | Out-File C:\\dev.log -Append\nwsl uname -a | Out-File C:\\dev.log -Append\n\n\"--- Windows ---\" | Out-File C:\\dev.log -Append\nGet-Date | Out-File C:\\dev.log -Append\n\n\"--- Docker ---\" | Out-File C:\\dev.log -Append\ndocker run hello-world | Out-File C:\\dev.log -Append\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udfe6 MINI\u2011RETO FINAL (para cerrar Windows por completo)<\/h1>\n\n\n\n<p>Crea un entorno de desarrollo completo:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Instala WSL2 con Ubuntu<\/li>\n\n\n\n<li>Instala VSCode con Remote\u2011WSL<\/li>\n\n\n\n<li>Instala Docker Desktop<\/li>\n\n\n\n<li>Crea un proyecto Python en WSL<\/li>\n\n\n\n<li>Crea un contenedor Docker que ejecute ese proyecto<\/li>\n\n\n\n<li>Automatiza todo con un script PowerShell<\/li>\n\n\n\n<li>Ejecuta el script desde tu Mac por SSH<\/li>\n<\/ol>\n\n\n\n<p>Si haces esto, tienes un entorno profesional de desarrollo <strong>Windows + Linux + Docker + PowerShell + SSH<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PowerShell avanzado Administraci\u00f3n del sistema Seguridad y permisos Automatizaci\u00f3n WSL y desarrollo Todo mezclado con ejercicios pr\u00e1cticos Vamos a ir bloque por bloque, con ejercicios reales, como si estuvi\u00e9ramos montando tu \u201ccaja de herramientas\u201d de Windows. Empezamos por lo l\u00f3gico: PowerShell base (pero ya con mentalidad avanzada). Cuando dominemos esto, pasamos al siguiente bloque. 1\ufe0f\u20e3&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[499],"tags":[],"class_list":["post-662","post","type-post","status-publish","format-standard","hentry","category-windows"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Windows, tercera parte - Ciencia y Tecnologia<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Windows, tercera parte - Ciencia y Tecnologia\" \/>\n<meta property=\"og:description\" content=\"PowerShell avanzado Administraci\u00f3n del sistema Seguridad y permisos Automatizaci\u00f3n WSL y desarrollo Todo mezclado con ejercicios pr\u00e1cticos Vamos a ir bloque por bloque, con ejercicios reales, como si estuvi\u00e9ramos montando tu \u201ccaja de herramientas\u201d de Windows. Empezamos por lo l\u00f3gico: PowerShell base (pero ya con mentalidad avanzada). Cuando dominemos esto, pasamos al siguiente bloque. 1\ufe0f\u20e3...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cienciaytecnology.com\/wordpress\/windows-tercera-parte\/\" \/>\n<meta property=\"og:site_name\" content=\"Ciencia y Tecnologia\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-07T09:38:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-07T09:41:03+00:00\" \/>\n<meta name=\"author\" content=\"david\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"david\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"32 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/windows-tercera-parte\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/windows-tercera-parte\\\/\"},\"author\":{\"name\":\"david\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\"},\"headline\":\"Windows, tercera parte\",\"datePublished\":\"2026-03-07T09:38:53+00:00\",\"dateModified\":\"2026-03-07T09:41:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/windows-tercera-parte\\\/\"},\"wordCount\":7108,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\"},\"articleSection\":[\"Windows\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/windows-tercera-parte\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/windows-tercera-parte\\\/\",\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/windows-tercera-parte\\\/\",\"name\":\"Windows, tercera parte - Ciencia y Tecnologia\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#website\"},\"datePublished\":\"2026-03-07T09:38:53+00:00\",\"dateModified\":\"2026-03-07T09:41:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/windows-tercera-parte\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/windows-tercera-parte\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/windows-tercera-parte\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Windows, tercera parte\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/\",\"name\":\"Ciencia y Tecnologia\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\",\"name\":\"david\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\",\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\",\"contentUrl\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\",\"width\":1024,\"height\":1024,\"caption\":\"david\"},\"logo\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\"},\"sameAs\":[\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\"],\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/author\\\/david\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Windows, tercera parte - Ciencia y Tecnologia","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"es_ES","og_type":"article","og_title":"Windows, tercera parte - Ciencia y Tecnologia","og_description":"PowerShell avanzado Administraci\u00f3n del sistema Seguridad y permisos Automatizaci\u00f3n WSL y desarrollo Todo mezclado con ejercicios pr\u00e1cticos Vamos a ir bloque por bloque, con ejercicios reales, como si estuvi\u00e9ramos montando tu \u201ccaja de herramientas\u201d de Windows. Empezamos por lo l\u00f3gico: PowerShell base (pero ya con mentalidad avanzada). Cuando dominemos esto, pasamos al siguiente bloque. 1\ufe0f\u20e3...","og_url":"https:\/\/cienciaytecnology.com\/wordpress\/windows-tercera-parte\/","og_site_name":"Ciencia y Tecnologia","article_published_time":"2026-03-07T09:38:53+00:00","article_modified_time":"2026-03-07T09:41:03+00:00","author":"david","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"david","Tiempo de lectura":"32 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cienciaytecnology.com\/wordpress\/windows-tercera-parte\/#article","isPartOf":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/windows-tercera-parte\/"},"author":{"name":"david","@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b"},"headline":"Windows, tercera parte","datePublished":"2026-03-07T09:38:53+00:00","dateModified":"2026-03-07T09:41:03+00:00","mainEntityOfPage":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/windows-tercera-parte\/"},"wordCount":7108,"commentCount":0,"publisher":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b"},"articleSection":["Windows"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cienciaytecnology.com\/wordpress\/windows-tercera-parte\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cienciaytecnology.com\/wordpress\/windows-tercera-parte\/","url":"https:\/\/cienciaytecnology.com\/wordpress\/windows-tercera-parte\/","name":"Windows, tercera parte - Ciencia y Tecnologia","isPartOf":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#website"},"datePublished":"2026-03-07T09:38:53+00:00","dateModified":"2026-03-07T09:41:03+00:00","breadcrumb":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/windows-tercera-parte\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cienciaytecnology.com\/wordpress\/windows-tercera-parte\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/cienciaytecnology.com\/wordpress\/windows-tercera-parte\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/cienciaytecnology.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Windows, tercera parte"}]},{"@type":"WebSite","@id":"https:\/\/cienciaytecnology.com\/wordpress\/#website","url":"https:\/\/cienciaytecnology.com\/wordpress\/","name":"Ciencia y Tecnologia","description":"","publisher":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cienciaytecnology.com\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b","name":"david","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg","url":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg","contentUrl":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg","width":1024,"height":1024,"caption":"david"},"logo":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg"},"sameAs":["https:\/\/cienciaytecnology.com\/wordpress"],"url":"https:\/\/cienciaytecnology.com\/wordpress\/author\/david\/"}]}},"_links":{"self":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts\/662","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/comments?post=662"}],"version-history":[{"count":1,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts\/662\/revisions"}],"predecessor-version":[{"id":663,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts\/662\/revisions\/663"}],"wp:attachment":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/media?parent=662"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/categories?post=662"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/tags?post=662"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}