"Después del juego es antes del juego"
Sepp Herberger

Mostrando entradas con la etiqueta windows. Mostrar todas las entradas
Mostrando entradas con la etiqueta windows. Mostrar todas las entradas

viernes, 27 de mayo de 2022

Zabbix (II): quitar alertas insistentes de servicios no arrancados en Agentes Windows.

Poco a poco sigo poniendo en marcha mi servidor Zabbix. Tras poner en funcionamiento la monitorización de los equipos Windows usando el "Template Module Windows services by Zabbix agent" me encontré que el Dashboard se llenaba de alertas de "Problemas" con los servicios de los Windows.
Los mensajes en concreto eran del tipo:
  • 12:58:34 pc "BITS" (Servicio de transferencia inteligente en segundo plano (BITS)) is not running (startup type automatic delayed) 12m 23s No
  • 12:51:06 pc "BITS" (Servicio de transferencia inteligente en segundo plano (BITS)) is not running (startup type automatic delayed) 19m 51s No
  • 12:05:19 pc "OneSyncSvc_1265ec8f" (Sincronizar host_1265ec8f) is not running (startup type automatic delayed) 1h 5m 38s No
  • 12:05:18 pc "CDPUserSvc_1265ec8f" (Servicio de usuario de plataforma de dispositivos conectados_1265ec8f) is not running (startup type automatic)
Básicamente los que sucede es que hay varios servicios que, tras arrancar el equipo con Windows, tardan en arrancar o fallan y el Agente Zabbix nos informa de esa circunstancia. La plantilla usada realiza un descubrimiento de los servicios habilitados en la máquina y si tras 3 ciclos de actualización del agente no están en ejecución salta la alerta.
El mensaje que sale en la descripción del problema es "The service has a state other than "Running" for the last X times":
Al final, pasadas las horas, acaban por arrancar los servicios y desaparecen casi todas las alertas, pero no quita que en ciertos momentos se llene la pantalla de alertas sobre cosas que no me aportan nada.

Lo primero que intenté fue cambiar la plantilla para que en lugar de revisar el estado durante 3 ciclos lo hiciese durante 10, dando un poco más de margen de tiempo para que funcionen. No sirvió de nada.

