Script – afficher les donnees Exif sur Thunar

Afficher les métadonnées EXIF avec un clic droit sur Thunar

Ha, il y a longtemps que je n’ai pas écrit sur le sujet !

Sur les PC sous un environnement Gnome avec le gestionnaire de fichiers Nautilus j’applique la méthode décrite dans mon l’article « Afficher les métadonnées exif avec un clic droit sur Nautilus » écrit en 2015 (il y a une légère modification sur le script d’aujourd’hui, mais les deux fonctionnent).

Il se trouve que le PC que j’utilise le plus souvent ces derniers temps est sous Manjaro avec un environnement XFCE et donc Thunar comme gestionnaire de fichiers.

Pour infos

Il existe de nombreuses similitudes avec l’article mentionné plus haut. La principale différence réside dans l’emplacement du script ainsi qu’une procédure spécifique à effectuer sous Thunar, qui ne s’applique pas à Nautilus.
Il est possible de remplacer Zenity par Yad, et Exiv2 par Exiftool, mais je pense que Yad nécessite certainement des critères supplémentaires (je n’ai pas cherché). Bref, il existe plusieurs façons de faire, mais comme je suis de nature plutôt fainéante, je préfère me baser sur des solutions déjà en place et qui fonctionnent chez moi depuis 2015.

Mais voyons la procédure

Tu auras besoin de Zenity et de Exiv2 (Chez-moi, Exiv2 était déjà installé). Pour installer les deux :
Manjaro :

sudo pacman -S exiv2 zenity

Débian et dérivés

sudo apt install exiv2 zenity

Sous XFCE il n’y a pas de ./local/thunar, on va donc créer un répertoire sous .local, je l’ai appelé bin, vous pouvez le nommer scripts ou autres, mais il faudra en tenir compte pour les chemins.

Créer un répertoire bin

mkdir -p ~/.local/bin

On va écrire le script, j’utilise vim, mais vous pouvez utiliser nano ou autre éditeur.

vim ~/.local/bin/exif.sh

et on y écrit :

#!/bin/bash

# métadonnées exif avec exiv2

zenity --info --title="Métadonnées EXIF" --text="$(exiv2 "$1")"

Un peu de pédagogie

#!/bin/bash est un préfixe au nom de l’exécutable qui va effectivement traiter les lignes qui le suivent. On l’appelle « shebang » et doit être la première ligne du script. (il s’agit d’un copié/collé de mon article « Initiation au Shell – Boucle (for, do, done » écrit en 2015).

zenity --info --title="Métadonnées EXIF" --text="$(exiv2 "$1")"

zenity affiche une boite de dialogue d’info (–info), titre optionnel (–title) et enfin avec (–text) le contenu de la sortie de la commande exiv2, les métadonnées exif de $1, le premier argument passé au script, c’est-à-dire le chemin du fichier image.

Il faut rendre exécutable le script

chmod +x ~/.local/bin/exif.sh

– Pas certain que ma pédagogie fasse mouche
– Ouah ah ah… Et c’est toi Sima qui donne des cours d’initiation au Bash à Root66.Net ? Hé ben, ils sont pas aidés.
– Ho ça va, ta gueu… Tais-toi ! Bon, je continue.

Voyons maintenant comment configurer Thunar

On ouvre le gestionnaire de fichier Thunar puis on va dans :
Édition → Configurer les actions personnalisées…

Une boite de dialogue s’ouvre → clique sur le +

Une autre boite de dialogue s’ouvre sur l’onglet « Base »
On met le nom de son choix.
On peut mettre une description.
Dans commande on met le chemin absolu (en entier) vers l’exécutable avec le paramètre %f

Ensuite on va dans l’onglet « Conditions d’apparition » et on coche la case « Fichiers image »

Puis on valide
On voit que l’action « EXIF » a été ajouté. Tu peux fermer.

Sur Thunar vas sur une image et fais un clic droit, puis descend sur « EXIF »

Clic sur « EXIF » et une fenêtre s’ouvre avec les métadonnées Exif.


Si ça ne fonctionne pas, ferme et relance Thunar pour être certain que les modifications ont bien été prises en compte par Thunar.

Des idées pour améliorer ce petit script ou une autre approche à proposer ? Lâche-toi en commentaires.

Le billet « Script – afficher les données Exif sur Thunar » est apparu en premier sur le blog de Sima78.

Citation automatique sur signature de mail – Evolution

Tuto : Citation automatique sur signature de mail – Evolution

