none
NOMBRE USUARIO QUE ELIMINA UN FICHERO RRS feed

  • Pregunta

  • Hola,

    ¿me podrían indicar la forma de en una aplicación, obtener el nombre del usuario de Windows (logueado) que elimina un fichero concreto?

    A nivel de fichero en un servidor, necesito saber quien elimina un determinado fichero.

    Gracias.

    martes, 10 de diciembre de 2013 11:56

Respuestas

  • "luis_vlc" escribió:

    > Buscando más información por internet, encontré este mismo
    > foro en ingles donde un usuario preguntaba exactamente lo
    > mismo que yo necesito, y los especialistas vienen a decir
    > que en VB esa característica no se puede implementar (salvo
    > acudiendo a la auditoría de windows, cosa que yo trato de
    > evitar por todos los medios posibles).

    La auditoría del sistema de archivos es un trabajo del propio sistema operativo de la misma manera que lo es su seguridad. Lo que yo no llego a comprender es que quieras "cazar" al usuario que ha eliminado un archivo, cuando lo más sencillo sería impedir que ese usuario tenga permisos para eliminar archivos en una unidad o carpeta concretas.

    En cualquier empresa que desee tener unas ciertas normas de seguridad, lo habitual sería definir unas políticas de acceso al sistema de archivos por parte de los usuarios, donde cada uno se encuentra incluido en un grupo de usuarios, concediéndose al grupo de usuarios los permisos oportunos, permisos estos que heredará cada usuario incluido en dicho grupo.

    Si esa empresa decide que los usuarios existentes en el Grupo X no puedan eliminar los archivos existentes en una unidad concreta de la red, lo más sensato es denegarle el permiso de eliminación en esa unidad a dicho grupo de usuarios, y por ende, a cada usuario existente en aquel. Pero ¿qué sentido tiene que un usuario pueda eliminar archivos y querer "cazarlo" por hacer una acción que le ha sido permitida de antemano? Es como si alguien me dice que tengo permiso para hacer algo y después me "castiga" por hacer ese algo. ¿No sería una situación un tango incongruente? Desde luego, me gustaría conocer la opinión al respecto de cualquier tribunal de justicia. ;-)

    Ahora bien, si a pesar de concederle permisos de eliminación al grupo de usuarios, queremos conocer qué usuario elimina, crea o modifica un archivo, no nos queda más remedio que auditar la unidad de red o carpeta concreta, para llevar un registro de todo lo que acontece en esa unidad o carpeta, de la misma manera que nuestro superior nos audita el trabajo que hacemos, por si estamos todo el día "tocándonos ... las narices". ;-)

    Y todo este trabajo se lleva a cabo a través de las acciones oportunas que el propio sistema operativo pone a nuestra disposición.

    ¿Se puede aplicar las políticas de auditoria desde nuestra aplicación de Visual Basic o desarrollada con cualquier otro lenguaje de programación? En estos momentos ignoro si existe alguna API que nos permita habilitar la auditoría de una unidad de red o carpeta desde nuestra propia aplicación. Desde luego, lo más sencillo es hacerlo desde el propio Explorador de Archivos, seleccionando la unidad, carpeta o archivo y haciendo clic con el botón secundario del ratón para seleccionar la opción Propiedades.

    En el cuadro de diálogo Propiedades, seleccionamos la pestaña Seguridad, y dentro de ésta, pulsamos el botón Opciones avanzadas. En el nuevo cuadro de diálogo, pulsamos la pestaña Auditoría para agregar, editar o eliminar aquellos objetos que se desean auditar. Ni que decir tiene que todo este trabajo lo deberá de realizar cualquier usuario perteneciente al grupo Administradores, que es otro grupo de usuarios con permisos de seguridad elevados.

    Aparte de hacer todo esto para cada unidad, carpeta o archivos individuales, tendremos que irnos a la Directiva de seguridad local para establecer las propias directivas de auditoría que se desean efectuar, y esto ya me cuesta más trabajo explicarlo, de ahí que te indicara en mi mensaje anterior que acudieses a un foro específico de Windows cliente o de Windows Server.

    Una vez implementadas las políticas de auditoría adecuadas, todo lo que se haga en esa unidad, carpeta o archivos se almacenarán como mensajes de sucesos o eventos, los cuales podrás leerlos desde el Visor de eventos del sistema operativo, donde entiendo que aparecerá la cuenta del usuario que ha creado, modificado o eliminado un archivo. Cuestión aparte es que sepas interpretar correctamente el contenido del mensaje del suceso registrado. ;-)

    > En este punto, yo me pregunto si en VB se puede implementar esta
    > necesidad, sin filesystemwatcher

    Si existe alguna API que permita hacer todo eso, que ignoro por el momento si existe, digo yo que se podrá implementar desde una aplicación desarrollada con VB, C#, C++, o cualquier otro lenguaje de programación que pueda interactuar con dicha API.

    > Yo no soy especialista, pero creo que la información de qué usuario
    > abre/edita/borra un archivo (word, excel, pdf, txt, jpg) debe
    > registrarse en algún punto SIN NECESIDAD DE ACTIVAR LA AUDITORIA DE
    > WINDOWS, que consume muchos recursos y memoria y es un poco
    > infumable/ilegible.

    ¡Bueno! Creo que ya te he indicado donde se registra la información, SIEMPRE QUE SE HAYA HABILITADO LA AUDITORÍA DE WINDOWS, porque si no está habilitada, ¿cómo pretendes entonces conocer las acciones ejecutadas por un usuario en una unidad, carpeta o archivo concreto? ;-)


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    jueves, 12 de diciembre de 2013 11:19
    Moderador
  • hola

    podrias usar el

    Environment.UserName (Propiedad)

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 10 de diciembre de 2013 12:31