Teniendo en cuenta que estos son servicios poco importantes (y que sospecho que algunos no funcionan bien por el firewall corporativo, que capa actualizaciones de Microsoft) la otra estrategía que podía aplicar es sencillamente dejar de monitorizar dichos servicios. ¿Se puede hacer eso? Pues gracias a la flexibilidad de Zabbix si se puede. Los pasos a seguir son:
  1. Vamos a Configuration->Templates.
  2. Buscamos Template OS Windows by Zabbix agent -> Template Module Windows services by Zabbix agent
  3. Vamos a Windows services discovery -> Filters.
  4. Añadimos un filtro para ignorar, filtrando por su nombre, los Servicios que dan problemas (como vemos la lista es bastante grande, y eso que sigo añadiendo más):
    {#SERVICE.NAME}
    does not match
    ^(MMCSS|TrustedInstaller|BITS|GISvc|gupdate|MapsBroker|WbioSrvc|sppsvc|RemoteRegistry|wuauserv|gupdate|SysmonLog|clr_optimization_v2.0.50727_32|clr_optimization_v4.0.30319_32)$
      
El filtro se añade a la lista de filtros colocándose, no se por qué, en el tercer lugar:
Una vez acabamos veo que las alertas siguen saltando. La causa es que aunque hayamos cambiado la plantilla esos cambios no se aplican a los hosts dados de alta con ellas. Desconozco si hay alguna manera de trasladar esos cambios, pero como no encontraba nada lo resuelvo de una forma más expeditiva: borro los hosts Windows y dejo que se autoregistren de nuevo, aplicándose la plantilla ya cambiada con los filtros. Fin del problema.
Esta foto es del helicóptero marciano Ingenuity fotografiando la cápsula que dejó el Perseverance (mirar la sombra del propio helicóptero en la imagen) en tierra de forma segura y luego se alejó para caer al suelo. Como vemos el litofrenado la ha dejado bastante maltrecha.

Para mi gozo absoluto, hace unas semanas pude ver una réplica a tamaño real de la Perserverance y la Ingenuity en Nueva York, ahí van unas fotos hechas por mi:
Que maravilla de la ingeniería. Un aparato pensado para realizar un puñado de vuelos de prueba en una atmósfera un 99% menos densa que en la Tierra sigue dandose garbeos por el planeta rojo meses después.
Estuve cerca de ellas, pero no pude tocar nada. Por fortuna si que pude sentarme dentro de una de esas latas de sardina que fueron las cápsulas Gemini de los años 60. Emocionante.

viernes, 18 de febrero de 2022

Multiseat en Windows con Aster

Ya he tratado varias veces el tema del multiseat en este blog. En Linux no hay mayor problema ya que se soporta de forma nativa, sin añadir ningún software adicional, como ya vimos aquí.

En Windows por desgracia esto no es así y, por tanto, hay que usar un sofware comercial. He localizado varios que se han ido quedando por el camino a lo largo de los años, pero uno de ellos permanece y funciona perfectamente para Windows 11 y anteriores: el Aster de Ibik. Evidentemente es un software de pago, valiendo hoy unos 70€ la licencia para hacer un pc bipuesto y permitir trabajar a 2 usuarios simultáneamente, cada uno con su monitor, teclado y ratón. Debemos valorar si esa inversión de 70€ merecen la pena antes de comprar un nuevo PC o no.

Afortunadamente se puede bajar una versión de prueba que permite probarlo y evaluarlo durante un mes antes de tomar una decisión.

Antes de seguir hay que recordar que además de 2 monitores, 2 teclados y 2 ratones, el único PC donde montamos el multiseat debe tener suficiente RAM (8Gb está bien) y dos tarjetas gráficas, normalmente una en placa base y otra en un puerto PCIe. En estos tiempos revueltos donde las tarjetas gráficas cuestan una burrada gracias al burbujón de las criptomonedas y a la escasez de chips, he podido probar con una tarjeta gráfica USB3, que tengo para mis enredos, como esta:
... y puedo confirmar que funciona decentemente. El coste de este adaptador USB3-VGA Hagibis es de unos 15-20 euros.

Descargando la versión de prueba de la aplicación y configurándola según el manual verificamos que funciona. Podemos verlo en ambos puestos de la siguiente foto, cada uno con una sesión de usuario distinta y conectados al mismo PC:
Mostramos la parte trasera y delantera del PC para poder ver el cableado:
En la parte trasera tenemos un teclado y un ratón conectados a los puertos PS/2, un monitor conectado a la tarjeta VGA y el otro monitor conectado a la tarjeta USB3-VGA (la cual está enchufada a un puerto USB 3.0). En la parte delantera tenemos conectado el otro teclado y ratón USB.

La configuración de la aplicación Aster es muy intuitiva (a diferencia de Linux, donde teníamos que meternos con ficheros de configuración editados a mano) usando un interface gráfico y siguiendo el manual que hemos enlazado antes:
Por todo lo demás, he tenido a los usuarios trabajando durante un mes con este sistema, usando el navegador web y la aplicación Autocad 2019 y todo ha ido fluido, si notar ralentizamiento apreciable. Por tanto queda como una opción a considerar cuando queramos dotar o modernizar un aula. Lástima que no haya alternativa gratis como en en Linux....

Out!

miércoles, 14 de octubre de 2020

Configuración de red wifi educarex en sistemas Windows

Bueno, bueno, que paradón. Esta pandemia nos tiene paralizados con tanto trabajo..

Con el programa Escuelas Conectadas nos han instalado una red wifi decente en los centros educativos. Existe un SSID común llamado "educarex" al que se conectan los dispositivos. Los equipos propiedad de los centros que funcionan con Linux se configuran de forma automática mediante una tarea puppet que crea la conexión en el NetworkManager.

Para los equipos con Windows hay que crear la conexión a mano según el manual que nos han distribuido, lo que incluye instalar además un el plugin para PEAP-GTC, que es el sistema de autenticación que usa la red wifi. En Linux, Android y OSX viene de serie, pero en sistemas operativos primitivos como Windows hay que instalarlo.

Aprovecharemos también para instalar un cliente OCS-NG-Windows-Agent-Setup.exe, ya que llevamos un tiempo poniendo OCS Inventory en todas las máquinas del centro para tener un inventario actualizado.

Bueno, pues al hacer la conexión a educarex según el manual facilitado vemos que son un montón de tediosos pasos y decimos...¿todo esto voy a tener que repetirlo para cada Windows? Pues no. De eso va esta entrada del blog. Una vez hemos creado y comprobado que la conexión funciona en una máquina con Windows podemos exportarla a un fichero XML que luego restauraremos en los demás Windows desde un script. Rápido y a prueba de fallos.

El fichero XML se crea desde la consola de Windows con siguiente comando que lo coloca en la carpeta "mia":
netsh WLAN export profile name="educarex" key=clear folder="mia"
Luego ponemos en un pendrive el fichero anterior (renombrado a educarex.xml) junto con EAP-GTC-x64.msi y OCS-NG-Windows-Agent-Setup.exe, descargados de Internet. Creamos el script configura-educarex-windows.bat (mirar al final del artículo varios comentarios que hago sobre el script):
@echo off
echo Instalando software....
echo "Cambiando dominio a vguadalupe"
powershell Add-Computer -WorkGroupName "vguadalupe"
echo "OCS Inventory"
OCS-NG-Windows-Agent-Setup.exe /server="http://puppet3.educarex.es/ocsinventory" /nosoftware /tag="Windows" /now /ssl=0 /S /NOW
rem "C:\Program Files\OCS Inventory Agent>OCSInventory.exe" /force
echo "Driver Wifi"
EAP-GTC-x64.msi /quiet /norestart
echo Creando conexion "educarex"...
Netsh WLAN add profile filename="educarex.xml"
echo Terminado. Ya puede conectarse a "educarex" con las credenciales que desee.
pause
Todo junto en el pendrive queda:
configura-educarex-windows.bat
EAP-GTC-x64.msi
educarex.xml
OCS-NG-Windows-Agent-Setup.exe
Y ya está: al ejecutarlo se siguen todos los pasos y al final tenemos OCS Inventory instalado y sincronizado y, por otro lado, la conexión "educarex" lista para solo meter las credenciales (usuario/contraseña) de configuración.

Comentarios:
  • El comando powershell Add-Computer -WorkGroupName "dominio" es para poner el dominio de nuestro centro de forma adecuada en el Windows, ya que si no OCS Inventory no clasificará correctamente los datos de nuestro centro. Que cada cual ponga el suyo para no interferir con otros centros.
  • El /server="http://puppet3.educarex.es/ocsinventory" es el servidor de OCS Inventory de la red educativa. Lo especificamos como parámetro para que la instalación sea sin preguntar nada.
  • El comando EAP-GTC-x64.msi /quiet /norestart instala el plugin EAP-GTC de forma silenciosa y sin reiniciar.
  • El comando Netsh WLAN add profile filename="educarex.xml" importa la configuración sin que tengamos que hacer nosotros los pasos uno a uno. En las pruebas que he realizado los ficheros XML no parecen compatibles entre versiones de Windows (es decir, el XML de un Windows 7 n se puede importar en un 10).

Una vez acabado ya solo falta pinchar para conectarse a la red wifi educarex. Nos pedirá las credenciales y estas quedarán guardadas de forma permanente en el perfil del usuario de Windows que haya realizado la conexión.
Pedazo selfie:
La sonda china Tianwen 1 rumbo a Marte y en el camino se ha hecho un retrato con su gran angular. Afortunadamente, sigue habiendo países que apuestan por la ciencia.

miércoles, 7 de noviembre de 2018

Software Reporter Tool y ralentización de los Windows.

Esta va de Windows. Después de hacer este curso un downgrade de Windows 10 a Windows 7 en varios equipos usados en los ciclos de FP en el centro porque entre actualizaciones, cortanas y demás enredos se hacían inmanejables ha habido un período de calma hasta que me avisaron que algunos empezaban a ir muy lentos de forma injustificada.

Tras mirar con el explorador de procesos no vi ningún proceso desbocado, pero si me chocaba que el procesador estaba siempre por encima del 60%, aún cuando no se hiciese nada. Para dilucidar que pasa en estos casos lo mejor es usar el programa "Process Explorer", que muestra mucha mas información que el explorador de procesos tradicional del Windows.

Ahora si pude ver que había un proceso (antes oculto no se por qué motivo) llamado "Software Reporter Tool" que era el responsable del alto uso de la CPU. Este programa es algo que viene con el Google Chrome y que básicamente no hace nada que no sea hacer la puñeta. Se instala en cada perfil de usuario en la ruta "c:\users\*usuario*\AppData\Local\Google\Chrome\User Data\SwReporter\..." y se arranca cuando buenamente le parece para hacer sus maldades.

No se puede desinstalar pero si borrar, aunque comentan que cuando se actualice Chrome seguramente volverá a aparecer. De momento lo he limpiado en todos los pc ejecutando:
cd c:\users
for /d /r . %d in (SwReporter) do @if exist "%d" rd /s/q "%d"
Y de repente los pc afectados han revivido. Tendremos que estar al acecho para cuando vuelva a aparecer.

domingo, 4 de marzo de 2018

Ejecutar comandos de consola de forma remota en Windows.

Como buen fanático del terminal, siempre prefiero hacer cosas de administración de sistemas tecleando antes que con ratón. En Unix esto es lo más habitual, pero en Windows no lo ponen tan fácil.

En cualquier caso siempre viene bien tener la opción de conectar con una consola remota de Windows y escribir los comandos en ella, sin necesidad de desplazarnos físicamente a la máquina ni de iniciar una sesión remota completa con rdesktop. En principio con un servidor OpenSSH en el equipo destino es suficiente. Un servidor ssh es un software que en Linux viene de serie mientras que en Windows, entre varias opciones, podemos poner una versión GPL liberada por Microsoft.

Pero no, vamos a ver una forma alternativa de ejecutar comandos de consola de forma remota en Windows que no necesita instalar nada especial en el PC destino. Contemplaremos 2 métodos: lanzar la ejecución de los comandos desde un equipo con Windows y hacerlo desde un equipo con Linux.

1. Consideraciones previas.

Para hacer que nuestros Windows estén dispuestos a aceptar órdenes remotas hay que prepararlos antes tocando varias configuraciones:

1.1. Abrir el puerto 445.

Para comunicarnos y dar órdenes al Windows remoto necesitamos comunicar con él por su puerto 445, denominado "microsoft-ds", que sirve para un montón de cosas incluida la entrada de virus ;-).

Como este puerto está cerrado normalmente por el firewall de Windows debemos primeramente abrirlo para que acepte conexiones entrantes. Podemos hacerlo con el confuso interface gráfico de configuración del firewall y tardar varios minutos:



o bien abrir una consola de comandos en modo administrador y teclear:
netsh advfirewall firewall add rule dir=in action=allow protocol=TCP localport=445 name="Allow_TCP-445" 
Seguramente después haya que reiniciar el servicio de firewall para que se aplique de forma efectiva.