J’utilise Evolution comme outil de messagerie, agenda, contact, tâches…
Donc ce tutoriel concerne Gnome-Evolution, mais vous pouvez vous en inspirer et l’adapté car le script, très simple (la commande fait une ligne), n’est pas lié à Evolution.

D’où me vient cette idée ?

Lorsque j’écris ou réponds sur la liste de Root66, je terminais toujours pas une petite citation « geek ». J’ai un fichier texte avec toute une liste de citations, si quelques rares sont de mon cru, la grande majorité piochée ici et là sur le web.

Puis un membre de l’association m’a posé la question : Tu as un script pour tes citations aléatoires en signature ?
Heuuu non, je fais un copié/collé depuis mon fichier texte…

Mais pourquoi n’y ai-je pas pensé avant ?

Et c’est donc parti ainsi ! Résultat à obtenir.
Résultat à obtenir avec une citation aléatoire, exemple :

--Sima78... Dicton du moment : Faites des ghosts pas la guerre !
https://sima78.chispa.fr

Le script

J’ai fait le choix de garder un fichier.txt qui contient toutes les citations où le script ira chercher une citation de façon aléatoire.
J’aurai pu faire un script contenant les citations, cela aurait donné autre chose comme script, mais surtout je trouve plus pratique d’avoir un fichier à part, plus facile à enrichir.
Pour la simplicité, j’ai hésité en deux possibilités, j’ai choisi la première, mais je vous soumets également la deuxième, si cela peut intéresser.

#!/bin/bash
echo "Sima78... Dicton du moment : "$(shuf -n 1 /chemin/vers/le/fichier.txt)
echo "https://sima78.chispa.fr"

ou l’autre possibilité si vous préférez :

#!/bin/bash
echo "Sima78... Dicton du moment : "$(sort -R /chemin/vers/le/fichier.txt | head -n1)
echo "https://sima78.chispa.fr"

Waouh…. Sima, quel balèze… tout ce baratin pour un script de 3 lignes…

Moi : Ouais bon, j’assume… mais si ça peut servir à ceux qui se lancent sous linux et utilisent Gnome-Evolution…

Gnome Evolution

Dans Gnome Evolution vous allez dans :
édition → Préférences

Ensuite vous allez dans « Préférences de l’éditeur » puis dans l’onglet « Signatures » et enfin « Ajouter un script ».
Bon là, on voit que j’ai déjà rentré un script, une signature, mais normalement c’est vide… Et une fois le script rentré, il suffit de cliquer dessus pour voir le résultat sur la fenêtre du dessous.
Donc ajouter un script :

Vous choisissez un nom, vous allez chercher votre script puis « Enregistrer »

Ensuite, toujours dans « Préférences » vous allez sur « Comptes de messagerie ».

Là vous sélectionnez le compte qui doit bénéficier de cette signature et cliquez à droite dans « Édition »

Vous allez dans le menu déroulant de « Signature », vous sélectionnez, puis cliquez sur « Valider », et c’est terminer.

Pour d’autres messageries il existe des solutions similaires, je ne les connais pas puisque j’utilise essentiellement Gnome Evolution sauf sur l’un des pc où j’utilise Thunderbird, mais de façon basique puisque très exceptionnellement pour la messagerie.

Script shell : retrouvez un nom de fichier (odt ou ods) depuis un mot clé

Script shell : retrouvez un nom de fichier (odt ou ods) depuis un mot clé.

Vous recherchez un fichier dont vous ne vous souvenez pas du nom mais vous savez qu’il contient certains mots, retrouver ce fichier avec l’un des mots « clés ».

On peut aussi rechercher dans les fichiers « doc » ou « xls », mais une raison que je ne m’explique pas les résultats sont moins convaincants.

Lors de mes tests sur les fichiers « doc », il m’affichait des résultats de fichiers contenant le mot clé mais en excluait d’autres qui contenait ce même mot clé !? Peut-être que cela est dû au fait qu’ils n’ont pas été enregistrés avec les mêmes versions Word ? Bref, je n’ai pas de réponse pour ces extensions propriétaires.

Voici donc le script, rien de révolutionnaire, je n’invente rien, que des trucs que j’essaie d’adapter :

#!/bin/bash
# Recherche une chaîne de caractères dans tous les fichiers odt ou ods
# de façon récursive depuis le lieu de recherche.

