diff --git a/docs/FIX_PROBLEMA_AUTOLOGON_USUARIO_NUEVO.md b/docs/FIX_PROBLEMA_AUTOLOGON_USUARIO_NUEVO.md index f2b102d..ef092d5 100644 --- a/docs/FIX_PROBLEMA_AUTOLOGON_USUARIO_NUEVO.md +++ b/docs/FIX_PROBLEMA_AUTOLOGON_USUARIO_NUEVO.md @@ -74,24 +74,80 @@ Para el caso de uso real (controlar el PC desde Telegram), lo que necesitas es: Este caso de uso **NO requiere autologon de Windows**, solo conexión RDP automática. -## Recomendación final +## Recomendación final ACTUALIZADA (20-sep-2026) -**Para el sobremesa (PC de trabajo):** -- ❌ **NO usar autologon** (datos de empresa, sensible) -- ✅ **Usar control Telegram** solo para encender/apagar -- ✅ **Login manual** al llegar al despacho -- ✅ **RDP desde portátil** cuando estés fuera (con credenciales guardadas) +**El usuario NECESITA autologon** para el encendido remoto automático desde Telegram (WoL → arranque → login → escritorio listo → watchers corriendo). -**Para el portátil (si fuera necesario):** -- Evaluar caso por caso -- Considerar PIN en lugar de contraseña completa -- Configurar timeout de bloqueo corto +**La solución correcta es CORREGIR el autologon, NO deshabilitarlo.** -## Script de verificación +### Flujo de corrección (ejecutar en orden) +#### 1. Verificar configuración actual ```powershell -# Verificar estado actual de autologon -.\INFRAESTRUCTURA\scripts\check_autologon_status.ps1 +# Como Administrador +cd C:\Users\juanm\Documents\Github\INFRAESTRUCTURA\scripts +.\check_autologon_status.ps1 ``` -(Pendiente de crear) +Esto muestra: +- Usuario configurado vs usuario real +- Dominio configurado vs nombre del PC +- Si hay contraseña guardada +- Si el autologon está activo + +#### 2. Corregir autologon +```powershell +# Como Administrador +.\fix_autologon.ps1 +``` + +El script: +- Detecta tu usuario actual REAL (`$env:USERNAME`) +- Usa el **nombre del PC** como dominio (`$env:COMPUTERNAME`) ← **CLAVE DEL FIX** +- Pide tu contraseña de forma segura (no se muestra) +- Configura autologon correctamente +- Pide confirmación antes de escribir en el registro + +#### 3. Eliminar usuario fantasma (si se creó uno nuevo) +``` +Configuración → Cuentas → Familia y otros usuarios → [usuario nuevo] → Quitar +``` + +#### 4. Probar reinicio local +1. Reinicia el PC manualmente +2. Verifica que entra directo sin pedir contraseña +3. Verifica que es TU usuario (no uno nuevo) + +#### 5. Probar encendido remoto completo +1. Apagar PC desde Telegram: `/apagar` → confirmar +2. Esperar 30s a que se apague (watchdog verifica) +3. Encender desde Telegram: `/encender` +4. Esperar ~2 minutos +5. Bot verifica automáticamente si arrancó +6. Conectar por RDP desde portátil → debe entrar directo + +### Scripts disponibles + +| Script | Función | +|--------|---------| +| `check_autologon_status.ps1` | Ver configuración actual (no modifica nada) | +| `fix_autologon.ps1` | Corregir autologon para el usuario actual | +| `disable_autologon.ps1` | Deshabilitar autologon (reversa rápida) | + +### Seguridad + +**Riesgos de autologon:** +- Contraseña almacenada en texto plano en el registro +- Cualquiera con acceso físico entra al escritorio + +**Mitigaciones recomendadas:** +- Usar **PIN corto** en lugar de contraseña completa +- Configurar **bloqueo automático tras 5-10 minutos** de inactividad +- Activar **BitLocker** en el disco (si no lo está) +- NO dejar el PC físicamente accesible a terceros + +**Para el caso de uso actual (sobremesa en despacho privado):** +- ✅ Autologon ACEPTABLE (despacho privado, necesario para inicio remoto) +- ✅ Bloqueo automático tras inactividad +- ✅ BitLocker si hay datos sensibles +- ✅ RDP con credenciales guardadas desde portátil diff --git a/scripts/check_autologon_status.ps1 b/scripts/check_autologon_status.ps1 new file mode 100644 index 0000000..cbb99d4 --- /dev/null +++ b/scripts/check_autologon_status.ps1 @@ -0,0 +1,69 @@ +# Script para verificar la configuración actual de autologon +# NO modifica nada, solo muestra información + +$winlogonPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" + +Write-Host "`n=== CONFIGURACION ACTUAL DE AUTOLOGON ===" -ForegroundColor Cyan + +# Leer configuración del registro +try { + $autologon = Get-ItemProperty -Path $winlogonPath -Name "AutoAdminLogon" -ErrorAction SilentlyContinue + $username = Get-ItemProperty -Path $winlogonPath -Name "DefaultUserName" -ErrorAction SilentlyContinue + $domain = Get-ItemProperty -Path $winlogonPath -Name "DefaultDomainName" -ErrorAction SilentlyContinue + $hasPassword = Get-ItemProperty -Path $winlogonPath -Name "DefaultPassword" -ErrorAction SilentlyContinue + + Write-Host "`nREGISTRO DE WINDOWS:" + Write-Host " AutoAdminLogon: $($autologon.AutoAdminLogon)" -ForegroundColor $(if ($autologon.AutoAdminLogon -eq "1") { "Green" } else { "Yellow" }) + Write-Host " DefaultUserName: $($username.DefaultUserName)" -ForegroundColor $(if ($username.DefaultUserName) { "White" } else { "Red" }) + Write-Host " DefaultDomainName: $($domain.DefaultDomainName)" -ForegroundColor $(if ($domain.DefaultDomainName) { "White" } else { "Red" }) + Write-Host " DefaultPassword: $(if ($hasPassword.DefaultPassword) { '[CONFIGURADA]' } else { '[NO CONFIGURADA]' })" -ForegroundColor $(if ($hasPassword.DefaultPassword) { "White" } else { "Red" }) + + Write-Host "`nUSUARIO ACTUAL REAL:" + Write-Host " Usuario: $env:USERNAME" -ForegroundColor Cyan + Write-Host " Dominio/Workgroup: $env:USERDOMAIN" -ForegroundColor Cyan + Write-Host " Nombre del PC: $env:COMPUTERNAME" -ForegroundColor Cyan + + Write-Host "`nCOMPARACION:" + + # Verificar si coinciden + $usuarioConfigurado = $username.DefaultUserName + $dominioConfigurado = $domain.DefaultDomainName + + if ($usuarioConfigurado -eq $env:USERNAME) { + Write-Host " ✓ Usuario coincide" -ForegroundColor Green + } else { + Write-Host " ✗ Usuario NO coincide" -ForegroundColor Red + Write-Host " Configurado: $usuarioConfigurado" -ForegroundColor Gray + Write-Host " Real: $env:USERNAME" -ForegroundColor Gray + } + + if ($dominioConfigurado -eq $env:COMPUTERNAME) { + Write-Host " ✓ Dominio correcto (nombre del PC)" -ForegroundColor Green + } elseif ($dominioConfigurado -eq $env:USERDOMAIN) { + Write-Host " ~ Dominio usa USERDOMAIN" -ForegroundColor Yellow + Write-Host " Actual: $dominioConfigurado" -ForegroundColor Gray + Write-Host " Recomendado: $env:COMPUTERNAME" -ForegroundColor Gray + } else { + Write-Host " ✗ Dominio NO coincide" -ForegroundColor Red + Write-Host " Configurado: $dominioConfigurado" -ForegroundColor Gray + Write-Host " Nombre PC: $env:COMPUTERNAME" -ForegroundColor Gray + } + + if ($autologon.AutoAdminLogon -eq "1" -and $username.DefaultUserName -and $hasPassword.DefaultPassword) { + Write-Host "`n[RESULTADO] Autologon ACTIVO" -ForegroundColor Green + + if ($username.DefaultUserName -ne $env:USERNAME) { + Write-Host "[PROBLEMA] Usuario configurado NO es el actual → puede crear usuario nuevo" -ForegroundColor Red + Write-Host "[SOLUCION] Ejecutar: .\fix_autologon.ps1" -ForegroundColor Yellow + } + } elseif ($autologon.AutoAdminLogon -eq "1") { + Write-Host "`n[RESULTADO] Autologon ACTIVO pero INCOMPLETO (falta usuario o contraseña)" -ForegroundColor Yellow + } else { + Write-Host "`n[RESULTADO] Autologon DESACTIVADO" -ForegroundColor Gray + } + +} catch { + Write-Host "[ERROR] No se pudo leer la configuración: $_" -ForegroundColor Red +} + +Write-Host "`n========================================`n" -ForegroundColor Cyan diff --git a/scripts/disable_autologon.ps1 b/scripts/disable_autologon.ps1 new file mode 100644 index 0000000..a88ceb1 --- /dev/null +++ b/scripts/disable_autologon.ps1 @@ -0,0 +1,33 @@ +# Script para DESHABILITAR autologon +# Ejecutar como ADMINISTRADOR + +# Verificar que se ejecuta como Admin +$esAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) +if (-not $esAdmin) { + Write-Host "[ERROR] Este script debe ejecutarse como Administrador." -ForegroundColor Red + exit 1 +} + +Write-Host "`n=== DESACTIVAR AUTOLOGON ===" -ForegroundColor Cyan + +$winlogonPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" + +try { + # Deshabilitar autologon + Set-ItemProperty -Path $winlogonPath -Name "AutoAdminLogon" -Value "0" + + # Eliminar contraseña almacenada (seguridad) + Remove-ItemProperty -Path $winlogonPath -Name "DefaultPassword" -ErrorAction SilentlyContinue + + Write-Host "`n[OK] Autologon DESACTIVADO." -ForegroundColor Green + Write-Host "Al reiniciar, Windows pedirá contraseña normalmente." -ForegroundColor White + + Write-Host "`nPara reactivar autologon correctamente:" -ForegroundColor Yellow + Write-Host " .\fix_autologon.ps1" -ForegroundColor White + +} catch { + Write-Host "`n[ERROR] No se pudo deshabilitar autologon: $_" -ForegroundColor Red + exit 1 +} + +Write-Host "`n========================================`n" -ForegroundColor Cyan diff --git a/scripts/fix_autologon.ps1 b/scripts/fix_autologon.ps1 new file mode 100644 index 0000000..f4057d3 --- /dev/null +++ b/scripts/fix_autologon.ps1 @@ -0,0 +1,77 @@ +# Script para CORREGIR autologon y que use el usuario ACTUAL +# Ejecutar como ADMINISTRADOR + +param( + [Parameter(Mandatory=$false, HelpMessage="Contraseña/PIN de Windows (si no se proporciona, se pide de forma segura)")] + [string]$Password +) + +# Verificar que se ejecuta como Admin +$esAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) +if (-not $esAdmin) { + Write-Host "[ERROR] Este script debe ejecutarse como Administrador." -ForegroundColor Red + Write-Host "Click derecho → 'Ejecutar como administrador'" -ForegroundColor Yellow + exit 1 +} + +Write-Host "`n=== CONFIGURACION DE AUTOLOGON CORRECTO ===" -ForegroundColor Cyan + +# Detectar usuario actual REAL +$username = $env:USERNAME +$computername = $env:COMPUTERNAME + +Write-Host "`nUsuario detectado: $computername\$username" -ForegroundColor White + +# Pedir contraseña si no se pasó como parámetro +if (-not $Password) { + Write-Host "`nIntroduce tu contraseña/PIN de Windows:" -ForegroundColor Yellow + $securePassword = Read-Host -AsSecureString + $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securePassword) + $Password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) + [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR) +} + +# Mostrar lo que se va a configurar (SIN mostrar la contraseña) +Write-Host "`nSe configurará autologon con:" -ForegroundColor Cyan +Write-Host " AutoAdminLogon: 1" -ForegroundColor White +Write-Host " DefaultUserName: $username" -ForegroundColor White +Write-Host " DefaultDomainName: $computername" -ForegroundColor White +Write-Host " DefaultPassword: [OCULTA]" -ForegroundColor White + +Write-Host "`n¿Continuar? (S/N): " -ForegroundColor Yellow -NoNewline +$respuesta = Read-Host + +if ($respuesta -ne "S" -and $respuesta -ne "s") { + Write-Host "[CANCELADO] No se realizaron cambios." -ForegroundColor Gray + exit 0 +} + +# Aplicar configuración +$winlogonPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" + +try { + Set-ItemProperty -Path $winlogonPath -Name "AutoAdminLogon" -Value "1" + Set-ItemProperty -Path $winlogonPath -Name "DefaultUserName" -Value $username + Set-ItemProperty -Path $winlogonPath -Name "DefaultPassword" -Value $Password + Set-ItemProperty -Path $winlogonPath -Name "DefaultDomainName" -Value $computername # CLAVE: nombre del PC, no USERDOMAIN + + Write-Host "`n[OK] Autologon configurado correctamente." -ForegroundColor Green + Write-Host "`nAl reiniciar el PC, Windows entrará automáticamente como:" -ForegroundColor Cyan + Write-Host " $computername\$username" -ForegroundColor White + Write-Host "`nPrueba:" -ForegroundColor Yellow + Write-Host " 1. Reinicia el PC" -ForegroundColor White + Write-Host " 2. Verifica que entra sin pedir contraseña" -ForegroundColor White + Write-Host " 3. Si funciona, prueba encendido remoto desde Telegram" -ForegroundColor White + + Write-Host "`nPara verificar la configuración:" -ForegroundColor Yellow + Write-Host " .\check_autologon_status.ps1" -ForegroundColor White + + Write-Host "`nPara desactivar autologon:" -ForegroundColor Yellow + Write-Host " .\disable_autologon.ps1" -ForegroundColor White + +} catch { + Write-Host "`n[ERROR] No se pudo configurar autologon: $_" -ForegroundColor Red + exit 1 +} + +Write-Host "`n========================================`n" -ForegroundColor Cyan