Archives par mot-clé : administration

Superviser les ordinateurs de votre salle de cours avec Veyon

Veyon est le successeur officiel d'iTALC, dont j'avais fait quelques articles précédemment et qui n'est plus maintenu.

J'ai été surpris de voir que le développement avait repris et qu'il mène à un produit bien sympa.

À quoi ça sert ?

Une fois le client Veyon installé sur le poste de vos étudiants, vous pouvez voir les écrans de vos ouailles avec le Veyon Master (pour savoir s'ils glandent ou travaillent).

Pour l'aspect moral, légal et politique, je m'auto-réfère à mon article sur iTALC : mon avis n'a pas changé.

Image honteusement pompée du site Veyon.io

Mais encore ?

  • voir les écrans des élèves
  • verrouiller les écrans des élèves
  • envoyer votre écran sur celui des élèves
  • contrôler les ordinateurs des élèves
  • allumer / redémarrer / déconnecter l'utilisateur ou éteindre l'ordinateur (pratique en début et fin de séance)
  • envoyer un message texte sur les écrans des élèves
  • ouvrir une page internet
  • lancer un programme
  • il manque pour l'instant la connexion directe qu'on avait sur iTALC à un moment

Et le petit plus : ça marche sur Windows et Linux, car ça utilise simplement VNC.

Ha... et c'est bien sûr open source, disponible sur github, et gratuit...

Mais c'est comme iTALC ?

Ben, oui mais non, y'a des trucs qui sont revenus, d'autres disparus, et un petit plus génial que je vous réserve pour plus tard (suspens...).

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

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

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 »

Mise à jour Moodle 2.3 vers Moodle 2.5 par GIT

Résumé des opérations effectuées.

Sauvegarde

tar -czf /home/moodle/save_rep_moodle_data.tar.gz /home/moodle/upload
tar -czf /home/moodle/save_rep_moodle.tar.gz /var/www/html/moodle
mysqldump -uUSERNAME -pPASSWORD -e -q -Q --add-drop-table moodle | gzip > /home/moodle/save_bdd_moodle.sql.gz

Optimisation de la base de données

mysqlcheck --auto-repair --database moodle
mysqlcheck --optimize --database moodle

Mise à jour par GIT

cd /var/www/html/moodle
/usr/bin/php admin/cli/maintenance.php --enable
git pull
/usr/bin/php admin/cli/upgrade.php
git branch -a
git checkout -b local_25_STABLE origin/MOODLE_25_STABLE
/usr/bin/php admin/cli/upgrade.php
/usr/bin/php admin/cli/maintenance.php --disable

En savoir plus...