Supongo que con este ejemplo de método gráfico versus método de terminal queda claro por qué muchas veces es preferible usar la línea de comandos.

1.2. Modificar el registro para permitir el acceso a los "administrative shares"

Si el equipo remoto trabaja con Windows 10 hay que añadir una entrada al registro para permitir las conexiones entrantes que ejecutarán comandos, ya que por defecto UAC impide que usuarios administradores se conecten a los "administrative shares". De nuevo lo haremos desde consola:
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
Si no creamos esta entrada de registro obtendremos errores de "Acceso denegado" al intentar ejecutar comandos remotos.

1.3. Solo para Linux: activar SMB v1.

Esto solo debe hacerse si el equipo desde el que lanzamos el comando es un Linux.

Debido a la aparición del ransomware WannaCry, que aprovechaba una vulnerabilidad en SMB llamada EternalBlue (con la que seguramente los servicios de seguridad de USA nos han estado espiando a todos durante años) hubo que improvisar soluciones transitorias . Una de ellas, rápida y sucia, era deshabilitar SMB1 en Windows y así impedir la entrada de WannaCry.

Como efecto colateral, el programa que usamos en Linux para mandar comandos al Windows deja de funcionar, ya que necesita que SMB1 esté activo. Por tanto, dependiendo que tengamos o no activo SMB1 en nuestro Windows podrá funcionar o no la ejecución remota. A día de hoy EternalBlue ya ha sido solucionado con los parches de Microsoft, por lo que SMB1 puede estar de nuevo activo.

Para ver su estado abrimos una consola de PowerShell y tecleamos "Get-SmbServerConfiguration"
PS C:\> Get-SmbServerConfiguration

AnnounceComment                 : 
AnnounceServer                  : False
AsynchronousCredits             : 64
AuditSmb1Access                 : False
AutoDisconnectTimeout           : 15
AutoShareServer                 : True
AutoShareWorkstation            : True
CachedOpenLimit                 : 10
DurableHandleV2TimeoutInSeconds : 180
EnableAuthenticateUserSharing   : False
EnableDownlevelTimewarp         : False
EnableForcedLogoff              : True
EnableLeasing                   : True
EnableMultiChannel              : True
EnableOplocks                   : True
EnableSecuritySignature         : False
EnableSMB1Protocol              : False       
EnableSMB2Protocol              : True
...
...
Ahí vemos EnableSMB1Protocol a False. También podemos verlo directamente con:
PS C:\> Get-WindowsOptionalFeature –Online –FeatureName SMB1Protocol
...
...
¿Cómo lo activamos? Con:
PS C:\> Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
Nos pedirá reiniciar para que sea efectivo el cambio. Este Windows es maravilloso: activas un protocolo y tienes que reiniciar la máquina completa, ahí queda eso.

Como curiosidad aquí tenemos recopilados todos los comandos para ver/cambiar el estado de los servicios SMBx.

2. Desde un equipo con Windows.

Bueno, ya tenemos el Windows remoto receptivo, vamos ahora a ver como darle órdenes. Necesitamos instalar las pstools en el PC desde donde daremos órdenes. Ojo: esto se instala en el PC desde donde se ejecuta el comando, el PC destinatario no necesita que instalemos nada, el único requisito para él es lo indicado en el apartado 1.

No viene mal echar un vistazo a todas las utilidades, son una maravilla que conviene poner de serie en todos nuestros Windows. La que usaremos nosotros es psexec. Veamos como ejecutar un comando remoto desde el Windows donde tenemos instalado psexec contra otro Windows:
psexec \\a20-o14 "ipconfig"
Esto anterior se ejecutaría usando las credenciales del usuario actual en el PC remoto. Si queremos dar otras credenciales especificamos el usuario (que debe ser un administrador) y contraseña:
psexec -u administrador -p password \\a20-o14 "ipconfig"

PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

Starting PSEXESVC service on a20-o14...........
Configuración IP de Windows

Adaptador de Ethernet Ethernet:

Sufijo DNS específico para la conexión. . : vguadalupe
Vínculo: dirección IPv6 local. . . : fe80::f938:6376:3936:6a45%3
Dirección IPv4. . . . . . . . . . . . . . : 172.24.XXX.12
Máscara de subred . . . . . . . . . . . . : 255.255.255.0
Puerta de enlace predeterminada . . . . . : 172.24.XXX.2

Adaptador de túnel isatap.vguadalupe:

Estado de los medios. . . . . . . . . . . : medios desconectados
Sufijo DNS específico para la conexión. . : vguadalupe

Como se ve conectamos con el equipo a20-o14 y ejecutamos el comando "ipconfig" sobre él, dándonos la dirección IP y configuración de red el equipo. Con:
psexec \\a20-o14 "cmd"

PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

Starting PSEXESVC service on a20-o14...........

Microsoft Windows [Versión 6.3.9600]
(c) 2013 Microsoft Corporation. Todos los derechos reservados.

C:\Windows\system32>

Se nos abre una consola de comandos remota, que ejecutará en la otra máquina lo que tecleemos.

Si alguna de las dos órdenes anteriores produce errores del tipo:
Couldn't access a20-o14:
No se ha encontrado la ruta de acceso de la red.
Make sure that the default admin$ share is enabled on a20-o14.
En mi caso era síntoma de que el puerto 445 estaba cerrado. Si ese es tu caso, abrelo como hemos comentado en la parte 1 y ya debería funcionar. Si además dice:
PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
Couldn't access a20-o14:
Acceso denegado.
Entonces tendremos que añadir la entrada de registro descrita en la parte 1.2.

Mas cosas interesantes relacionadas con psexec:

  • Como ejecutar en varios PC a la vez el mismo script almacenado en un servidor:
    psexec \\computername1,computernamfe2,computernameN -d -u usuario -p password \\servidor\scripts\script.bat
    
    Esto es parecido al comando dsh de Linux.
  • Con el modificador -c podemos enviar desde el ordenador local un fichero .exe para ejecutarlo remotamente:
    psexec \\computername1,computernamfe2,computernameN -d -c programa.exe -u usuario -p password programa.exe
    
  • Para ver cuantas sesiones hay abiertas en una máquina remota ejecutamos el comando de Windows "query session":
    psexec \\a20-o19 query session
    
    NOMBRE DE SESIÓN  NOMBRE DE USUARIO     ID  ESTADO TIPO   DISPOSITIVO
    >services                                0  Desc
    console           GM_SEGUNDO             1  Activo
    rdp-tcp#1         Administrado           2  Activo
    rdp-tcp                               5536  Escuchar
    
    Vemos que en consola hay una sesión abierta con el usuario GM_SEGUNDO y en remote desktop hay otra abierta con el usuario Administrador (¿cómo consigo sesiones de escritorio de usuarios concurrentes sobre un mismo Windows?: instalando rdpwrapper).
  • Psexec está concebido para ejecutar comandos de consola, con entrada/salida en texto. Cualquier aplicación gráfica que lancemos aparecerá en el escritorio remoto. Por ejemplo:
    psexec \\a20-o19 -i 1 -d notepad
    
    Hará que al usuario GM_SEGUNDO del ejemplo anterior (el de la sesión con ID 1, de ahí el parámetro "-i 1". Este es el valor por defecto) se le abra el bloc de notas en la pantalla ante su total estupefacción. Esta es la teoría, pero en las pruebas prácticas que he hecho se abre una ventana con el contenido en negro y que no permite interactuar. Debe ser algún bug o feature de Windows 10.

    Si queremos lanzar aplicaciones gráficas en un Windows remoto y que aparezcan en nuestro escritorio local (sería una conexión Remota tipo VNC o Remote Desktop pero a nivel de aplicación en lugar de a nivel de escritorio completo) habría que usar SeamlessRDP, pero ese tema escapa al contenido de este artículo.