# Syntaxe :
# nomduscript.sh "chaîne à rechercher" (sans guillemets).
# Répondre à la première question par odt ou ods
# Fonctionne partiellement avec doc ou xls ????
# Pour limiter la rechercher mettre le chemin absolu...

# exemple : "/home/user/Documents" (sans les guillemets).
# Pour une recherche depuis l'endroit où se trouve le script
# il suffit de taper un point "." (sans les guillemets).

echo "Dans quelle type de fichier penses-tu chercher ?"
echo -n "Saisir le type de fichier (odt ou ods) : "
read exten
echo -n "Saisir le chemin de départ : "
read chemin
find $chemin -type f -name "*.$exten" | while read i
do
[ "$1" ] || { echo "Bah ! Tu as oublié de mettre le mot recherché..." ; exit 1 ; }
unzip -ca "$i" 2>/dev/null | grep -iq "$*"
        if [ $? -eq 0 ]
        then
                echo "j'ai trouvé ton mot dans $i" | nl
        fi
done
echo "J'ai terminé mon travail !"

Une fois que vous avez sauvegardé ce script sous le nom de votre choix. Pour l’exemple nous allons le nommer search_mot.sh

Donc une fois votre fichier search_mot.sh créer il faut le rendre exécutable :

chmod +x search_mot.sh

Comment l’utiliser ? Il suffit de lancer le script avec le mot clé recherché (en fait, le mot clé est une chaîne de caractères). Exemple « script mot-clé » :

./search_mot.sh taxodiaceae

Le script va demander l’extension de fichier (odt ou ods) sachant que vous pouvez mettre doc ou xls mais avec un résultat moins probant… et je n’ai pas d’explication… Mais testez…

Puis il sera demandé le chemin de départ. Il s’agit du chemin absolu.

Donc soit la racine « / », soit votre home « /home/user/ »… Ou un autre chemin pou serrer au plus prêt la recherche. Mais il doit être absolu et partir de la racine /

Bon assez parlé et mon exemple avec les résultats en lançant le script plus le mot clé (ici taxodiaceae) :

./search_mot.sh taxodiaceae
Dans quelle type de fichier penses-tu chercher ?
Saisir le type de fichier (odt ou ods) : odt
Saisir le chemin de départ : /home/sima78/
1 j'ai trouvé ton mot dans /home/sima78/Documents/Bota/fiche/chryptomeria.odt
1 j'ai trouvé ton mot dans /home/sima78/Documents/Bota/cle_identif/chryptomeria_japonica .odt
1 j'ai trouvé ton mot dans /home/sima78/Documents/Bota/noms-familles/taxodiaceae.odt
1 j'ai trouvé ton mot dans /home/sima78/Documents/Bota/in-situ/chryptomeria_japonica.odt
1 j'ai trouvé ton mot dans /home/sima78/Documents/Bota/coniferes.odt
1 j'ai trouvé ton mot dans /home/sima78/Documents/Pedago/parcours/anim-0018.odt
J'ai terminé mon travail !

Voilà, bien entendu, vous pouvez perfectionner le script, le simplifier, je suis preneur…

Script pour supprimer les doublons dans un fichier

Il s’agit d’un petit script, qui m’est bien utile, que j’avais pompé je ne sais où et que j’avais légèrement modifié à ma sauce.

Je vous le mets plus bas, à vous de le remodifier, améliorer à votre sauce.

echo -n "Entrez le chemin du fichier (ex. /home/user/.bash_history) : "
read fichier
doublons="$(cat $fichier | sort | uniq -d)"
if [ "$doublons" != "" ]; then
for line in $(seq 1 $(echo "$doublons" | wc -l)); do
texteAsuppr=$(echo "$doublons" | sed $line!d)
lignesAsuppr=$(grep -n "$texteAsuppr" $fichier | sed -e 1d -e 's/\([0-9]*\):.*/-e \1d/')
sed $lignesAsuppr -i $fichier
done
fi 
echo "TERMINÉ !"echo

N’oubliez pas de faire un petit « chmod +x » sur le fichier pour le rendre éxecutable.

Sauvegardes au quotidien – Rdiff-Backup et MySqlDump

Rdiff-Backup et sauvegardes

J’avais déjà écrit un billet intitulé « Scripts de sauvegardes journalières et hebdomadaires » et un commentaire de Tetsumaki m’a donner à réfléchir.

Pourquoi je fais compliqué quand ont peut faire simple?

Soit, j’aime les scripts, et du coup il m’arrive de m’emballer et il fallait un disque de sauvegarde assez « gros »… Et j’ai décidé de regarder du côté de Rdiff-Backup. J’ai été séduit !

