Archives de catégorie : Administration

Résolution du problème des règles d’évitement de logcheck pour sSMTP

Logcheck est un logiciel qui analyse les logs du serveur et renvoi par mail des infos sur les problèmes rencontrés.

Malgré le paramétrage qui semble être correct, les règles d'évitement (ignorance) des log de sSMTP n'étaient pas appliquées et je recevais toutes les heures un message du type :

System Events
=-=-=-=-=-=-=
Mar 28 07:02:06 hostname sSMTP[32192]: Creating SSL connection to host
Mar 28 07:02:07 hostname sSMTP[32192]: SSL connection using RSA_AES_128_CBC_SHA1
Mar 28 07:02:09 hostname sSMTP[32192]: Sent mail for mail@domain.com (221 2.0.0 closing connection t19071wmt.23 - gsmtp) uid=110 username=logcheck outbytes=1437

J'ai trouvé la solution sur cet article :

Étape 1

Le fichier dans lequel les règles sont inscrites n'a pas les même droits que les autres... Vérifiez en faisant :

cd /etc/logcheck/ignore.d.server
ll

Chez moi, le fichier ssmtp n'a pas les mêmes autorisations que ses copains.

Pour corriger ça :

chown root:logcheck /etc/logcheck/ignore.d.server/ssmtp
chmod 644 /etc/logcheck/ignore.d.server/ssmtp

Étape 2

L'expression des règles est incomplète. J'utilise maintenant celles proposées dans l'article cité.

nano /etc/logcheck/ignore.d.server/ssmtp

Y coller les règles suivantes :

# My custom pattern
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ sSMTP\[[0-9]+\]: Creating SSL connection to host$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ sSMTP\[[0-9]+\]: SSL connection using [._[:alnum:]-]+$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ sSMTP\[[0-9]+\]: Sent mail for .*$
# End of custom pattern

Sauvegarde de mon serveur web

Le serveur hébergeant entre autres Moodle et GLPI est une machine virtuelle située dans notre établissement.

Voici notre politique de sauvegarde et les scripts associés.

Principe de la sauvegarde

Chaque nuit, les BDD et les répertoires critiques de mon serveur sont copiés sur un espace disque partagé et sécurisé. Il en résulte donc un répertoire par jour d'environ 200 Go avec une navigation rapide dans l'arborescence si nécessaire.

Chaque semaine, ces même sauvegardes (mais pas seulement) sont copiées sur un disque externe, puis mise dans un coffre fort situé dans un autre bâtiment. Deux disques jouent ce rôle l'un après l'autre.

Il en résulte donc 3 semaines de sauvegarde facilement accessibles et relativement bien protégées.

J'ai hérité de scripts de sauvegarde que j'ai adapté à mes besoins pour gagner en efficacité et rapidité de traitement.

Prérequis

Un répertoire réseau partagé

Les copies seront dans un premier temps placées dans un répertoire réseau  partagé avec accès par un utilisateur en écriture correspondant à la machine qui crée la sauvegarde.

Un utilisateur MySQL dédié

Par sécurité, chaque base de donnée à un accès en écriture par un utilisateur différent (je n'utilise pas l'utilisateur root...). Je crée donc un utilisateur « dump » dédié à la tache de copier la base et qui n'a besoin que d'un accès en lecture à chacune des base.

mysql -u root -p -e "CREATE USER 'dump'@'localhost' IDENTIFIED BY 'LEMOTDEPASSE';"
mysql -u root -p -e "GRANT SELECT , SHOW DATABASES , LOCK TABLES , SHOW VIEW ON * . * TO 'dump'@'localhost' IDENTIFIED BY 'LEMOTDEPASSE' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;"

Les fichiers qui vont bien

Script de sauvegarde