A modo de resumen: psexec es adecuado para ejecutar comandos de terminal de forma remota sin tener que iniciar sesión en los escritorios Windows. Como truco: cuando queremos ejecutar varios comandos la mejor solución es ponerlos dentro de un script .bat en una carpeta compartida por Samba accesible por todos los Windows y lanzar dicho script desde psexec.

3. Desde un equipo con Linux.

Bueno, ¿y que pasa si el equipo cliente es un Linux y desde él queremos ejecutar los comandos remotamente en nuestros Windows? ¿Hay algun psexec para Linux?

Pues si hay algo que se le parece: winexe, que sigue la idea de usar el puerto 445 para mandar ordenes a los Windows de forma remota. Es un proyecto algo abandonado y del cual no hay paquetes oficiales en .deb ni en .rpm (para Manjaro/Arch por supuesto que sí, pero es que ahí jugamos en otra liga). Además es fácil encontrar la versión 1.0, pero la que ahora funciona con Windows 10 es la 1.1.

Al final lo he encontrado aquí, con versiones .deb para Debian y Ubuntu. En mi caso he bajado el paquete winexe-static-1.1-0-jessie.deb para ejecutarlo desde mi servidor montado Debian Jessie.

El paquete se llama "static" porque tiene las librerías de Samba metidas dentro del ejecutable durante la compilación. La causa es que al cambiar la versión de Samba esto tiende a fallar, así que han optado por llevarlas al estilo años 70, embebidas en el ejecutable para evitar errores.

# dpkg -i winexe-static-1.1-0-jessie.deb
# winexe-static
winexe version 1.1
This program may be freely redistributed under the terms of the GNU GPLv3
Usage: winexe-static [OPTION]... //HOST COMMAND
Options:
  -h, --help                                  Display help message
  -V, --version                               Display version number
  -U, --user=[DOMAIN/]USERNAME[%PASSWORD]     Set the network username
  -A, --authentication-file=FILE              Get the credentials from a file
  -N, --no-pass                               Do not ask for a password
  -k, --kerberos=STRING                       Use Kerberos, -k [yes|no]
  -d, --debuglevel=DEBUGLEVEL                 Set debug level
  --uninstall                                 Uninstall winexe service after
                                              remote execution
  --reinstall                                 Reinstall winexe service before
                                              remote execution
  --system                                    Use SYSTEM account
  --profile                                   Load user profile
  --convert                                   Try to convert characters
                                              between local and remote
                                              code-pages
  --runas=[DOMAIN\]USERNAME%PASSWORD          Run as the given user (BEWARE:
                                              this password is sent in
                                              cleartext over the network!)
  --runas-file=FILE                           Run as user options defined in a
                                              file
  --interactive=0|1                           Desktop interaction: 0 -
                                              disallow, 1 - allow. If allow,
                                              also use the --system switch
                                              (Windows requirement). Vista
                                              does not support this option.
  --ostype=0|1|2                              OS type: 0 - 32-bit, 1 - 64-bit,
                                              2 - winexe will decide.
                                              Determines which version (32-bit
                                              or 64-bit) of service will be
                                              installed.
Como se ve los parámetros son muy distintos a los de psexec, ya que es una herramienta independiente. En este enlace se ve un buen repaso de todos ellos.

Veamos como ejecutar un comando:
# winexe-static --convert -U administrador%password //a20-o14 "ipconfig"
Error: error Unknown argument (get codepage)
CTRL: Probably old version of service, reinstalling.

Configuración IP de Windows

Adaptador de Ethernet Ethernet:

Sufijo DNS específico para la conexión. . : vguadalupe
Vínculo: dirección IPv6 local. . . : fe80::f938:6376:3936:6a45%3
Dirección IPv4. . . . . . . . . . . . . . : 172.19.XXX.100
Máscara de subred . . . . . . . . . . . . : 255.255.255.0
Puerta de enlace predeterminada . . . . . : 172.19.XXX.2

Adaptador de túnel isatap.vguadalupe:

Estado de los medios. . . . . . . . . . . : medios desconectados
Sufijo DNS específico para la conexión. . : vguadalupe
O abrir un interpréte de comandos remoto y escribir las órdenes allí:
# winexe-static  --convert -U administrador%password //a20-o04 "cmd"
Microsoft Windows [Versión 6.3.9600]
(c) 2013 Microsoft Corporation. Todos los derechos reservados.

C:\Windows\system32>cd \users
cd \users

C:\Users>dir
dir
El volumen de la unidad C no tiene etiqueta.
El número de serie del volumen es: B62C-6CE1

Directorio de C:\Users

16/06/2016  08:09    DIR          .
16/06/2016  08:09    DIR          ..
26/01/2017  12:45    DIR          Administrador
22/08/2013  16:36    DIR          Public
20/07/2017  05:43    DIR          UpdatusUser
28/07/2017  08:04    DIR          usuario
0 archivos              0 bytes
6 dirs  33.118.711.808 bytes libres

C:\Users>exit
exit
# 
Si en algún momento da este error:
# winexe-static -U administrador%password //a20-o04 "cmd"
ERROR: Failed to open connection - NT_STATUS_CONNECTION_RESET
La causa mas probable es que esté desactivado SMB1 en el PC remoto, lo cual se soluciona como vimos en el apartado 1.

Finalizamos con una recopilación de errores:
  • ERROR: Failed to open connection - NT_STATUS_LOGON_FAILURE : credenciales incorrectas.
  • ERROR: CreateService failed. NT_STATUS_ACCESS_DENIED : puerto 445 cerrado o registro no modificado según apartado 1.1 y 1.2.
  • ERROR: Failed to open connection - NT_STATUS_CONNECTION_RESET : servicio SMB1 deshabilitado. Habilitar según apartado 1.3 .

Y con esto ya tenemos expuestas todas las posibilidades para interactuar con nuestros Windows desde terminal.


Me despido con una imagen impactante que no tiene nada que ver con el blog, pero que está aquí al lado y no puedo dejar pasar:


Esto tiene 66.700 años según las últimas dataciones y es la prueba mas antigua de arte realizada por un homo sapiens de la especie vecina, la neanderthalensis. En esa época los homo sapiens sapiens estábamos empezando a salir de África por Oriente Próximo y andábamos ocupados en otras cosas. Y aquí, al lado de la Ribera del Marco ya había una especie que desarrollaba pensamiento simbólico en este planeta. Impresionante.

Es nuestro pequeño Gobekli Tepe, espero que sepamos cuidarlo.


domingo, 18 de febrero de 2018

Windows: actualiza como puedas.

Vaya por delante que opino que usar Windows en un centro educativo es, salvo casos muy justificados, un disparate económico, ético y tecnológico. Pero por desgracia esa puerta quedó abierta en tiempos pasados y debemos lidiar con la situación como buenamente podamos.

1. Parte de guerra.

Una vez tienes instalados tus Windows "pelados" aparte de los problemas típicos de gestión de usuarios y administración te encuentras con la cuestión de sus actualizaciones, que tiene una idiosincrasia especial en un entorno como el nuestro. Repasemos:

Primero. Cualquier usuario, incluidos los defensores mas acérrimos, habrán comprobado que Windows tiene la irritante costumbre de actualizarse sin control y sin contemplaciones de forma extemporánea: al iniciar, al apagar o en medio de la operación de un PC. De una extraña manera, estas actualizaciones incluso no dudan en arrasar cuando les parece con el arranque dual haciendo desaparecer Linux del menú de arranque. Esto en mi opinión roza lo delictivo.