Je fais donc un nouveau billet sur le sujet de la sauvegarde sans pour autant supprimer l’autre…

Rdiff-Backup existe aussi pour Windows, je suppose qu’il doit exister une interface graphique , j’avoue ne pas avoir cherché puisque je m’en sert pour la sauvegarde d’un serveur, qui n’a pas d’interface graphique et de façon automatisée.

Bien entendu, une sauvegarde ne se fait pas sur une partition du disque dur, pas même sur un autre disque dur sur le même pc, mais sur un disque externe ou un pc distant…

Une modification à été apporté le 07/12/2023 concernant le message d’érreur :

/bin/sh: 1: root: not found

Lire la suite…

Sauvegarde avec Rdiff-Backup et MysqlDump.

Dans un premier temps j’ai défini les répertoires que je souhaitais sauvegarder, puis j’ai créé un fichier texte pour les regrouper.
Dans cet exemple, je décide de sauvegarder « /etc », « /home », « /var »

# nano /root/scripts/include-dir.txt

Copiez ce qu’il y a ci-dessous:

/etc
/home
/var

Maintenant nous allons créer le script dans la « cron.daily »

# nano /etc/cron.daily/backup

Copiez en adaptant ce qui suit.

#!/bin/bash
rdiff-backup --include-globbing-filelist /root/scripts/include-dir.txt --exclude '**' / /dir/de/sauvegarde/backup/

/dir/de/sauvegarde/backup/ est la destination de la sauvegarde, je vous laisse l’adapter selon vos choix.

Le rendre exécutable:

chmod +x /etc/cron.daily/backup

Je souhaite également sauvegarder des bases de données, on peut aussi le faire via Rdiff-backup, personnellement le préfère utiliser « mysqldump » (et oui, je suis un animal d’habitudes) :

# nano /etc/cron.daily/mysql-backup

Copiez en adaptant ce qui suit.

#!/bin/bash
mysqldump -u nextcloud -motdepasse nextcloud > /dir/de/sauvegarde/bd/nextcloud.sql
mysqldump -u dolibarr -motdepasse dolibarr > /dir/de/sauvegarde/bd/dolibarr.sql
mysqldump -u grr -motdepasse grr > /dir/de/sauvegarde/bd/grr.sql

Le rendre exécutable:

chmod +x /etc/cron.daily/mysql-backup

Pour que cela se fasse automatiquement et chaque jour, mettez le tout dans votre crontab:

# crontab -e

Copiez en adaptant ce qui suit.

PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/sh
MAILTO=""
# m h  dom mon dow   command
0 10 * * * root sh /etc/cron.daily/backup >/var/log/monbackup 2>&1 # JOB_BACKUP
0 15 * * * root sh /etc/cron.daily/mysql-backup >/var/log/monsav-bd 2>&1 # JOB_MYSQL-BACKUP

<Ajout du 07/12/2023>

J’ai le message d’erreur suivant : /bin/sh: 1: root: not found

Il arrive que root n’a pas de Shell et que l’user principal peut utiliser « sudo » sans confirmation de mot de passe, le cas par exemple de Raspberry, d’où un mot de passe fort pour cette user.

# nano /etc/cron.daily/backup

Copiez en adaptant ce qui suit.

#!/bin/bash
sudo rdiff-backup --include-globbing-filelist /root/scripts/include-dir.txt --exclude '**' / /dir/de/sauvegarde/backup/
# crontab -e

Copiez en adaptant ce qui suit.

PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/sh
MAILTO=""
# m h  dom mon dow   command
0 10 * * * /etc/cron.daily/backup >/var/log/monbackup 2>&1 # JOB_BACKUP
0 15 * * * /etc/cron.daily/mysql-backup >/var/log/monsav-bd 2>&1 # JOB_MYSQL-BACKUP

</Ajout du 07/12/2023>

Ceci-dit, il faut vérifier les sauvegardes, moi je simule une restauration dans un dossier de test, ici « test-sauv »

rdiff-backup --force -r now /dir/de/sauvegarde/backup/ /home/sima78/backup/rdiff-backup-data/test-sauv/

On peut voir les statistiques de la dernière sauvegarde

rdiff-backup-statistics /dir/de/sauvegarde/backup/

Ou la liste des incréments d’une sauvegarde

rdiff-backup -l /dir/de/sauvegarde/backup/