Petite explication des étapes :

  1. D'abord, on déclare les variables de travail.
  2. Je demande que les erreurs soient logguées dans un fichier error.log.
  3. D'un autre coté, je logue chaque étape dans un fichier backup.log avec les horaires correspondants.
  4. Je baisse la priorité de l'action de manière à ce que si des utilisateurs veulent accéder au serveur, il puisse répondre convenablement.
  5. Pour le dump des bases de données, la seule particularité réside dans le fait que je dump en local pour en faire une copie des fichiers ensuite : charge le serveur moins longtemps.
  6. Je monte ensuite le disque de manière faire mes copies.
  7. Pour la copie des fichiers, j'utilise rsync qui fait une copie « simple » lors de la première sauvegarde (4h30 pour 200 Go, soit les 7 premiers jours) mais qui ensuite ne fera qu'une synchronisation (durée ramenée à 30 minutes environ). Dans les options de rsync, j'utilise selon les cas :
    • --stats : affiche les statistiques de l'opération
    • --progress : affiche la progression de l'opération
    • --copy-links : copie les fichiers cibles des liens symbolique en tant que fichiers
    • --delete-after : qui supprime sur la destination les fichiers ayant été supprimés dans la source, en fin d'opération.
    • --exclude-from : qui indique un fichier texte dans lequel j'écris les répertoires et fichiers à ne pas synchroniser.
  8. Je copie les fichiers de log sur le répertoire distant.
  9. Je démonte le disque réseau.
  10. J'envoie un rapport par mail.

sauvegarde.sh

#!/bin/bash

# Création des variables
# Globales
MAIL='mail@domaine.fr'
HOSTNAME='computer name'
SAVE_DIR='//192.168.1.1/backup'
MOUNTED_DIR='/mnt/sauvegarde'
LOCAL_SQL_DIR='/home/scripts/dump_sql'
LOG_FILE='/home/scripts/backup.log'
ERROR_LOG_FILE='/home/scripts/error.log'
# User for external disk usage
EXT_USER='user'
EXT_PASS='password'
EXT_DOMAIN='domain'
# SQL user informations
SQL_USER='dump'
SQL_PASS='pass_sql'
SQL_EXCLUSION='(information_schema|performance_schema)'

# Dates
NOW=$(date +"%Y-%m-%d")
DAY=$(date +"%A")
MOUNTH=$(date +"%m")
WEEK=$(date +"%V")
YEAR=$(date +"%Y")

# Destination directory
DEST_DIR=$MOUNTED_DIR/$DAY 

# Error log
echo "Error log for $NOW :">$ERROR_LOG_FILE
exec 2>> $ERROR_LOG_FILE

# Low priority
ionice -c3 -p$$ &>/dev/null
renice -n 19 -p $$ &>/dev/null

## Let's go
echo "Backup for $NOW on $HOSTNAME :">$LOG_FILE
echo " ">>$LOG_FILE

# Local MySQL dump
echo "Local MySQL dump">>$LOG_FILE

# Make local directory if not exist
 mkdir -p $LOCAL_SQL_DIR;
 
 # Get bases name
 databases="$(mysql -u$SQL_USER -p$SQL_PASS -Bse 'show databases' | grep -v -E $SQL_EXCLUSION)"
 
 # Dump
 for database in ${databases} 
 do
 echo "$(date +"%H:%M:%S") : dump $database">>$LOG_FILE
 mysqldump -u$SQL_USER -p$SQL_PASS $database > $LOCAL_SQL_DIR/${database}.sql
 done

# End local MySQL dump
echo "$(date +"%H:%M:%S") : dump finished">>$LOG_FILE
echo "------------------------------------">>$LOG_FILE

# Directory sync 
echo "Files sync">>$LOG_FILE

# Make mounted directory if not exist
 mkdir -p $MOUNTED_DIR;

# Mount
 echo "$(date +"%H:%M:%S") : mount $MOUNTED_DIR">>$LOG_FILE
 mount -t cifs -o username=$EXT_USER,pass=$EXT_PASS,domain=$EXT_DOMAIN $SAVE_DIR $MOUNTED_DIR

# Make destination directory if not exist
 mkdir -p $DEST_DIR;