Segundo. Windows tiene un sistema de actualizaciones totalmente ilógico: si dejas un equipo sin actualizar 6 meses al lanzar el update no instala lo último, sino que pasa por casi toda la secuencia de actualizaciones que se han quedado atrás (pocas veces una actualización es descartada en favor de otra posterior), reiniciando el equipo varias veces. Eso, para la gente razonable acostumbrada a derivados de Debian y a las rolling relaease como mi querida Manjaro es sencillamente inconcebible. Me ha llegado a pasar que instalas un Windows 7 en una hora y luego te pasas 20 horas descargando actualizaciones por fases de descarga-instalación-reinicio hasta tenerlo al día.

Por otro lado, el proceso de actualización es tremendamente oscuro y nunca sabes que está pasando y si el sistema se ha quedado parado en alguna operación. Sabes cuando empieza y cuando acaba, pero no como avanza. Para los acostumbrados a la verbosidad de las actualizaciones en Linux este mutismo es incomprensible.

Tercero. Como ya avisamos en su momento a la gente que decide, para poner orden en este caos hace falta un sistema que nos permita administrar y dosificar el flujo de actualizaciones. Eso implica un Windows Server y un servicio WSUS por centro junto con el hardware para ello, lo cual representa un sensible gasto adicional en dinero y tiempo para administrarlo. Esto no se tuvo en cuenta por las mentes pensantes que decidieron adquirir licencias de Windows sin tino y nos dejaron el papelón a los de abajo.

También puedo hablar según mi experiencia: habiendo servido durante varios años en ICM, la antigua Agencia de Informática y Comunicaciones de la Comunidad de Madrid (muy conocida por colaborar con las tramas corruptas Púnica y Lezo; tranquilos: yo soy inocente, todo eso pasó mayormente mientras estaba de excedencia) donde todo se basaba en Windows. Incluso con toda la infraestructura de clientes y servidores Windows montada para gestionar las actualizaciones de forma controlada los problemas en los clientes eran constantes: parches que se enrocaban en una instalación iniciada e interrumpida infinitamente, equipos en que fallaba algo y se quedaban atrás sin actualizar, errores y pantallazos azules en arranques tras actualizaciones fallidas... y todo esto con Windows XP, en los que el que ritmo de actualizaciones era mucho mas reducido que en los Windows posteriores.

Cuarto. Para mas INRI, esto último no sirve nada tan pronto como comprendes la realidad de funcionamiento de los PC de los centros educativos. Esto no es una oficina al uso donde los PC se encienden de 8 a 15 o de 9 a 17. Un PC en un centro educativo se enciende y se apaga de forma aleatoria a lo largo del día según el uso en las materias y horarios de clase. Incluso podemos encontrarnos con PC que no se encienden durante muchos días y de repente luego se encienden una mañana entera con 3 reinicios al cambiar de clase. Evidentemente disparar unas actualizaciones que pueden tardar horas en un entorno tan aleatorio es un proceso abocado a la catástrofe: tanto por el consumo de ancho de banda que se incrementa de golpe al encender un grupo de PC de alumnos, así como por el ralentizamiento del PC asociado a la actualización y los problemas derivados de apagarlos cuando están a medias.

Cinco. Podríamos pensar que los PC de uso de los profesores (salas comunes, aulas, departamentos) si que están encendidos de forma continua. Falso: son ordenadores de uso compartido y una de las pequeñas luchas que tenemos los administradores informáticos es limitar la pulsión que tienen muchos usuarios de apagar el sistema operativo cuando se acaba su sesión, máxime teniendo en cuenta que en 5 minutos va a haber otro docente sentado en ese mismo sitio. Pues bien: no hay manera, cuando alguien quiere apagar, apaga.

Seis. ¿Puede empeorar la cosa? Si: las aulas de portátiles. Nada mas terrible que ir a guardar un portátil en un armario de carga porque acaba la clase y encontrarnos que nos dice que esperemos porque hay que instalar 13 actualizaciones. O encenderlo para empezar la clase y esperar 10 minutos a que se actualice. Pero eso no es todo: tenemos 20 portátiles conectados a un punto de acceso wifi normal y corriente pugnando por actualizar, descargando megas y megas cada uno e impidiendo el uso normal de todos los dispositivos conectados a la misma wifi. Como seguramente en una hora de clase no de tiempo a descargar todo en la próxima sesión volveremos a la casilla de salida.


2. Estrategias paliativas.

Ante este panorama no nos queda otra que lidiar como buenamente podamos con todo ello. Si quedamos las actualizaciones a su libre albedrío la tragedia en forma de sistemas dañados por el apagado en medio de una actualización o redes colapsadas está garantizada. Parafraseando el proverbio chino: simplemente tenemos que sentarnos a la orilla del río y esperar hasta que pasen los Windows muertos flotando corriente abajo. El problema es que al final esos Windows tenemos que resucitarlos nosotros.

En mi caso he optado por dos estrategias para evitar la debacle:

  1. Cuando es posible por la potencia del equipo cliente virtualizo los Windows y los dejo con las actualizaciones desactivadas. Tengo un master que actualizo de vez en cuando en un PC concreto y distribuyo luego el fichero .VDI (imagen del disco duro) a todos los demás.
  2. Si no es posible virtualizar, porque los PC andan justitos de procesador y memoria opto por dejar un arranque dual y: desactivar en la medida de lo posible las actualizaciones automáticas de Windows, usar un sistema basado en wsusoffline, como recomienda nuestro compañero Esteban, para actualizar contra un repositorio interno al IES y no contra Internet (con lo cual ahorramos tráfico de red) y cada cierto tiempo me toca perder varios días actualizando semi-manualmente los equipos.

Vamos a ver esto con detalle.

3. Parar, reanudar y limitar las actualizaciones.

No es plato de buen gusto parar las actualizaciones de un PC, se supone que incluyen mejoras y parches contra agujeros de seguridad como Wannacry, Meltdown o Spectre. Pero cuando la alternativa es tener el aula parada y los usuarios malhumorados porque todo el tiempo y ancho de banda se va en actualizar dices "¡pero que coño!" y paras todo.

La forma más efectiva que he encontrado de parar las actualizaciones automáticas es con estos comandos que se pueden meter en un script:
sc config wuauserv start= disabled
net stop wuauserv
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU  /v NoAutoUpdate /t REG_DWORD /d 1 /f
Con esto el Windows queda congelado en el tiempo salvo que Microsoft use algún truco artero para colarnos algo, tal como hace con esas instalaciones de Cortana u OneDrive que reaparecen después de haberlos eliminado una y otra vez. Si queremos volver a activar haremos los pasos contrarios:
sc config wuauserv start= auto
net start wuauserv
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU  /v NoAutoUpdate /t REG_DWORD /d 0 /f
Otra opción que puede resultar interesante es usar una característica que tiene Windows de definir una conexión inalámbrica de red como "metered" o de uso medido. Eso viene a significar que le avisamos de que esa conexión nos cuesta dinero cada megabyte y que por tanto, tenga ojito con lo que se descarga por ella. Pensemos por ejemplo en una conexión móvil 4G, un operador de wifi o el futuro Starlink de Elon Musk, que nos facturase por datos transferidos.

Para ello debemos establecer la conexión a la red y una vez hecha tecleamos:
netsh wlan show profiles
Esto nos mostrará el nombre de la conexiones wlan (redes wifi o 4G), por ejemplo algo así como "Airtel-WRTR301GN-8897_1". Una vez sabido el nombre, con:
netsh wlan show profile name="Airtel-WRTR301GN-8897_1"
Vemos los parámetros de la conexió. En ellos el parámetro "Cost" puede valer Unrestricted (no limitado) o Fixed (limitado). Por tanto, si queremos indicar que la conexión es metered hacemos:
netsh wlan set profileparameter name=”Airtel-WRTR301GN-8897_1″ cost=Fixed
Esto hará que Windows se lo piense antes de consumir ancho de banda en una actualización por esa conexión. Pero, ojo, esto no descarta todas las actualizaciones y las que se consideren críticas se realizarán. Aunque está concebido para conexiones inalámbricas, también podemos activarlo en conexiones cableadas trasteando el registro.