Vous pouvez aussi spécifier une durée de rétention des sauvegardes, dans le cas ci-dessous je supprime au-delà de 10 jours

rdiff-backup --remove-older-than 10D --force /dir/de/sauvegarde/backup/

Vous pouvez mettre D pour(Day), W pour(Week), M pour (Month) et Y pour (Year).
Donc voilà ma base, maintenant vous pouvez affiner comme par exemple avec mysqldump par lequel il est possible d’exporter plusieurs bases de données en une seule commande:

mysqldump --databases database1 database2 [...] > /home/sima78/my_databases.sql

Bref plein de possibilités il suffit de faire un « man » pour s’en rendre compte

man rdiff-backup
man mysqldump

Scripts de sauvegardes journalières et hebdomadaires

Bin-Bash, scripts, ligne de commande

J’avais pris cela sur un site, je ne sais plus où et ça a bien fonctionné un certain temps puis plus rien lorsque j’ai passé un des serveurs qui était sous Ubuntu serveur 12.04 sous Debian 8.7

J’ai donc repris en grande partie, même si les bases restent les mêmes. Voici donc la version fonctionnelle.

Sur Debian 8.7

Automatiser les sauvegardes.

Dans cet exemple, il s’agit de sauvegarder chaque jour de la semaine (samedi, dimanche, lundi, mardi, etc.), puis le vendredi soir, on sauvegarde sur le n° de la semaine. Puis on repart sur samedi, dimanche, etc.

Avant tout vous devez définir le « lieux » de sauvegarde, s’agit-il d’un disque dur supplémentaire, d’un disque externe, d’un lieu distant (par ssh ou autres)… Bref vous devrez adapter les scripts à vos choix et besoin.

Il s’agit là d’une idée sur le principe, à chacun de se l’approprier.

Ici je vais partir du principe que j’ai un disque dur chiffré supplémentaire monté sur /mnt/
Il est nommé « save » et le répertoire de sauvegarde est « s_server »

ce qui donne le chemin de sauvegarde « /mnt/save/s_server »

Avant tout, vous devez savoir en quelle langue sont vos jours de la semaine (anglais, français, etc.).

date +%A
vendredi

Le résultat est Français.
Connectez-vous en administrateur.

su root

Créer le script qui créera les répertoires des n° de semaine et les jours de la semaine.

#!/bin/bash
for x in lundi mardi mercredi jeudi vendredi samedi dimanche {01..52}
do
mkdir $x
done

Pourquoi {01..52} et non {1..52}? il suffit de lire le man date

man date
(...)
%V     ISO week number, with Monday as first day of week (01..53)
(...)

On voit donc qu’il faut numéroté de 01 à 52, car la 53ème semaine, lorsqu’elle existe est à cheval entre deux années et c’est donc pas dramatique de rater une semaine.

Rendre le script exécutable et on le place (dans notre exemple plus haut) dans « /mnt/save/s_server/ », puis on l’exécute…

./faire_mkdir.sh

Un petit « ls » pour vérifier que tout est ok.

Nous allons créer un fichier des dossiers à exclure. Si votre sauvegarde est locale, il faudra exclure le dossier de sauvegarde 😉 dans notre cas « /mnt/save/s_server/ » vous pouvez exclure tout ce qui ne vous semble pas judicieux, à vous de voir.

cd /etc/
nano rsync.exclude

On y met tout ce que l’on souhaite exclure.
Ci-dessous « /mnt/ » obligatoire dans l’exemple puisque la sauvegarde ce fait sur « /mnt/save/s_server/ », le reste en fonction de vos besoins.
Faites un copié/collé de ce qu’il y a ci-dessous.

# Mettez ici tous les dossiers que vous souhaitez exclure
# - /boot/
- /media/
- /lost+found/
- /mnt/
- /proc/
- /opt/
- /run/
- /srv/
- /tmp/
- /sys/

Créer les deux scripts ci dessous:

nano /etc/cron.daily/jour.sh

Copié/collé de ce qu’il y a ci-dessous

#!/bin/bash
# On va l'appeler "jour.sh"
# Sauvegarde quotidienne
jour=$(date +%A)
source="/"
destination="/mnt/save/s_server"
rsync -aurov -progress --delete --stats --exclude-from=/etc/rsync.exclude $source $destination/$jour

Ce qui donne le chemin /etc/cron.daily/jour.sh et rendez-le exécutable.

chmod +x /etc/cron.daily/jour.sh

Puis:

