Rendez-vous sur Arrakis, Le site perso d'un hacker libriste curieux crêpophile étourdi
Le 11/09/2019 à 14:53 dans /Journal/2019/

Vidéosurveillance perso et vie-privée

Pour des raisons diverses, j'ai installé récemment une “vidéosurveillance” dans mon domicile. Il s'agit d'une bête webcam branchée en USB sur mon serveur, qui prend une photo toutes les minutes via une tâche cron.

Pour prendre une photo :

fswebcam -r 1280x960 –save webcam$(date).jpg

Et dans le crontab, ça donne ça :

*/1 * * * * /home/bibi/webcam.sh > /dev/null 2>&1

Si ensuite je veux consulter les photos prises, je n'ai qu'à les récupérer de mon serveur via ssh.

Cependant, si ce serveur est volé, se posent deux problèmes :

  1. Le voleur peut consulter ces images (bon, il a du courage, le disque est chiffré).
  2. Je n'ai plus accès aux photos, du tout.

Pour résoudre ce deuxième problème, j'ai décidé de m'envoyer les photos sur une adresse mail extérieure qui me sert d'espace de stockage. Il suffit de vider cette adresse mail régulièrement pour ne pas dépasser le quota.

Oui mais… L'administrateur de ce serveur mail peut voir ces images. Si les disques du serveur sont volés, ou jetés, quelqu'un peut consulter ces images aussi.

J'ai donc décidé d'écrire un script qui réalise les opérations suivantes :

  1. Capture d'une image.
  2. Optimisation de l'image avec GraphicsMagick pour qu'elle prenne moins de place.
  3. Copie de l'image dans le dossier de mon serveur http pour la consulter facilement de l'extérieur (accès protégé par fichier htpasswd)
  4. Compression de l'image avec gzip
  5. Chiffrement de l'archive avec gpg2 pour éviter qu'elle ne puisse être lue.
  6. Encodage de l'image en base64 pour pouvoir l'envoyer par mail avec uuencode

Ça donne le script suivant :

#!/bin/sh

NAME="webcam-$(date +%Y-%m-%d-%H-%M-%S)"
F="/tmp/${NAME}"
fswebcam -r 1280x960 --save "${F}.jpg"
gm convert "${F}.jpg" -verbose -strip -quality 75 -interlace line "${F}.jpg" 
mkdir -p /var/www/htdocs/site.tld/webcam/
cp "${F}.jpg" /var/www/htdocs/site.tld/webcam/webcam.jpg
gzip -9 -o "${F}.gz" "${F}.jpg"
gpg2 --batch --yes --passphrase="secretpassphrase" -o "${F}.gz.enc" -c "${F}.gz"
uuencode "${F}.gz.enc" "${NAME}.gz.enc" | mail -s "${NAME}" user@foo.tld
rm ${F}.*

Désormais, un admin importun ou un curieux qui fouine dans la déchetterie du fournisseur de mail devra :

Ce n'est pas parfait, mais ça me convient davantage qu'un service tiers dont j'ignore la pratique en terme de vie-privée.

Peut-être cela inspirera quelques personnes.