4. Encauzar las actualizaciones con WSUS Offline Update.

WSUS Offline Update es un sistema montado para realizar las actualizaciones de los Windows/Office usando la red local y minimizando el tráfico externo. Incluso permite actualizar Windows/Office sin conexión a Internet, descargando las actualizaciones a un pendrive y actualizando luego con él. Yo lo descubrí, como tantas otras cosas, gracias a mi compañero Esteban.

Todo rota en torno a 3 elementos:

  • Una aplicación/script que descarga las actualizaciones y parches disponibles para los sistemas seleccionados.
  • Un repositorio donde guardar lo descargado. Traduciendo: una carpeta local o de red donde guardar los archivos.
  • Una aplicación/script que examina el sistema Windows y actualiza con los parches pendientes.

Una visión detallada del sistema la podemos encontrar aquí.

En mi caso no he usado las aplicaciones gráficas para realizar las tareas, ya que como se deducirá me va mas la línea de comandos. Además he intentado que las dos primeras partes se realicen con Linux y un servidor samba. Solo la parte de aplicación de las actualizaciones es, evidentemente, sobre Windows. Para ello me he guiado por este manual.

En un servidor auxiliar creo una carpeta /datos/wsus, con permisos 777 para todo su contenido. Sobre esa carpeta descomprimo la última versión de wsusoffline, que a fecha de escribir este post es la 11.1.1.

Una vez descomprimido el .zip escribo el script que me hará la descarga de los parches y actualizaciones para los sistemas que le indique:
# cat /datos/wsus/update.sh
bash /datos/wsus/wsusoffline/sh/download-updates.bash w100 esn /includedotnet /includemsse /includewddefs /verify
bash /datos/wsus/wsusoffline/sh/download-updates.bash w63-x64  esn /includedotnet /includemsse /includewddefs /verify
bash /datos/wsus/wsusoffline/sh/download-updates.bash w100-x64 esn /includedotnet /includemsse /includewddefs /verify
# chmod +x datos/wsus/update.sh
Este script descarga lo que haya de Windows 10 (64 y 32 bits) y Windows 8 (64 bits). Mirar la documentación para ver todas las posibles opciones de descarga (Windows 7, Office, Visual C++, .NET, ...). Lanzamos la ejecución del script y nos vamos a hacer otras cosas, porque tarda un rato en descargar todo:
# /datos/wsus/update.sh
Cuando termina, vemos que ha hecho:
# du -sh /datos/wsus/wsusoffline/client
2,6G w100
4,8G w100-x64
1,9G w63-x64
# ls -1 /datos/wsus/wsusoffline/client/w100-x64/glb/
windows10.0-kb3172729-x64_bb12a14ec3891ec0a9e24edb529632263783d389.cab
windows10.0-kb3172729-x64_f4fc9775baa98c176f43e87c40088231a884122b.cab
windows10.0-kb3173427-x64_d95e56e499e2c281a1f59585221dc891253414c7.cab
windows10.0-kb3173427-x64_e3da65fe753d24a1759cdd029028cde743a62a23.msu
windows10.0-kb3173428-x64_52fa3686737353fae20ab55fa9c924bd90558a31.cab
windows10.0-kb4035632-x64_ea26f11d518e5e363fe9681b290a56a6afe15a81.msu
windows10.0-kb4049011-x64_a58e4c340939a7b23b86055a18abdc9c59308094.msu
windows10.0-kb4049065-x64_f92abbe03d011154d52cf13be7fb60e2c6feb35b.msu
windows10.0-kb4056887-x64_0fcf1ff448cea9474ea089a3d866beeb7212cec1.cab
windows10.0-kb4056887-x64_12a57a1104466ca878eb096fefa6c6babe520810.cab
windows10.0-kb4056887-x64_1e5c03724988979684c35a5493829e4abe9bdbfc.cab
windows10.0-kb4056887-x64_57d92c622280f34d0ee271a9c58fdce91c3c6808.cab
windows10.0-kb4056887-x64_8ad98c5fb14f2938536d794074a5b901b6eb0d72.cab
windows10.0-kb4056888-x64_5943823d032a25e40f8eee1613aa849d3963bd1d.cab
windows10.0-kb4056890-x64_2d0216b0e6b49f457e5111fbd7d766984af3f6cf.cab
windows10.0-kb4056891-x64_99b9dadbd6a71c8c9ca58b8e53285f8320dd32e3.cab
windows10.0-kb4056892-x64_39198b373a07390a3afdf2a64d19f24d59fca7a6.cab
windows10.0-kb4056893-x64_f025805bafd32c5f9d7ca37eb255a894dfb025d8.cab
windows10.0-kb4058702-x64_4ed8d0df4f3c190d3e423bf287d7e95a21a9124a.msu
Y ahí vemos todos los ficheros con las distintas actualizaciones y parches descargados esperando para ser aplicados según necesite el cliente Windows. Este script lo ejecutaremos de vez en cuando o al menos cuando se actualice wsusoffline.

Estos ficheros hay que compartirlos usando una carpeta samba de solo lectura accesible desde los Windows:
# cat /etc/samba/smb.conf
...
...
[wsus]
comment = WSUS Windows Updates
path = /datos/wsus
writable = no
browseable = yes
guest ok = yes
force directory mode = 0777
...
...
Reiniciamos samba y desde un Windows podemos abrir una ventana de comandos con credendiales de usuario administrador y teclear:
net use z: \\ip-servidor\wsus /persistent:no
Z:\wsusoffline\client\cmd\DoUpdate.cmd
Con lo cual empezará el laaaargo proceso de actualizaciones, que puede durar varias horas. En la ventana de terminal nos va informando escuetamente de cada parche aplicado. No nos desanimemos: si fuese mediante actualizaciones online podría tardar varios días y saturar la conexión de red del centro. De esta manera al menos tenemos controlado lo que se va haciendo y que se va actualizando.

5. Cosas a tener en cuenta.

Esto no es un camino de rosas, simplemente es algo para aminorar los problemas. Por eso debemos tener en cuenta varias cosas:

  • El wsusoffline es el sistema mas rápido si tenemos varios PC con Windows y el que menos tráfico de red genera, pero va siempre desactualizado respecto a los repositorios oficiales. Hay que vigilar si hay versiones nuevas de vez en cuando para actualizalo. A fecha de escribir esto la última actualización descargada es KB4058702, pero en Microsoft van por la KB4074608, que además es incompatible con la anterior, lo cual puede causar problemas en el script.
  • El update mas fiable es el realizado online contra los repositorios de Microsoft. El problema es que puede tardar mucho tiempo, descargar varios gigas y exigir varios reinicios. Multiplica eso por el número de Windows de tu red. De todas formas, si no nos queda otro remedio que hacerlo para salir de alguna situación complicada podemos abrir de forma directa la ventana para actualizaciones haciendo en un intérprete de comandos de Windows:
    C:\Windows\System32\control.exe /name Microsoft.WindowsUpdate 
    
  • Una alternativa a lo anterior o un método para salir de un atasco en que todas las actualizaciones fallan porque hay que subir de versión (por ejemplo, pasar de la 1703 a la 1709 en Windows 10) es descargar la última ISO de Windows (a día de hoy la 1709), montarla con wincdemu y actualizar desde allí.