nano /etc/cron.weekly/semaine.sh

Copié/collé de ce qu’il y a ci-dessous

#!/bin/bash
# On va l'appeler "semaine.sh"
#  Sauvegarde hebdomadaire
semaine=$(date +%V)
source="/"
destination="/mnt/save/s_server"
rsync -aurov -progress --delete --stats --exclude-from=/etc/rsync.exclude $source $destination/$semaine

Ce qui donne le chemin /etc/cron.weekly/semaine.sh et rendez-le exécutable.

Chmod +x /etc/cron.weekly/semaine.sh

Maintenant il suffit juste de créer la crontab

crontab -e

Choisissez votre interprétateur texte « nano » ou « vi » et copiez les lignes ci-dessous:

PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/sh
MAILTO=""
# m h  dom mon dow   command
0 23 * * * /etc/cron.daily/jour.sh >/dev/null 2>&1 # JOB_1
30 23 * * 5 /etc/cron.weekly/semaine.sh >/dev/null 2>&1 # JOB_2

Pour Ubuntu ce devrait ressembler à cela:

PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/sh
MAILTO=""
# m h  dom mon dow   command
0 23 * * * sudo /etc/cron.daily/jour.sh >/dev/null 2>&1 # JOB_1
30 23 * * 5 sudo /etc/cron.weekly/semaine.sh >/dev/null 2>&1 # JOB_2

Ensuite vérifier le lendemain si la sauvegarde à bien fonctionné et revérifiez en fin de semaine.

Afficher les metadonnees exif avec un clic droit sur Nautilus

Petit script utilisant exiv2 et simple à mettre en oeuvre.

Logo de Nautilus
Logo de Nautilus

1- Ouvrez un éditeur de texte, copiez les lignes ci-dessous et sauvegardez sous par exemple « exif.sh »

#! /bin/bash
# métadonnées exif avec exiv2
zenity --info --text " `exiv2 "$1" `"

2 – rendez-le exécutable : clic droit => Propriétés dans l’onglet « Permitions »
Cochez la case « Autoriser l’exécution du fichier comme un programme

3 – Ubuntu 14.04, placez le fichier dans ~.local/share/nautilus/scripts/

En ligne de commande, pas plus compliqué…
1 – avec par exemple « nano »

~$ nano .local/share/nautilus/scripts/exif.sh

on copie, on sauvegarde et on quitte.

#! /bin/bash
# métadonnées exif avec exiv2
zenity --info --text " `exiv2 "$1" `"

2 – on rend exécutable et on relance nautilus;

~$ chmod +x .local/share/nautilus/scripts/exif.sh | nautilus -q

Résultat dans les deux cas:
1 – clic droit sur l’image

Screenshot d'un clique droit sur Nautilus.
Screenshot d’un clique droit sur Nautilus.

2 – Résultat

screeshot du résultat d'un clic droit sur Nautilus
screeshot du résultat d’un clic droit sur Nautilus

Fail2ban – Bloquer les requetes phpmyAdmin w00tw00t et dos avec mod_evasive

Fail2ban ou comment bloquer les requêtes phpmyAdmin w00tw00t et dos avec mod_evasive

Élément essentiel pour sécuriser son serveur, Fail2ban permet d’éviter des intrusions via force-brute. Il se charge d’analyser les logs des services installés et bannit automatiquement et pour une durée déterminée un hôte via iptables en cas d’échecs de connexion après X tentatives.

Installer Fail2ban:

sudo apt-get install fail2ban

Par défaut, Fail2ban propose déjà plusieurs filtres pré-configurés. On retrouve les filtres dans « /etc/fail2ban/filter.d/ ».
Le fichier de configuration où l’on peut spécifier pour chaque filtre le nombre d’essai avant le bannissement et le temps de bannissement, est: /etc/fail2ban/jail.conf

En plus des filtres existants, on peut ajouter des filtres pour se protéger des requêtes excessives sur phpmyadmin ainsi que bloquer les attaques w00tw00t (fruit d’un logiciel de scanning « DFind » utilisé par des kiddies) et DOS et autres, ici, nous verrons les 3 que je viens de citer.

1 – Fail2ban contre les attaques sur phpmyadmin
Créez un nouveau filtre dans « /etc/fail2ban/filter.d »

sudo nano /etc/fail2ban/filter.d/apache-phpmyadmin.conf

et copiez:

[Definition]
docroot = /var/www
badadmin = PMA|phpmyadmin|myadmin|mysql|mysqladmin|sqladmin|mypma|admin|xampp|mysqldb|mydb|db|pmadb|phpmyadmin1|phpmyadmin2|administrator|d$
failregex = [[]client <HOST>[]] File does not exist: %(docroot)s/(?:%(badadmin)s)
ignoreregex =

Et enregistrez.
Dans le fichier /etc/fail2ban/jail.conf ajoutez à la fin:

[apache-phpmyadmin]
enabled = true
port = http,https
filter = apache-phpmyadmin
logpath = /var/log/apache*/*error.log
maxretry = 3

2 – Fail2ban et protection contre les requêtes w00tw00t

sudo nano /etc/fail2ban/filter.d/apache-w00tw00t.conf

Copiez:

[Definition]
failregex = ^<HOST> -.*"GET \/w00tw00t\.at\.ISC\.SANS\.DFind\:\).*".*
ignoreregex =

Dans /etc/fail2ban/jail.conf copiez:

[apache-w00tw00t]
enabled = true
port = 80,443
action = %(action_mwl)s
filter = apache-w00tw00t
logpath = /var/log/apache*/*error.log
maxretry = 1

3 – Fail2ban contre les DOS avec mod_evasive (source Linux magazine, hors-série N°66)
Installation mod_evasive


sudo apt-get install libapache2-mod-evasive

Créer un répertoire pour stocker les informations liées aux attaques et préciser les propriétés du répertoire.

sudo mkdir /var/log/apache2/mod_evasive
sudo chown www-data.www-data /var/log/apache2/mod_evasive

Configurer apache

sudo nano /etc/apache2/conf.d/evasive

et collez:

DOSHashTableSize 3097
# pas plus de 5 pages toutes les 2 secondes
DOSPageCount 5
DOSPageInterval 2
# Pas plus de 100 requête par seconde (image, CSS…)
DOSSiteCount 100
DOSSiteInterval 1
# Bloquer le client pendant 10 secondes
DOSBlockingPeriod 10
# Dossier contenantles IP blacklistées
DOSLogDir "/var/log/apache2/mod_evasive"

Puis recharger la configuration

sudo service apache2 reload

Créez le filtre

sudo nano /etc/fail2ban/filter.d/apache-modevasive.conf

copiez:

[Definition]
failregex = ^\[[^\]]*\]\s+\[error\]\s+\[client <HOST>\] client denied by server configuration:\s
ignoreregex =

Dans /etc/fail2ban/jail.conf copiez:

[apache-modevasive]
enabled = true
filter&nbsp; = apache-modevasive
action = iptables-allports[name=apache-modevasive]
logpath = /var/log/apache*/*error.log
bantime = 60
bantime = 3600
maxretry = 10

FIN.
Si vous avez d’autres suggestions ou améliorations, je suis preneur…

Kclean ou comment supprimer les anciens noyaux

kclean ou comment supprimer des anciens noyaux

Comme tous les articles jusqu’à cette date, c’est encore du réchauffé, mais vous remarquerez à la version des noyaux que j’ai refait le test pour ce billet…

Lors des successives mises à jour, les nouveaux noyaux viennent s’installer et s’ajouter aux anciens. J’utilise au boulot une version Ubuntu LTS, le nombre de noyaux depuis avril 2010 commence sérieusement à prendre de la place.

Hoper m’a parlé de son script permettant d’éliminer proprement les anciens noyaux en toute simplicité, j’ai donc décidé de vous faire découvrir.

J’ai fait le choix de la faire en ligne de commande, mais on a la possibilité de le lancer en mode graphique.
Voyons la place que prend la totalité de mes noyaux:

$ sudo du -h /boot
[sudo] password for sima78:
/boot/grub/locale
4,4M
/boot/grub171M
/boot

Donc 171 Méga pour le répertoire /boot\r\n

Les options de la commande Kclean:

$ sudo ./kcleaner.sh -k
[sudo] password for sima78: 

Noyau actuellement en cours d'utilisation : 3.13.0-51
Par defaut, seul ce noyau est conserve. 

Ce script va tenter de trouver la version precedente du noyau pour la conserver.
Verifiez les informations fournies avant de valider la suppression.

La version precedemment installee (a conserver) est la version : 3.13.0-49
Les paquets suivants vont etre supprimes :

    linux-image-3.13.0-46-generic
    linux-image-3.13.0-48-generic
    linux-image-extra-3.13.0-46-generic
    linux-image-extra-3.13.0-48-generic
    linux-headers-3.13.0-46
    linux-headers-3.13.0-46-generic
    linux-headers-3.13.0-48
    linux-headers-3.13.0-48-generic

Cela devrait liberer environ 516 MiB d'espace disque

 Voulez vous indiquer manuellement des paquets à conserver ? [o/N] :n
 Voulez vous supprimer l'ensemble des paquets indiques ? [o/N] :o

 Suppression en cours :
(...) ---> là vous allez voir un tas ligne défiler, le travail va
           se lister jusqu'à arriver à:
 -------------- Suppression effectuee ---------------
$
$ sudo du -h /boot
48K    /boot/grub/locale
4,4M    /boot/grub
33M    /boot

171M – 33M = 138 méga supprimés et très proprement, car je suis en dualboot avec une version X -1 de ubuntu LTS et le script n’a pas touché aux lignes de lancement de la version X -1 dans le fichier Grub, mais a bien supprimé les autres.

En savoir plus et se procurer kclean.

Ajouter les coordonnées GPS dans EXIF avec exiv2

Linux, exiv2 et ajout des coordonnées GPS dans EXIF d’une image

Ajouter les coordonnées GPS à une photo en ligne de commande nécessiterai trois (3) lignes de commande, ce script peut simplifier la tâches.

Ici un petit script permettant de rentrer des coordonnées GPS dans les métadonnées EXIF dans une série de photos.

« exiv2 » doit être installé… sinon:

apt-get install exiv2

Ce script va vous poser quelques questions, bien entendu, il ne faut pas mettre les parenthèses…

Les questions qui vous seront posées:

  • Entrez l’extension de fichier en respectant la casse (jpg) (JPG) (RAW)… : Tapez JPG ou jpg ou RAW ,bref l’extension de votre série photos en respectant la casse, c’est-à-dire, en majuscules ou minuscules…
  • Entrez la latitude (N) ou (S) : N ou S Cela se transformera en North ou South sur les tags exif
  • Entrez la latitude sous forme ex (48/1 13/1 24/1) : Imaginons la latitude à rentrer est 48°, 13min et 24sec… vous devrez le saisir sous forme de 48/1 13/1 24/1 et cela donnera 48deg 13′ 24″ sur le tag exif.
  • Entrez la longitude (E) ou (O) : E ou O cela se transformera en East ou West
  • Entrez la longitude sous forme ex (9/1 52/1 51/1) : (même principe que pour la latitude).

Le sript:

#!/bin/bash
# Ajouter les données GPS aux métadonnées EXIF - Sima78
# Entrez vos données GPS sans les parenthèses... :-)"
echo -n "Entrez l'extention de fichier en respectant la casse (jpg) (JPG) (RAW)... : "
read form
echo -n "Entrez la latitude (N) ou (S) : "
read latref
echo -n "Entrez la latitude sous forme ex (48/1 13/1 24/1) : "
read lat
echo -n "Entrez la longitude (E) ou (O) : "
read longref
echo -n "Entrez la longitude sous forme ex (9/1 52/1 51/1) : "
read long
for i in *.$form
   do
      exiv2 -M"set Exif.GPSInfo.GPSLatitudeRef $latref" $i
      exiv2 -M"set Exif.GPSInfo.GPSLatitude $lat" $i
      exiv2 -M"set Exif.GPSInfo.GPSLongitudeRef $longref" $i
      exiv2 -M"set Exif.GPSInfo.GPSLongitude $long" $i
   done
echo "TERMINE"

Pour utiliser ce script, copiez-le dans votre éditeur texte favori et enregistrez sous… par exemple: ajout-gps-exif.sh

Le rendre exécutable par:

chmod +x ajout-gps-exif.sh

Le placer dans le dossier de vos clichés à modifier et le lancer par:

./ajout-gps-exif.sh

Pour voir le résultat:

exiv2 -pt votre_photo.JPG

Exemple de résultat:

(...)
Exif.GPSInfo.GPSLatitudeRef     Ascii    2  North
Exif.GPSInfo.GPSLatitude        Rational 3  48deg 13' 24" 
Exif.GPSInfo.GPSLongitudeRef    Ascii    2  East
Exif.GPSInfo.GPSLongitude       Rational 3  9deg 52' 51"

Ce script utilise une simple boucle (for, do, done) il est donc facile de l’enrichir avec d’autres champs complémentaires (copyright, auteur, commentaire, etc…)

Liste des champs possibles sur www.exiv2.org/tags.html