# Sync files
 echo "$(date +"%H:%M:%S") : sync $LOCAL_SQL_DIR">>$LOG_FILE
 rsync -a --stats --progress --delete-after $LOCAL_SQL_DIR $DEST_DIR

echo "$(date +"%H:%M:%S") : sync /var/www/html">>$LOG_FILE
 rsync -a --stats --progress --exclude-from=/home/scripts/excludes_html.txt --delete-after /var/www/html $DEST_DIR

echo "$(date +"%H:%M:%S") : sync /root">>$LOG_FILE
 rsync -a --stats --progress --copy-links --delete-after /root $DEST_DIR

echo "$(date +"%H:%M:%S") : sync /etc">>$LOG_FILE
 rsync -a --stats --progress --copy-links --delete-after /etc $DEST_DIR

echo "$(date +"%H:%M:%S") : sync /home/moodledata">>$LOG_FILE
 rsync -a --stats --progress --exclude-from=/home/scripts/excludes_moodledata.txt --delete-after /home/moodledata $DEST_DIR

# End directory sync
echo "$(date +"%H:%M:%S") : sync finished">>$LOG_FILE
echo "------------------------------------">>$LOG_FILE

# Synchronisation des buffers des disques 
sync

# Log file copy
echo "$(date +"%H:%M:%S") : copy log file">>$LOG_FILE
cp $LOG_FILE $DEST_DIR/
echo "$(date +"%H:%M:%S") : copy error file">>$LOG_FILE
cp $ERROR_LOG_FILE $DEST_DIR/

# Umount 
echo "$(date +"%H:%M:%S") : unmount $MOUNTED_DIR">>$LOG_FILE
umount $MOUNTED_DIR

# Ended
echo "$(date +"%H:%M:%S") : -- Backup done ! --">>$LOG_FILE

# Send mail report
mail -s "$HOSTNAME : $NOW backup report" $MAIL < $LOG_FILE
mail -s "$HOSTNAME : $NOW error log" $MAIL < $ERROR_LOG_FILE

 

Fichier d'exclusion pour le répertoire Moodledata

J'enlève les fichiers bak et log, les fichiers de sessions et temporaires de moodle (peut être un héritage des anciennes versions d'ailleurs).

excludes_moodledata.txt

*.bak
*.log
/moodledata/sessions
/moodledata/temp

Fichier d'exclusion pour le répertoire html

J'enlève les fichiers bak et log, les fichiers de sessions de GLPI, et quelques répertoires situés dans /var/www/html commençant par _.

excludes_html.txt

*.bak
*.log
/html/glpi/files/_sessions
/html/_*

Automatisation

Après essais et ajustement, et surtout vérification que les fichiers de la sauvegarde soient bien présents et utilisables, je demande à un cron d’exécuter ce script chaque nuit à 23h00.

00 23 * * * sh /home/scripts/sauvegarde.sh

Édition :

  • Edit suite à la remarque de Cascador : mkdir -p

Sources d'inspiration :

  • http://david.mercereau.info/script-de-sauvegarde-mysql-par-base-mysql_dump-sh/
  • http://linuxfocus.org/Francais/March2004/article326.shtml

Regshot : Analyser les changements dans la base de registre

Vous avez peut être constaté que j'apprécie d'attaquer directement la base de registre de Windows pour apporter les modifications qui vont bien sur mes postes.

Je partage avec vous ma découverte du jour : Regshot.

Ce logiciel facile d'accès permet de faire une capture de la base de registre avant et après des événements, et d'en analyser les différences sous forme textuelle.

Utilisation

D'abord on le télécharge : https://sourceforge.net/projects/regshot/

Puis on le décompresse, et on le lance :

On exécute un 1er cliché :

On apporte les modifications sur le poste puis on effectue un 2ème cliché.

Enfin, on demande à comparer les deux clichés :

On obtient un fichier texte avec les clés / valeurs ajoutées, effacées ou modifiées.

Script VBS pour renommer un dossier