Después de todas estas actualizaciones es bueno saber en que versión tenemos el Windows. Por ahí se comenta que ejecutando en una consola Powershell:
Get-CimInstance Win32_OperatingSystem | Select-Object buildnumber,version
Se muestra la versión, pero es falso ya que no sale completo todo el número de compilación. La manera de saberlo es con:
winver
Nos muestra:


Este Windows tiene por tanto en el momento en que escribimos esto la versión 1709, compilación 16299.192. Esta bastante actualizado a día de hoy, si buscamos en internet el "Historial de actualizaciones de Windows 10" vemos:


Podemos ver que nuestro Windows está en la compilación .192 y según la página de Microsoft posteriormente "sólo" han salido la 201, 214 y la 248. Cuando empecé a elaborar esta entrada ibamos por la 214 y ya ha salido otra, ahí es nada. Es verlo y me da la bajona... vaya cruz.

domingo, 10 de septiembre de 2017

Activar un usuario de Windows deshabilitado usando chntpw

Por imperativo legal he tenido que instalar un Windows 7 en una máquina algo antigua. Durante la instalación te pide un nombre de usuario que convertirá en el administrador de la máquina y será con el que por defecto se trabajará. El usuario por defecto es administrador, que te voy a contar...

Bueno, pues despues de hacer esto lo primero es despojar a ese usuario de trabajo de sus permisos de administrador, sacándole del grupo de "Administradores". Tras eso, en dicho grupo solo permanece el usuario "Administrador" que es creado de forma silenciosa durante la instalación. También hay que cambiar la contraseña al usuario "Administrador" por la que queramos que tenga.

Tras esto reiniciamos, vamos a la pantalla de login y vemos ambos usuarios. Pero si intentas acceder con el usuario Administrador te dice que "está deshabilitado". Agarrate: el Windows 7 te permite quedar el sistema sin un administrador válido sin avisarte de ello. ¿Ahora cómo habilito el usuario?.

Bueno, pues la solución está en arrancar con un CD/USB Live de Linux que tenga la herramienta chntpw, ya sea el CD propio o alguno que lo contenga (tipo SystemRescueCD o Ubuntu). Una vez arrancado, montamos la particion de Windows en /mnt (o equivalente) con:
# mount /dev/sda2 /mnt
Normalmente el sistema Windows a partir de su versión 7 está en la partición sda2 o sda3, siendo la sda1 una pequeña partición reservada para hacer el mal a través de UEFI o similar.

Una vez montada, hacemos una copia de seguridad del fichero de configuración de usarios (por si metemos la pata poder restaurar):
# cd /mnt/WINDOWS/System32/config
# cp SAM SAM.backup
Avisamos que alguno de los nombres anteriores podría estar en mayúscula/minúscula, en función del Windows usado.

Una vez hecha la copia de seguridad miramos el fichero con chntpw:
# chntpw /mnt/WINDOWS/System32/config/SAM
chntpw version 0.99.6 110511 , (c) Petter N Hagen

Hive  name (from header): <\SystemRoot\System32\Config\SAM>
ROOT KEY at offset: 0x001020 * Subkey indexing type is: 686c 
File size 65536 [10000] bytes, containing 5 pages (+ 1 headerpage)
Used for data: 298/27544 blocks/bytes, unused: 42/9160 blocks/bytes.


* SAM policy limits:
Failed logins before lockout is: 0
Minimum password length        : 0
Password history count         : 0
| RID -|---------- Username ------------| Admin? |- Lock? --|
| 01f4 | Administrador                  | ADMIN  | dis/lock |
| 01f7 | DefaultAccount                 |        | dis/lock |
| 01f5 | Invitado                       |        | dis/lock |
| 03ea | Usuario                        |        | *BLANK*  |
...
...
Como se ve, el usario Administrador está bloqueado. Para cambiar esa situación (o para borrar la contraseña si no la conocemos o la hemos olvidado), usamos el parámetro "-i" (pongo en negrita la parte interactiva):
# chntpw +i /mnt/WINDOWS/System32/config/SAM
chntpw version 0.99.6 110511 , (c) Petter N Hagen
Hive  name (from header): <\SystemRoot\System32\Config\SAM>
ROOT KEY at offset: 0x001020 * Subkey indexing type is: 686c 
File size 65536 [10000] bytes, containing 5 pages (+ 1 headerpage)
Used for data: 298/27544 blocks/bytes, unused: 42/9160 blocks/bytes.

* SAM policy limits:
Failed logins before lockout is: 0
Minimum password length        : 0
Password history count         : 0

<>========<> chntpw Main Interactive Menu <>========<>

Loaded hives: 

  1 - Edit user data and passwords
      - - -
  9 - Registry editor, now with full write support!
  q - Quit (you will be asked if there is something to save)

What to do? [1] -> 1

===== chntpw Edit User Info & Passwords ====

| RID -|---------- Username ------------| Admin? |- Lock? --|
| 01f4 | Administrador                  | ADMIN  | dis/lock |
| 01f7 | DefaultAccount                 |        | dis/lock |
| 01f5 | Invitado                       |        | dis/lock |
| 03ea | Usuario                        |        | *BLANK*  |

Select: ! - quit, . - list users, 0x - User with RID (hex)
or simply enter the username to change: [Administrador] ---pulso Enter---

RID     : 0500 [01f4]
Username: Administrador
fullname: 
comment : Cuenta integrada para la administracion del equipo o dominio
homedir : 

User is member of 1 groups:
00000220 = Administradores (which has 2 members)

Account bits: 0x0211 =
[X] Disabled        | [ ] Homedir req.    | [ ] Passwd not req. | 
[ ] Temp. duplicate | [X] Normal account  | [ ] NMS account     | 
[ ] Domain trust ac | [ ] Wks trust act.  | [ ] Srv trust act   | 
[X] Pwd don't expir | [ ] Auto lockout    | [ ] (unknown 0x08)  | 
[ ] (unknown 0x10)  | [ ] (unknown 0x20)  | [ ] (unknown 0x40)  | 

Failed login count: 0, while max tries is: 0
Total  login count: 1

- - - - User Edit Menu:
 1 - Clear (blank) user password
 2 - Edit (set new) user password (careful with this on XP or Vista)
 3 - Promote user (make user an administrator)
 4 - Unlock and enable user account [probably locked now]
 q - Quit editing user, back to user select
Select: [q] > 4
Unlocked!

Select: ! - quit, . - list users, 0x - User with RID (hex)
or simply enter the username to change: [Administrador] !

<>========<> chntpw Main Interactive Menu <>========<>

Loaded hives: 

  1 - Edit user data and passwords
      - - -
  9 - Registry editor, now with full write support!
  q - Quit (you will be asked if there is something to save)


What to do? [1] -> q

Hives that have changed:
 #  Name
 0  
Write hive files? (y/n) [n] : y
 0   - OK
Y ya podemos ver que está desbloqueado:
# chntpw /mnt/WINDOWS/System32/config/SAM
chntpw version 0.99.6 110511 , (c) Petter N Hagen

Hive  name (from header): <\SystemRoot\System32\Config\SAM>
ROOT KEY at offset: 0x001020 * Subkey indexing type is: 686c 
File size 65536 [10000] bytes, containing 5 pages (+ 1 headerpage)
Used for data: 298/27544 blocks/bytes, unused: 42/9160 blocks/bytes.


