# Dépôt de fichiers temporaire sécurisé 2021-01-01T21:07:51Z Au cours d'une discussion via IRC ou par mail, on a besoin de partager un fichier. Pour le texte, il y a les pastebin. Pour les photos ou les vidéos, il existe différents hébergeurs en ligne. Plutôt que de confier ces données, parfois personnelles, à un tiers, pourquoi ne pas héberger sur un serveur de confiance ces fichiers? Il suffit d'un serveur SSH. Ce dernier peut être à la maison, mais pour l'exemple, j'ai choisi d'utiliser une session chez tilde.town. En bref, ça ressemblerait à ça : ``` $ bitput Activite_1.pdf Connected to tilde. sftp> put Activite_1.pdf public_html/stuff/20acf0c6211609509262.pdf Uploading Activite_1.pdf to /home/prx/public_html/stuff/20acf0c6211609509262.pdf Activite_1.pdf 100% 1162KB 739.1KB/s 00:01 sftp> chmod 666 public_html/stuff/20acf0c6211609509262.pdf Changing mode on /home/prx/public_html/stuff/20acf0c6211609509262.pdf https://tilde.town/~prx/stuff/20acf0c6211609509262.pdf ``` => http://tilde.town/ ## Script d'upload Voici un script qui prend en argument un fichier pour l'envoyer sur le serveur avec sftp. Oui, sftp, pas scp, car c'est censé être plus fiable. La vraie raison est que certains serveurs peuvent proposer par souci de sécurité seulement un accès sftp dans un chroot, sans aucun accès à un shell nécessaire à scp. Voici quelques options qu'il faudra modifier selon votre cas, notamment la variable "sshcred" selon ce que vous avez configuré dans "~/.ssh/config" ``` sshcred="tilde" url="https://tilde.town/~prx/stuff" outdir="public_html/stuff" ``` Ensuite, on récupère l'extension du fichier: ``` # if file has extension case "${1}" in *.*) ext=".${1##*.}" ;; *) ext="" ;; esac ``` Et on crée un nom de fichier aléatoire en utilisant la date pour éviter la faible probabilité d'avoir 2 fichiers de même nom: ``` rdm="$(openssl rand 5 -hex)$(date +%s)" out="${rdm}${ext}" ``` Enfin, on uploade et on s'assure que le fichier est bien lisible par le serveur http: ``` ( printf "put %s %s\n" "${1}" "${outdir}/${out}" printf "chmod 666 %s\n" "${outdir}/${out}" ) | sftp "${sshcred}" ``` On termine par afficher l'url à partager: ``` printf "%s\n" "${url}/${out}" ``` ## ~/.ssh/config Pour pouvoir se connecter juste en écrivant "ssh tilde": ``` Host tilde HostName tilde.town User prx Port 22 IdentityFile ~/.ssh/sshkey PasswordAuthentication no PubkeyAuthentication yes ``` ## Nettoyage Pour éviter de garder les fichiers les plus anciens, on peut créer une tâche cron sur le serveur avec "crontab -e". J'ai personnellement décidé de supprimer les fichiers plus vieux que 2 jours. ``` @daily find /home/prx/public_html/stuff/ -type f -mtime +2 -delete ``` ## Une réaction? => mailto:bla@bla.si3t.ch?subject=depot-de-fichier-temporaire-securise 📧 Envoyez votre commentaire par mail. => mailto:bla+subscribe@bla.si3t.ch 📫 Abonnez-vous pour recevoir les réponses => /log/commentaires/ 📚 Consultez les archives. => mailto:bla+unsubscribe@bla.si3t.ch 💨 Vous désinscrire