GNU/Linux >> Tutoriels Linux >  >> Linux

Est-il possible de détecter quand un fichier a été téléchargé ?

Nous avons un serveur sur lequel un autre script sFTP et télécharge des fichiers tous les jours.

Question : Est-il possible de détecter que le fichier a été téléchargé, puis d'archiver automatiquement le fichier une fois terminé ?

Pour clarifier - Nous hébergeons les fichiers et quelqu'un d'autre vient le télécharger.

Voici le script qu'ils utilisent :

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

Réponse acceptée :

Il y a 3 pistes que je peux concevoir qui pourraient vous fournir une solution.

1. Sous-système sftp personnalisé

Vous pouvez envelopper le sftp-server démon via sshd_config et "remplacez-le" avec votre propre script qui pourrait alors intercepter ce sftp-server est en train de faire, puis agissez lorsque vous voyez qu'un fichier a été téléchargé. Remplacer le sftp-server par défaut dans sshd_config est facile :

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

Comprendre ce qu'il faut faire dans le script wrapper serait la partie la plus difficile. Dans /usr/local/bin/sftp-server :

#!/bin/sh

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

2. Regardez les journaux

Si vous activez le débogage de sftp-sever vous pouvez l'obtenir pour afficher les journaux lorsque les fichiers sont ouverts/fermés et lus/écrits vers/depuis le serveur SFTP. Vous pouvez écrire un démon/script qui surveille ces journaux, puis sauvegarde le fichier si nécessaire. De plus amples détails sur la façon d'y parvenir sont déjà partiellement couverts dans ma réponse à cette question-réponse U&L intitulée :Niveau de journalisation des activités dans SFTP ainsi qu'ici dans ce billet de blog intitulé :Journalisation des activités de la session de transfert de fichiers SFTP.

Les journaux SFTP peuvent être améliorés afin qu'ils ressemblent à ceci :

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]

Vous auriez alors besoin de développer un démon/script qui surveillerait les journaux pour les paires d'événements d'ouverture/fermeture. Ceux-ci représentent un transfert de fichier terminé. Vous pouvez également utiliser syslog, qui peut surveiller les événements de journal "CLOSE" et il peut être utilisé pour effectuer la copie des fichiers transférés.

3. Incron

Vous pouvez utiliser les événements Inotify que le noyau Linux produit chaque fois qu'un fichier est accédé. Il existe un service appelé Incron qui fonctionne de manière similaire à Cron. Là où Cron fonctionne en fonction du temps, Incron fonctionne en fonction des événements de fichiers. Ainsi, vous pouvez configurer une entrée Incron qui surveillera vos répertoires de téléchargement SFTP, et chaque fois qu'un événement de fichier spécifique est détecté, copiez le fichier.

Connexe :Parcourir le fichier vmdk dans Windows ?

Consultez la page de manuel inotify pour une description des différents événements. Je crois que vous voudriez surveiller un read() (IN_ACCESS ) suivi d'un close() (IN_CLOSE_WRITE ). Ceux-ci seraient pour les fichiers qui ont été copiés à partir du serveur SFTP.

Les règles Incron ressemblent à ceci :

<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

Cet article intitulé :Linux incrond inotify :Surveiller les répertoires pour les modifications et prendre des mesures montre beaucoup plus de détails nécessaires, si vous voulez essayer cette option.


Linux
  1. Est-il possible d'utiliser `find -exec Sh -c` en toute sécurité ?

  2. Est-il possible de trouver quel Vim/tmux a ouvert le fichier ?

  3. Comment analyser le fichier core dump d'un programme avec GDB lorsqu'il a des paramètres de ligne de commande ?

  4. wget :nom du fichier téléchargé

  5. Est-il possible d'utiliser / dans un nom de fichier ?

Apricity OS a été abandonné !

Linux Mint 19 est sorti [et c'est génial]

Encodage d'un fichier Zip ?

Lorsque les fichiers exécutables ne le sont pas ?

Est-il possible que les virus Windows téléchargés via Ubuntu affectent le système d'exploitation Windows ?

Exclure le répertoire lors de la création d'un fichier .tar.gz