Es gibt drei Möglichkeiten, die ich mir vorstellen kann, um Ihnen eine Lösung zu bieten.
1. Benutzerdefiniertes SFTP-Subsystem
Sie können den sftp-server
Daemon über verpacken sshd_config
und ihn mit Ihrem eigenen Skript "überschreiben", das dann abfangen kann, was sftp-server
gerade passiert, und dann handeln, wenn Sie sehen, dass eine Datei heruntergeladen wurde. Das Überschreiben der Standardeinstellung sftp-server
in sshd_config
ist einfach:
Subsystem sftp /usr/local/bin/sftp-server
Herauszufinden, was im Wrapper-Skript zu tun ist, wäre der schwierige Teil /usr/local/bin/sftp-server
.
#!/bin/sh
# ...do something...
chroot /my/secret/stuff /usr/libexec/openssh/sftp-server
# ...do something...
2. Beobachten Sie die Protokolle
Wenn Sie das Debuggen von sftp-sever
aufdrehen, können Sie Protokolle darüber anzeigen, wann Dateien geöffnet / geschlossen und auf dem SFTP-Server gelesen / geschrieben werden. Sie können einen Daemon / ein Skript schreiben, das diese Protokolle überwacht und die Datei bei Bedarf sichert. Weitere Details dazu finden Sie bereits teilweise in meiner Antwort auf diese U & L-Fragen und Antworten: Aktivitätsprotokollierungsstufe in SFTP sowie hier in diesem Blog-Beitrag mit dem Titel: Aktivitätsprotokollierung für SFTP-Dateiübertragungssitzungen .
Die SFTP-Protokolle können so erweitert werden, dass sie folgendermaßen aussehen:
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]
Sie müssten dann einen Dämon / ein Skript entwickeln, der die Protokolle auf die Ereignispaare zum Öffnen / Schließen überwacht. Diese stellen eine abgeschlossene Dateiübertragung dar. Sie können auch Syslog verwenden, das die Protokollereignisse "CLOSE" überwacht und zum Kopieren der übertragenen Dateien verwendet werden kann.
3. Incron
Sie können Inotify- Ereignisse verwenden, die der Linux-Kernel bei jedem Zugriff auf eine Datei erzeugt. Es gibt einen Dienst namens Incron, der ähnlich wie Cron funktioniert. Wo Cron basierend auf der Zeit arbeitet, arbeitet Incron basierend auf Dateiereignissen. Sie können also einen Incron-Eintrag einrichten, der Ihre SFTP-Upload-Verzeichnisse überwacht. Wenn ein bestimmtes Dateiereignis erkannt wird, kopieren Sie die Datei.
In der Manpage inotify finden Sie eine Beschreibung der verschiedenen Ereignisse. Ich glaube, Sie möchten nach einem read()
( IN_ACCESS
) gefolgt von einem close()
( IN_CLOSE_WRITE
) Ausschau halten . Diese gelten für Dateien, die vom SFTP-Server kopiert wurden.
Incron-Regeln sehen folgendermaßen aus:
<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
Dieser Artikel mit dem Titel: Linux incrond inotify: Verzeichnisse auf Änderungen überwachen und Maßnahmen ergreifen zeigt viel mehr Details, die erforderlich sind, wenn Sie versuchen möchten, diese Option zu verwenden.