J'ai un petit défaut de préparation d'une image disque : un logiciel (SolidWorks) se lance automatiquement avec un complément (EFICN) alors que je n'en ai pas besoin... D'une part il est lent à se lancer, et en plus il demande un paramétrage : ça a tendance à gonfler les utilisateurs qui ne comprennent pas et perdent leur temps.

Plutôt que de refaire et redéployer l'image immédiatement, j'ai recherché à supprimer le lancement automatique de ce complément.

Après avoir analysé les éventuels changements dans la base de registre pour voir si je pouvais jouer la dessus (au passage, j'ai découverte Regshot pour analyser la BDR avant / après action), j'ai pu observer qu'un simple renommage du répertoire contenant EFICN suffisait... Reste à déployer ça par GPO.

Le script ci dessous renomme le répertoire C:\Program Files\EFICAD en C:\Program Files\EFICAD.old, et le tour est joué !

Rename_EFICN_folder.vbs

' --------------------------------------------------------
' Modifie le nom d'un répertoire s'il est présent sur
' le disque.
' 
' Author : Éric Bugnet - eric.bugnet.fr
' --------------------------------------------------------

Option Explicit

' Déclaration
dim Fso, Folder, FolderName, NewName
set Fso = CreateObject( "Scripting.FileSystemObject" )

' Dossier à vérifier / modifier
FolderName = "C:\Program Files\EFICAD"

' Si le dossier existe
if (Fso.FolderExists(FolderName )) then
    ' Renome le dossier en xxx.old
    Set Folder = Fso.GetFolder (FolderName)
    NewName = Folder.Name & ".old"
    Folder.Name = NewName
else
    ' Sinon rien à faire
    ' MsgBox "RAS"
end if

Il ne reste plus qu'à le lancer par GPO au démarrage de la machine (comme je l'ai déjà expliqué dans plusieurs articles de ce site).

Créer des évènements pour tester les alertes sur Zabbix

Il est parfois nécessaire de tester les effets d'un changement de configuration de votre Zabbix... Mais ça serait bien de pouvoir faire autrement qu'en arrêtant un serveur de production et attendre que votre outil préféré réagisse !

Bref, voici une méthode pour déclencher une alerte sur Zabbix à volonté (source).

Lire la suite de l'article « Créer des évènements pour tester les alertes sur Zabbix »

Envoyer les alertes mail Zabbix par Gmail et G-Suite

Mon établissement utilise G-Suite (anciennement les Google Apps), et je souhaite faire en sorte que mon serveur Zabbix envoi les mails par l'intermédiaire de Google mail (oui, je sais, c'est maaaaaal !).

Jusqu'à là ça peut paraitre simple, mais je n'ai pas réussi à paramétrer Zabbix pour cet envoi... Pourtant, tout semble être présent dans les paramétrage d'envois mail : serveur SMTP, port, adresse d'envoi, identifiant et mot de passe, TLS/SSL...

Après quelques recherche, j'ai trouvé une petite astuce permettant de contourner le problème.

La source est ici, mais en anglais et pas à jour avec la version actuelle.

Alors voici son actualisation in French dans le texte.

Lire la suite de l'article « Envoyer les alertes mail Zabbix par Gmail et G-Suite »

Superviser mon serveur avec Zabbix

L'un de mes serveurs est tombé ce WE. Ça peut arriver, c'est chiant, et il me reste à trouver le problème pour le résoudre.

Mais ce qui m'agace le plus : ce sont les utilisateurs qui m'ont prévenu...

Il y a quelques années, j'avais mis en place Nagios avec le système FAN (Fully AutomatedNagios) pour suivre l'usage de ce serveur et particulier (j'avais en fait mis en place sur tous les serveurs et pas mal d'imprimantes), et surtout recevoir un message en cas de surcharge ou de coupure. Pour des raisons que j'ignore, ce système a été mis hors circuit pour être remplacé...

Du coup, je me dis que je vais remettre une machine virtuelle en route pour surveiller les services que je gère. Quitte à faire, une mise à jour de mon image de FAN.... Clic pour télécharger : dernière version datant de 2013... Bon, ben on va essayer autre chose.

