19 julio, 2024

Copiar archivo en el C: con mínimos privilegios

Lidiando un con un horrendo desarrollo (del cual no poseo control) que obliga a tener el archivo a importar en el disco C:\ , a fin de evitar que los de helpdesk rompan toda la estructura de permisos del pobre Windows en el disco raíz ... toco en pensar una solución creativa sin atentar con la seguridad hasta que llegue la solución definitiva.

Fotos gratis : mano, hombre, persona, pensando, dedo, bulbo, brazo, canto,  idea, africano, orador, sentido, accion humana, Bulbo de luz, foco  eléctrico 4500x3000 - - 1340801 - Imagenes gratis - PxHere

 
Para lograr que se dispare mover un archivo '.txt' al raíz del disco 'C:`' cuando se coloca un archivo en una carpeta, podemos usar el Programador de Tareas de Windows junto con un script de batch y eventos de Windows

Paso 0: Creación de un usuario administrador local

    - Desde "Administrador de equipos" crear un usuario local, con una clave compleja que resguardaremos en un gestor de claves. Ese usuarios no debe caducar su clave y debe pertenecer al grupo Administradores

 

Paso 1: Configurar la Auditoría en la Carpeta

   - Clic derecho en la carpeta C:\lbr (en mi caso) y selecciona "Propiedades".
   - Ir a la pestaña "Seguridad" y hacer clic en "Opciones avanzadas".
   - Ir a la pestaña "Auditoría" y hacer clic en "Agregar".
   - Hacer clic en "Seleccionar una entidad principal" y seleccionar  "Todos" u "Usuarios autenticados"
   - En "Aplicar en", seleccionar "Esta carpeta, subcarpetas y archivos".
   - En "Accesos", seleccionar "Crear archivos / escribir datos" y "Crear carpetas / anexar datos".
   - Hacer clic en "Aceptar" para guardar los cambios.



 

Paso 2: Crear un batch para mover el Archivo

Crea un archivo batch que mueva el archivo '.txt' al raíz del disco 'C:'. 
Guardar este script como 'mover.cmd' en una ubicación adecuada (en mi caso C:\Oracle)


move /Y c:\lbr\*.txt c:\RELOJ.txt
  • El parámetro /Y permite sobrescribir el archivo sin preguntar
  • Toma un archivo con extensión .TXT de la carpeta c:\lbr que tenga cualquier nombre y lo mueve al C: bajo el nombre de RELOJ.TXT
  • En caso que exista mas de un archivo .TXT en la carpeta, no lo procesa ya que el comando no puede mover varios archivos a uno solo
 

Paso 3: Crear una Tarea Programada


1. Abrir el Programador de Tareas: CON PERMISOS DE ADMINISTRADOR

2.Crear una nueva tarea
   - En el panel de acciones a la derecha, seleccionar "Crear tarea" (no usar "Crear tarea básica").

3. Configurar la tarea:
   - En la pestaña "General":
     - Asignar un nombre a la tarea, por ejemplo, "Importar_AlRaiz".
     - Seleccionar "Ejecutar con los privilegios más altos".
     - Configura la tarea para ejecutarse usando una cuenta de administrador local creada en el paso 0.


4. Configurar el disparador (trigger):
   - Ve a la pestaña "Desencadenadores" y haz clic en "Nuevo".
   - En "Iniciar tarea", selecciona "Al producirse un evento". 
   - En "Configuración", selecciona "Personalizar" -> botón "Nuevo filtro de evento"
   - Haz clic en la solapa "XML", tildar "Editar consulta", aceptar el cuadro de diálogo, y en el cuadro de texto colocar:
 

<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[EventData[Data[@Name='ObjectName'] and (Data='C:\lbr')]] and *[System[(EventID='4663')]]
</Select>
</Query>
</QueryList>






(si, la imagen tiene un código incorrecto, no tuve ganas de cambiarla 👹)

5. Configurar la acción (action):
   - Ve a la pestaña "Acciones" y haz clic en "Nuevo".
   - En "Programa/script", escribe cmd.
   - En "Agregar argumentos", escribe: /c start "" "C:\Oracle\move_file.cmd"



6. Finalizar la creación de la tarea
   - Haz clic en "Aceptar" para crear la tarea (va solicitar las credenciales del usuario que va ejecutar la tareas).
 
Si aparece esto es porque no puede acceder al script o no se tiene permisos al registro Security para el XML ... recordar abrir el Programador de Tareas con privilegios de administrador y el usuario de servicio debe tener permisos de Administrador local




Nota Importante

  • En algunos sistemas solo actúa cuando se cambia el nombre, porque el evento contiene en ObjectName la ruta completa del archivo (no solamente la carpeta) por limitaciones técnicas no se puede poner en el disparador que sea C:\lbr\* ya que los eventos de Windows usa XPath 1.0 y no tiene instrucciones como comodines, contain o start-with
  • Seguridad y permisos: Verificar de que la cuenta bajo la cual se ejecuta la tarea programada tiene permisos de escritura en el raíz del disco 'C:' (el grupo Administradores ya tiene ese permiso).
  • Pruebas: Realizar las pruebas para verificar que la tarea se dispara correctamente y que el archivo se mueve al raíz del disco `C:` cuando se crea un archivo en la carpeta.
 
 

Referencias:

  • https://www.w3.org/TR/xpath/
  • https://techcommunity.microsoft.com/t5/ask-the-directory-services-team/advanced-xml-filtering-in-the-windows-event-viewer/ba-p/399761
  • https://learn.microsoft.com/es-es/windows/win32/wes/consuming-events?redirectedfrom=MSDN#limitations
 

0 comments:

Publicar un comentario