GNU/Linux >> Znalost Linux >  >> Linux

Je možné zjistit, kdy byl soubor stažen?

Máme server, kde další skript sFTP stahuje a stahuje soubory každý den.

Otázka: Je možné zjistit, že byl soubor stažen, a poté, abych jej po dokončení automaticky archivoval?

Pro upřesnění – Soubory hostujeme a někdo jiný přijde a stáhne si to.

Toto je skript, který používají:

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

Přijatá odpověď:

Umím si představit 3 cesty, které by vám mohly poskytnout řešení.

1. Vlastní subsystém sftp

Můžete zabalit sftp-server démona přes sshd_config a „přepište“ jej vlastním skriptem, který by pak mohl zachytit to, co sftp-server a poté jednat, když uvidíte, že byl soubor stažen. Přepsání výchozího sftp-server v sshd_config je snadné:

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

Nejtěžší by bylo zjistit, co dělat ve skriptu wrapper. V /usr/local/bin/sftp-server :

#!/bin/sh

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

2. Sledujte protokoly

Pokud zapnete ladění sftp-sever můžete jej přimět k zobrazení protokolů o tom, kdy jsou soubory otevírány/zavírány a čteny/zapisovány na/ze serveru SFTP. Můžete napsat démona/skript, který tyto protokoly sleduje a v případě potřeby pak soubor zálohuje. Další podrobnosti o tom, jak toho dosáhnout, jsou již částečně zahrnuty v mé odpovědi na tyto dlaždicové otázky a odpovědi týkající se U&L:Úroveň protokolování aktivity v SFTP a také zde v tomto příspěvku na blogu s názvem:Protokolování relace přenosu souborů SFTP.

Protokoly SFTP lze vylepšit, takže vypadají takto:

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]

Pak byste museli vyvinout démona/skript, který by monitoroval protokoly pro páry událostí otevřít/zavřít. Ty představují dokončený přenos souborů. Můžete také využít syslog, který by mohl monitorovat události protokolu „CLOSE“ a mohl by být použit ke kopírování přenesených souborů.

3. Incron

Můžete využít události Inotify, které linuxové jádro vytváří při každém přístupu k souboru. Existuje služba Incron, která funguje podobně jako Cron. Kde Cron funguje na základě času, Incron funguje na základě událostí souboru. Můžete tedy nastavit položku Incron, která by monitorovala vaše nahrávací adresáře SFTP, a kdykoli je detekována konkrétní událost souboru, soubor zkopírujte.

Související:Procházet soubor vmdk ve Windows?

Podívejte se na manuálovou stránku inotify pro popis různých událostí. Věřím, že byste se rádi podívali na read() (IN_ACCESS ) následovaný close() (IN_CLOSE_WRITE ). Ty by byly pro soubory, které byly zkopírovány ze serveru SFTP.

Pravidla incronu vypadají takto:

<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

Tento článek s názvem:Linux incrond inotify:Monitorování adresářů pro změny a akce ukazuje mnohem více potřebných podrobností, pokud chcete tuto možnost vyzkoušet.


Linux
  1. Je možné bezpečně použít `find -exec Sh -c`?

  2. Kdy byl soubor vytvořen?

  3. Kódování souboru ZIP?

  1. Když spustitelné soubory nejsou?

  2. Je možné, aby viry Windows při stahování přes Ubuntu ovlivnily operační systém Windows?

  3. Je možné použít / v názvu souboru?

  1. mkdir -p selže, když adresář existuje

  2. Když je smazán soubor vytvořený pomocí mkstemp()?

  3. Zjistěte, zda má procesor RDTSCP v době kompilace