* SAM policy limits:
Failed logins before lockout is: 0
Minimum password length        : 0
Password history count         : 0
| RID -|---------- Username ------------| Admin? |- Lock? --|
| 01f4 | Administrador                  | ADMIN  |          |
| 01f7 | DefaultAccount                 |        | dis/lock |
| 01f5 | Invitado                       |        | dis/lock |
| 03ea | Usuario                        |        | *BLANK*  |
...
...
Si nos hemos fijado en un momento dado nos ha ofrecido la siguiente gama de acciones para realizar sobre el usuario:
 1 - Clear (blank) user password
 2 - Edit (set new) user password (careful with this on XP or Vista)
 3 - Promote user (make user an administrator)
 4 - Unlock and enable user account [probably locked now]
 q - Quit editing user, back to user select
Lo cual nos da una idea de la potencia del comando. Incluye incluso una opción de edición de registro que parece bastante peligrosa y de la que ya habĺe en su día para otra cosa.

Bueno, pues con el entuerto arreglado...¡feliz fin del verano!.

martes, 27 de junio de 2017

Ocultar particiones Windows en el escritorio Linux

Esta mañana lo ha preguntado un compañero y me ha costado encontrarlo: si tenemos un sistema con arranque dual, al arrancar el Linux el gestor de archivos/escritorio muestra las particiones de Windows, invitando al usuario a entrar allí con un doble click. Al hacerlo, le pedirá unas credenciales de administrador para montarlas.

Lo ideal sería que esas particiones no aparezcan allí ya que molestan sin aportar nada, a no ser que sea necesario su montaje (y en cuyo caso lo mas sencillo es hacerlo en el arranque mediante /etc/fstab). Voy a contarlo aquí para tenerlo más mano para la próxima vez.

La manera de ocultarlas es editar el siguiente fichero:
# cat /etc/udev/rules.d/10-local.rules
KERNEL=="sda2", ENV{UDISKS_IGNORE}="1"
KERNEL=="sda4", ENV{UDISKS_IGNORE}="1"
KERNEL=="sda5", ENV{UDISKS_IGNORE}="1"
Siendo sda2, sda4 y sda5 las particiones de Windows que queremos ocultar en el ejemplo. En el siguiente reinicio ya no aparecerán tentadoras para el doble click.

Para identificar las particiones a ocultar podemos usar, como root, "fdisk -l" para casos normales o "parted /dev/sdX print" si la tabla de particiones está en formato GPT.

Si queremos aplicarlo sobre muchas máquinas lo lógico es poner una regla puppet distribuya /etc/udev/rules.d/10-local.rules a todas ellas.

miércoles, 5 de abril de 2017

HP Deskjet 710C en Windows 8 sin driver gracias a Linux.

Tenemos una impresora HP Desjket 710C que lleva 15 años funcionando estupendamente: los cartuchos son baratos, los inyectores van bien, nunca se atasca y los rodillos cogen el papel con soltura. Hemos retirado otras impresoras posteriores pero la 710C sigue funcionando aunque es algo lenta imprimiendo, pero no es grave porque tampoco tiene un uso intensivo. Sin duda, el departamento de obsolescencia programada de HP estaba de vacaciones cuando sacaron esa impresora. A fin de cuentas va a resultar que a veces el Mal se toma un descanso.

Hasta ahora ha estado funcionando con Linux y con Windows XP sin mayor problema. Al cambiar a Ubuntu 14.04 ha seguido funcionando con el driver "HP DeskJet 710C Foomatic/pnm2ppa (recommended)", pero al actualizar a Windows 8 ha aparecido un problema: el driver oficial que pone Windows falla al imprimir y mata el spooler de impresión. Es un problema documentado en Internet y que no tiene solución para Windows 8 y 10. Para Windows 7 tiene una solución un poco chapucera.

No es la primera vez que pasa esto de que no haya drivers para Windows. Es un tema olvidado para los Redmond Lovers (;-)) que optan por comprar otra impresora si la antigua ya no tiene drivers para Windows, pero si que recuerdan hasta el lecho de muerte cualquier problema de drivers con Linux. En fin, ¿hay solución o debemos retirar una impresora totalmente funcional?.

La impresora está en una estancia donde hay un PC con Linux y otro con arranque dual Linux/Windows 8. Hasta ahora estaba conectada al equipo Windows solamente. ¿Podría conectarla al equipo que tiene solo Linux y compartirla por CUPS desde allí hacía el otro PC?. Vamos allá:

  • Como hemos visto, la conectamos al puerto paralelo (no tiene USB) del equipo Linux y la damos de alta con el nombre HP_DESKJET_COLOR usando el driver "HP DeskJet 710C Foomatic/pnm2ppa", marcando la opción "Compartida".
  • En el segundo equipo, arrancamos en Linux y la damos de alta como impresora remota con URI http://ip-primer-equipo:631/printers/HP_DESKJET_COLOR y el mismo driver que antes. Probamos a imprimir vemos que funciona. Hasta aquí todo va bien.
  • Arrancamos Windows 8 en el segundo equipo y añadimos la impresora indicando que es de red con la ruta http://ip-primer-equipo:631/printers/HP_DESKJET_COLOR. Ponemos el driver normal de la 710C a ver si asi no falla..... ¡Meeeeec, error!, al dar a imprimir el proceso Spooler muere y queda inutilizada.
  • La borramos y la damos de nuevo de alta elegiendo el driver Generic/TextOnly. Se supone que ese es el driver RAW oficial de Windows, que manda los trabajos de impresión en bruto sin procesar al destino y por tanto no usa el driver que falla. Debería ser equivalente al "Local Raw Printer" de CUPS que conté aquí con una Epson. Hablo en condicional porque tampoco funciona, da otro error que viene a decir que el trabajo ha quedado paralizado y hay que reiniciar impresora y ambos PC para que funcione.
  • Nuevo intento, ahora con los drivers CUPS x64 para Windows. Nunca he tenido muy claro para que valen, pero es buen momento para probar. Es un camino corto: dan un error durante la instalación y no permiten continuar.
  • A punto de tirar la toalla, decido probar con un driver PostScript Universal. Me suena haber leído que si mandas un documento .ps en bruto a CUPS, este lo procesa con el driver correspondiente y lo imprime. Como no puedo encontrar los drivers universales PostScript de Adobe (que son la referencia en estos casos) para Windows 8, descargo estos de Xerox según cuentan aquí.
  • Ejecuto UNIV_5.520.6.0_PS_x64.exe descargado en el anterior paso, se descomprime en C:\Xerox\UNIV_5.520.6.0_PS_x64_Driver.inf\* y doy de nuevo de alta la impresora. Al elegir driver elijo Utilizar Disco y me voy al directorio anterior, seleccionando el driver “Xerox Global Print Driver PS” de la lista de drivers.



  • Mando a imprimir un documento desde el Windows por la impresora HP con el driver Xerox PS, lo convierte en un documento PostScript que se envía a http://ip-primer-equipo:631/printers/HP_DESKJET_COLOR, cuyo CUPS lo recoge y.... carajo, se imprime. Esto funciona.

Bueno, pues ya tenemos impresora por otra temporadita, gracias a Linux y a la facilidad de CUPS para aceptar cualquier documento que le llegue en formato PostScript y procesarlo con el driver adecuado. Con este truco podremos seguir usando en nuestras redes cualquier impresora antigua que funcione en Linux pero ya no esté soportada por Windows.

A ver si nos aguanta la impresora hasta que llegué el AVE a nuestra patria chica, que lo han retrasado hoy hasta 2025. Es muy fácil saber donde está Extremadura: en el hueco.



Es curioso que en una zona donde no quieren poner ningún tren eléctrico si quisieron ponernos 4 reactores nucleares que al final quedaron en 2, y esperemos que pronto en 0 si los hermanos portugueses aprietan lo suficiente.

Mi apuesta personal es que Elon Musk pondrá un hombre en Marte antes de que llegue el AVE a Badajoz.