GNU/Linux >> Tutoriales Linux >  >> Linux

¿Es posible detectar cuándo se ha descargado un archivo?

Tenemos un servidor donde otro script sFTP y descarga archivos todos los días.

Pregunta: ¿Es posible detectar que el archivo se descargó y luego archivarlo automáticamente después de que terminen?

Para aclarar:alojamos los archivos y alguien más viene y los descarga.

Este es el script que usan:

let $command = 'sftp -b /usr/tmp/file.sftp [email protected]'
show 'FTP command is ' $command
call system using $command #status

##file.sftp##

# Set local directory on PeopleSoft server
lcd /var/tmp
# Set remote directory on the remote server
cd ar/in
# Transfer all remote files to PeopleSoft
get file.dat
get file2.dat
# quit the session
bye

Respuesta aceptada:

Hay 3 vías que puedo concebir que podrían proporcionarle una solución.

1. Subsistema sftp personalizado

Podría envolver el sftp-server demonio a través de sshd_config y "anularlo" con su propia secuencia de comandos que luego podría interceptar qué sftp-server está haciendo, y luego actúe cuando vea que se descargó un archivo. Anulando el sftp-server predeterminado en sshd_config es fácil:

Subsystem       sftp    /usr/local/bin/sftp-server

Averiguar qué hacer en el script contenedor sería la parte difícil. En /usr/local/bin/sftp-server :

#!/bin/sh

# ...do something...
chroot /my/secret/stuff /usr/libexec/openssh/sftp-server
# ...do something...

2. Mira los registros

Si activa la depuración de sftp-sever puede hacer que muestre registros de cuándo los archivos se abren/cierran y se leen/escriben en/desde el servidor SFTP. Podría escribir un demonio/secuencia de comandos que observe estos registros y luego haga una copia de seguridad del archivo cuando sea necesario. Más detalles sobre cómo lograr esto ya están parcialmente cubiertos en mi respuesta a este mosaico de preguntas y respuestas de U&L:Nivel de registro de actividad en SFTP, así como aquí en esta publicación de blog titulada:Registro de actividad de sesión de transferencia de archivos SFTP.

Los registros de SFTP se pueden mejorar para que se vean así:

Sep 16 16:07:19 localhost sftpd-wrapper[4471]: user sftp1 session start from 172.16.221.1
Sep 16 16:07:19 localhost sftp-server[4472]: session opened for local user sftp1 from [172.16.221.1]
Sep 16 16:07:40 localhost sftp-server[4472]: opendir "/home/sftp1"
Sep 16 16:07:40 localhost sftp-server[4472]: closedir "/home/sftp1"
Sep 16 16:07:46 localhost sftp-server[4472]: open "/home/sftp1/transactions.xml" flags WRITE,CREATE,TRUNCATE mode 0644
Sep 16 16:07:51 localhost sftp-server[4472]: close "/home/sftp1/transactions.xml" bytes read 0 written 192062308
Sep 16 16:07:54 localhost sftp-server[4472]: session closed for local user sftp1 from [172.16.221.1]

Luego necesitaría desarrollar un demonio/secuencia de comandos que monitorearía los registros para los pares de eventos de apertura/cierre. Estos representan una transferencia de archivos completada. También puede hacer uso de syslog, que podría monitorear los eventos de registro "CLOSE" y podría usarse para realizar la copia de los archivos transferidos.

3. Incron

Puede utilizar los eventos Inotify que produce el kernel de Linux cada vez que se accede a un archivo. Hay un servicio llamado Incron que funciona de manera similar a Cron. Donde Cron funciona en función del tiempo, Incron funciona en función de los eventos del archivo. Por lo tanto, podría configurar una entrada de Incron que monitorearía sus directorios de carga SFTP, y cada vez que se detecte un evento de archivo específico, copie el archivo.

Relacionado:¿Examinar el archivo vmdk en Windows?

Eche un vistazo a la página del manual de inotify para obtener una descripción de los diversos eventos. Creo que le gustaría estar atento a un read() (IN_ACCESS ) seguido de close() (IN_CLOSE_WRITE ). Estos serían para archivos que se copiaron del servidor SFTP.

Las reglas de Incron se ven así:

<directory> <file change mask> <command or action>  options
/var/www/html IN_CREATE /root/scripts/backup.sh
/sales IN_DELETE /root/scripts/sync.sh
/var/named/chroot/var/master IN_CREATE,IN_ATTRIB,IN_MODIFY /sbin/rndc reload

Este artículo titulado:Linux incrond inotify:Supervise los directorios en busca de cambios y actúe muestra muchos más detalles necesarios, si desea probar esta opción.


Linux
  1. ¿Es posible que los virus de Windows cuando se descargan a través de Ubuntu afecten el sistema operativo de Windows?

  2. Exclusión de directorio al crear un archivo .tar.gz

  3. ¿Cómo analizo el archivo de volcado del núcleo de un programa con GDB cuando tiene parámetros de línea de comandos?

  4. wget:nombre del archivo descargado

  5. ¿Es posible usar / en un nombre de archivo?

¡El sistema operativo Apricity ha sido descontinuado!

Linux Mint 19 ha sido lanzado [y es increíble]

mkdir -p falla cuando existe un directorio

ubicación del archivo temporal cuando se usa tmpfile() en C

¿Cómo detectar si VT-X se ha encendido en el BIOS?

¿Cómo eliminar archivos .fuse_hidden*?