Je me lance sur Zabbix.

Les fichiers sont à récupérer ici : http://www.zabbix.com/download

Lire la suite de l'article « Superviser mon serveur avec Zabbix »

Paramétrer iTALC par GPO

J'ai déjà parlé d'iTALC en expliquant à quoi il servait et comment l'installer et l'utiliser dans un précédent article... Je vous laisse le consulter si nécessaire.

Puisque j'ai eu l'occasion de refaire quelques installations dernièrement, je vais en profiter pour mettre ça au propre sur ce blog et le partager avec vous.

Quel est le besoin ?

iTALC est installé dans beaucoup de salles de cours par le biais d'un déploiement d'images avec une configuration de base commune à tous les PC ou groupes de PC.

Il faut maintenant améliorer la situation :

  • Chaque enseignant connecté sur le poste enseignant ne doit pouvoir accéder qu'aux PC de se salle de cours (donc une paire de clés publique / privée de type « enseignant » par salle de cours)
  • L'administrateur doit pouvoir accéder à tous les PC de toutes les salles de cours (donc une paire de clés publique / privé de type « admin » pour tout l'établissement).
  • Pour des raisons de sécurité, le changement des clés doit être facile et instantané.

Démarche

La première phase consiste à déployer les postes avec iTALC version client déjà installée par défaut.

La deuxième consiste à modifier le poste enseignant déployé pour installer la « version maitre » d'iTALC et générer la paire de clés de type « enseignant » pour la salle de cours en question, ainsi que son fichier de configuration « GlobalConfig.xml » (éventuellement récupérable si il s'agit d'une réinstallation de salle).

La clé privée reste sur le poste maitre, la clé publique et le fichier de configuration sont placés dans un espace réseau accessible en lecture seule à tout le monde. Je le fais directement lors l'installation comme ça il crée lui même les répertoires admin et teacher.

Enfin, les postes clients de chaque salle de cours doivent être modifiés automatiquement par GPO pour aller chercher la clé publique correspondant à la salle où ils sont installés.

Lire la suite de l'article « Paramétrer iTALC par GPO »

Superviser les ordinateurs de votre salle de cours avec iTALC

Présentation

iTALC est un logiciel qui permet principalement à un enseignant de voir les écrans des ordinateurs de sa salle de cours, histoire de voir si vos étudiants travaillent ou se baladent sur Youtube... Mais il permet aussi :

  • de prendre la main sur un PC d'un étudiant ;
  • de verrouiller l'écran des étudiants pour qu'ils ne soient pas tentés par autre chose durant vos explications ;
  • de diffuser votre écran sur celui des étudiants ou diffuser l'écran d'un étudiant sur tous les autres ;
  • d'envoyer un message texte à un étudiant ;
  • de démarrer / éteindre les ordinateurs ;
  • et même d’exécuter des commandes à distance.

C'est un logiciel qui repose sur d'autres outils (VNC principalement) et qu'il faut comparer à d'autres solutions commerciales qui sont à mon goût hors de prix...

Aurais-je oublié de dire qu'il était gratuit et que le code source est sur Github ?

Et aussi qu'il fonctionnait sous Windows© et Linux ?

Lire la suite de l'article « Superviser les ordinateurs de votre salle de cours avec iTALC »

Alimenter GLPI avec FusionInventory (en remplacement d’OCS)

GLPI est un gestionnaire de parc informatique qui nous est utile pour gérer les tickets d'intervention et le suivi du matos.

Auparavant, nous utilisions OCS qui remonte régulièrement un inventaire des PC sur GLPI via un plugin, ça permet d'avoir un inventaire du parc machine au plus proche de la réalité sans avoir besoin de faire de saisie manuelle.

Mais notre serveur OCS est tombé en rade, et plutôt que de chercher à le ré-installer, je tente le coup d'utiliser FusionInventory.

Lire la suite de l'article « Alimenter GLPI avec FusionInventory (en remplacement d’OCS) »