GNU/Linux >> Linux Esercitazione >  >> Linux

È possibile rilevare quando un file è stato scaricato?

Abbiamo un server in cui un altro script sFTP e scarica file ogni giorno.

Domanda: È possibile rilevare che il file è stato scaricato e quindi archiviare automaticamente il file al termine?

Per chiarire:noi ospitiamo i file e qualcun altro viene e lo scarica.

Questo è lo script che usano:

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

Risposta accettata:

Ci sono 3 strade che posso concepire che potrebbero fornirti una soluzione.

1. Sottosistema sftp personalizzato

Potresti avvolgere il sftp-server demone tramite sshd_config e "sovrascrivilo" con il tuo script che potrebbe quindi intercettare ciò che sftp-server sta facendo, quindi agisci quando vedi che un file è stato scaricato. Sovrascrivere il sftp-server predefinito in sshd_config è facile:

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

Capire cosa fare nello script wrapper sarebbe la parte difficile.In /usr/local/bin/sftp-server :

#!/bin/sh

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

2. Guarda i registri

Se attivi il debug di sftp-sever puoi farlo mostrare i registri di quando i file vengono aperti/chiusi e letti/scritti nel/dal server SFTP. È possibile scrivere un demone/script che controlli questi registri e quindi esegue il backup del file quando necessario. Ulteriori dettagli su come raggiungere questo obiettivo sono già parzialmente trattati nella mia risposta a queste domande e risposte sugli U&L:livello di registrazione attività in SFTP e qui in questo post del blog intitolato:registrazione attività della sessione di trasferimento file SFTP.

I registri SFTP possono essere migliorati in modo che assomiglino a questo:

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]

Dovresti quindi sviluppare un demone/script che monitori i registri per le coppie di eventi di apertura/chiusura. Questi rappresentano un trasferimento di file completato. Potresti anche utilizzare syslog, che potrebbe monitorare gli eventi del registro "CLOSE" e potrebbe essere utilizzato per eseguire la copia dei file trasferiti.

3. Incrona

È possibile utilizzare gli eventi Inotify che il kernel Linux produce ogni volta che si accede a un file. C'è un servizio chiamato Incron che funziona in modo simile a Cron. Laddove Cron funziona in base al tempo, Incron funziona in base agli eventi dei file. Quindi puoi impostare una voce Incron che monitori le tue directory di caricamento SFTP e ogni volta che viene rilevato un evento di file specifico, copia il file.

Correlati:Sfoglia il file vmdk in Windows?

Dai un'occhiata alla pagina man di inotify per la descrizione dei vari eventi. Credo che vorresti guardare un read() (IN_ACCESS ) seguito da un close() (IN_CLOSE_WRITE ). Questi sarebbero per i file che sono stati copiati dal server SFTP.

Le regole di Incron si presentano così:

<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

Questo articolo intitolato:Linux incrond inotify:monitora le directory per le modifiche e agisci mostra molti più dettagli necessari, se vuoi provare a utilizzare questa opzione.


Linux
  1. Quando è stato creato il file?

  2. È possibile trovare quale Vim/tmux ha il file aperto?

  3. È possibile che i virus di Windows scaricati tramite Ubuntu influiscano sul sistema operativo di Windows?

  4. Esclusione della directory durante la creazione di un file .tar.gz

  5. Come analizzo il file core dump di un programma con GDB quando ha parametri da riga di comando?

Il sistema operativo Apricity è stato interrotto!

Linux Mint 19 è stato rilasciato [ed è fantastico]

Codifica di un file zip?

Quando i file eseguibili non lo sono?

È possibile utilizzare / in un nome file?

Come rilevare se VT-X è stato attivato nel BIOS?