Todas las respuestas

  • hola

    podrias usar el

    Environment.UserName (Propiedad)

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 10 de diciembre de 2013 12:31
  • Gracias por la ayuda Leandro, pero sigue cogiéndome el usuario que ejecutó el programa en VB, no el usuario del dominio que eliminó el fichero del servidor.

    le paso como último argumento lo que me has especificado, pero no funciona:

     Private Sub Watcher1_Deleted(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) Handles Watcher1.Deleted
            If ch_eliminados.Checked = True Then NotificarCambio(e.FullPath, "Eliminación", IO.Path.GetExtension(e.Name), "", Environment.UserName)
        End Sub

    necesito el usuario que eliminó el fichero, no el que ejecutó el programa en VB (que es siempre el administrador)

    martes, 10 de diciembre de 2013 14:02
  • >>no el usuario del dominio que eliminó el fichero del servidor.

    pero ese archivo se elimina desde la aplicacion que estas desarrollando ? o la realiza una persona por fuera de la aplicacion

    usas el File.Delete() para eliminar el archivo, porque no veo como por fuera si te borran un archivo tu aplicacion lo detecte

    usas algun api de windows para lograr esto ?

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 10 de diciembre de 2013 14:41
  • a mi aplicación en VB le indico la carpeta (ruta en el servidor) a "vigilar" para que si un usuario del dominio accede a esa carpeta y borra algún archivo, yo sepa quién ha sido.

    para el usuario, esta aplicación de VB es transparente, no la ve. el administrador la ejecuta en su equipo de forma local, le pasa la ruta del servidor a vigilar y comienza la monitorización.

    Un usuario, en su trabajo diario puede acceder a esa ruta del servidor sin problemas, pero si elimina algún archivo, debo saber quién ha sido. de ahí a utilizar el manejador de eventos Filesystemwatcher para la eliminación.

    mi problema es que en la aplicación de visual basic, cometía el error de hacer siempre un getUser (de varias formas) que siempre me daba como resultado cuando se producía la eliminación de un fichero, el usuario administrador, porque es el que inicia la aplicación de VB.

    si el archivo que elimina un usuario es un word, por ejemplo, debo "cazar" ese usuario que ha eliminado ese word.

    espero haberme explicado. muchas gracias por la ayuda

    :-)


    martes, 10 de diciembre de 2013 14:48
  • "luis_vlc" escribió:

    > si el archivo que elimina un usuario es un word, por ejemplo,
    > debo "cazar" ese usuario que ha eliminado ese word.
    >
    > espero haberme explicado

    Hola:

    Te has explicado perfectamente. ;-)

    Pero para "cazar" al usuario que ha eliminado el archivo de Word, por ejemplo, digo yo que el Administrador de ese servidor deberá habilitar las directivas de auditoría oportunas en el sistema operativo para posteriormente analizar los eventos de seguridad en el Visor de eventos. Y la explicación de como se hace todo esto, entiendo que está fuera del alcance del foro de Visual Basic .NET en el que nos encontramos, por lo que te aconsejaría que acudieses a algún foro de Windows, si así lo estimas oportuno, para que los usuarios más expertos que participan allí te expliquen cómo tienes que habilitar las directivas de auditoría.

    ¿Cómo controlar todo eso a través de tu aplicación de Visual Basic? Siéndote sincero, no tengo ni la menor idea de cómo puedes hacerlo, y desde luego, poco te va a ayudar en ese aspecto el objeto FileSystemWatcher, salvo que este tenga algo por ahí que yo desconozca, claro está.

    Windows Server General

    Windows Cliente

    ¡Suerte!


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    miércoles, 11 de diciembre de 2013 13:23
    Moderador
  • Muchas gracias Enrique por tu respuesta.

    Buscando más información por internet, encontré este mismo foro en ingles donde un usuario preguntaba exactamente lo mismo que yo necesito, y los especialistas vienen a decir que en VB esa característica no se puede implementar (salvo acudiendo a la auditoría de windows, cosa que yo trato de evitar por todos los medios posibles).

    En este punto, yo me pregunto si en VB se puede implementar esta necesidad, sin filesystemwatcher que da hasta donde da, pero tal vez con alguna otra fórmula que permita capturar esta información. Yo no soy especialista, pero creo que la información de qué usuario abre/edita/borra un archivo (word, excel, pdf, txt, jpg) debe registrarse en algún punto SIN NECESIDAD DE ACTIVAR LA AUDITORIA DE WINDOWS, que consume muchos recursos y memoria y es un poco infumable/ilegible.

    Esa es la información que le falta a mi programa de monitorización de archivos en VB: tengo fecha, fichero, tipo de acceso... me falta el QUIÉN.

    Agradezco cualquier aporte.

    pd: el foro donde obtuve más información: http://social.msdn.microsoft.com/Forums/vstudio/en-US/31609ee6-5d0a-4a51-a275-77bc32e25c10/file-system-watcher-who-wrote-into-the-file?forum=vbgeneral

    miércoles, 11 de diciembre de 2013 15:53
  • "luis_vlc" escribió:

    > Buscando más información por internet, encontré este mismo
    > foro en ingles donde un usuario preguntaba exactamente lo
    > mismo que yo necesito, y los especialistas vienen a decir
    > que en VB esa característica no se puede implementar (salvo
    > acudiendo a la auditoría de windows, cosa que yo trato de
    > evitar por todos los medios posibles).

    La auditoría del sistema de archivos es un trabajo del propio sistema operativo de la misma manera que lo es su seguridad. Lo que yo no llego a comprender es que quieras "cazar" al usuario que ha eliminado un archivo, cuando lo más sencillo sería impedir que ese usuario tenga permisos para eliminar archivos en una unidad o carpeta concretas.

    En cualquier empresa que desee tener unas ciertas normas de seguridad, lo habitual sería definir unas políticas de acceso al sistema de archivos por parte de los usuarios, donde cada uno se encuentra incluido en un grupo de usuarios, concediéndose al grupo de usuarios los permisos oportunos, permisos estos que heredará cada usuario incluido en dicho grupo.

    Si esa empresa decide que los usuarios existentes en el Grupo X no puedan eliminar los archivos existentes en una unidad concreta de la red, lo más sensato es denegarle el permiso de eliminación en esa unidad a dicho grupo de usuarios, y por ende, a cada usuario existente en aquel. Pero ¿qué sentido tiene que un usuario pueda eliminar archivos y querer "cazarlo" por hacer una acción que le ha sido permitida de antemano? Es como si alguien me dice que tengo permiso para hacer algo y después me "castiga" por hacer ese algo. ¿No sería una situación un tango incongruente? Desde luego, me gustaría conocer la opinión al respecto de cualquier tribunal de justicia. ;-)

    Ahora bien, si a pesar de concederle permisos de eliminación al grupo de usuarios, queremos conocer qué usuario elimina, crea o modifica un archivo, no nos queda más remedio que auditar la unidad de red o carpeta concreta, para llevar un registro de todo lo que acontece en esa unidad o carpeta, de la misma manera que nuestro superior nos audita el trabajo que hacemos, por si estamos todo el día "tocándonos ... las narices". ;-)

    Y todo este trabajo se lleva a cabo a través de las acciones oportunas que el propio sistema operativo pone a nuestra disposición.

    ¿Se puede aplicar las políticas de auditoria desde nuestra aplicación de Visual Basic o desarrollada con cualquier otro lenguaje de programación? En estos momentos ignoro si existe alguna API que nos permita habilitar la auditoría de una unidad de red o carpeta desde nuestra propia aplicación. Desde luego, lo más sencillo es hacerlo desde el propio Explorador de Archivos, seleccionando la unidad, carpeta o archivo y haciendo clic con el botón secundario del ratón para seleccionar la opción Propiedades.

    En el cuadro de diálogo Propiedades, seleccionamos la pestaña Seguridad, y dentro de ésta, pulsamos el botón Opciones avanzadas. En el nuevo cuadro de diálogo, pulsamos la pestaña Auditoría para agregar, editar o eliminar aquellos objetos que se desean auditar. Ni que decir tiene que todo este trabajo lo deberá de realizar cualquier usuario perteneciente al grupo Administradores, que es otro grupo de usuarios con permisos de seguridad elevados.

    Aparte de hacer todo esto para cada unidad, carpeta o archivos individuales, tendremos que irnos a la Directiva de seguridad local para establecer las propias directivas de auditoría que se desean efectuar, y esto ya me cuesta más trabajo explicarlo, de ahí que te indicara en mi mensaje anterior que acudieses a un foro específico de Windows cliente o de Windows Server.

    Una vez implementadas las políticas de auditoría adecuadas, todo lo que se haga en esa unidad, carpeta o archivos se almacenarán como mensajes de sucesos o eventos, los cuales podrás leerlos desde el Visor de eventos del sistema operativo, donde entiendo que aparecerá la cuenta del usuario que ha creado, modificado o eliminado un archivo. Cuestión aparte es que sepas interpretar correctamente el contenido del mensaje del suceso registrado. ;-)

    > En este punto, yo me pregunto si en VB se puede implementar esta
    > necesidad, sin filesystemwatcher

    Si existe alguna API que permita hacer todo eso, que ignoro por el momento si existe, digo yo que se podrá implementar desde una aplicación desarrollada con VB, C#, C++, o cualquier otro lenguaje de programación que pueda interactuar con dicha API.

    > Yo no soy especialista, pero creo que la información de qué usuario
    > abre/edita/borra un archivo (word, excel, pdf, txt, jpg) debe
    > registrarse en algún punto SIN NECESIDAD DE ACTIVAR LA AUDITORIA DE
    > WINDOWS, que consume muchos recursos y memoria y es un poco
    > infumable/ilegible.

    ¡Bueno! Creo que ya te he indicado donde se registra la información, SIEMPRE QUE SE HAYA HABILITADO LA AUDITORÍA DE WINDOWS, porque si no está habilitada, ¿cómo pretendes entonces conocer las acciones ejecutadas por un usuario en una unidad, carpeta o archivo concreto? ;-)


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    jueves, 12 de diciembre de 2013 11:19
    Moderador