Exemples concrets
Gestion des utilisateurs
Besoin
Dans le cadre de la gestion d’utilisateurs, un administrateur peut recevoir quotidiennement un fichier CSV (export d’un tableur MS Excel par exemple) contenant la liste des utilisateurs qui doivent exister sur un serveur.
Ce fichier, appelé personnages.csv, pourrait alors avoir le contenu suivant :
Prénom;Nom;Mot de passe;Lieu
Suzanne;Sto Hélit;bigadin;Quirm
Esméralda;Ciredutemps;gytha;Lancre
Havelock;Vétérini;serviteur;Ankh-Morpork
Mustrum;Ridculle;ciredutemps;Université
Planteur;J.M.T.L.G.;brioche;-
Le mot de passe correspond au mot de passe original de l’utilisateur (celui-ci doit le modifier à sa première connexion), le lieu correspond à un secteur auquel l’utilisateur est rattaché ; lorsque le lieu est remplacé par un tiret, l’utilisateur doit être supprimé et ses données archivées.
La tâche quotidienne de cet administrateur est alors multiple :
-
Il doit ajouter les utilisateurs de la liste qui ne sont pas sur le système.
-
Il doit modifier le lieu auquel les utilisateurs sont rattachés s’ils sont déplacés.
-
Il ne doit pas modifier le mot de passe des utilisateurs existants.
-
Il doit supprimer les utilisateurs qui ne doivent plus exister.
-
Il doit archiver les fichiers de ces utilisateurs.
Dans ce cadre :
-
Les noms d’utilisateurs doivent avoir le format « nom_prenom », les accents doivent être supprimés et les majuscules doivent devenir des minuscules (de même pour les noms de groupes, liés aux lieux).
-
Chaque utilisateur doit être associé à un groupe nommé selon le lieu auquel il est rattaché.
-
Ses fichiers doivent être dans le répertoire /home/<lieu>/<utilisateur>.
-
S’il n’existe pas déjà, le répertoire de l’utilisateur doit contenir une copie du contenu du répertoire /etc/skel et son mot de passe doit être celui qui est donné dans le fichier (avec obligation de le changer à la prochaine connexion).
-
Les archives doivent être placées dans /archives/<utilisateur>-<date>.tar.gz.
Solution
Le script users.sh (90 lignes) que vous retrouverez dans les éléments téléchargeables (sous...
Supervision basique
Besoin
Lorsque l’on souhaite superviser un parc de serveurs, on s’appuie généralement sur un outil de supervision dédié (ZABBIX, Nagios, Prometheus, Xymon, etc.). Toutefois, on peut souhaiter simplement recevoir des alertes par e-mail en cas de problème sur un serveur, sans mettre en œuvre un outil complexe.
Imaginons que l’on souhaite recevoir un e-mail lorsque l’un des cas suivants se présente :
-
La charge du processeur sur les 5 dernières minutes est supérieure à 20.
-
La mémoire libre est inférieure à 10 Mo.
-
L’espace disponible sur une partition passe sous 500 Mo, si la partition fait plus de 1 Go (excluant alors la partition de démarrage EFI par exemple).
-
Le serveur web NginX s’est arrêté.
-
Le serveur de bases de données MySQL s’est arrêté.
-
Un paquet logiciel a été ajouté ou enlevé.
Solution
Le script monitor.sh (76 lignes) que vous retrouverez dans les éléments téléchargeables (sous le répertoire ch10) effectue automatiquement ces vérifications et envoie un e-mail lorsqu’il y a lieu d’alerter l’administrateur. Il utilise les commandes suivantes :
-
uptime pour obtenir la charge du processeur.
-
free pour obtenir les données d’utilisation de la mémoire.
-
df pour obtenir les données d’utilisation des disques.
-
pgrep pour vérifier la présence d’un processus.
-
dpkg pour obtenir la liste des paquets installés....
Nettoyage de systèmes de fichiers
Besoin
Dans une grande société, les salariés sont susceptibles de stocker de nombreuses données, qui peuvent saturer prématurément un disque dur. Il peut être utile d’effectuer un nettoyage régulier des données, qui peut consister en différentes actions :
-
Supprimer tout fichier de type MP3 ou AVI.
-
Compresser tout fichier dont la taille fait plus de 10 Mo.
-
Archiver sur un autre disque tout fichier plus vieux que 2 ans.
Cependant, afin de ne pas risquer la suppression d’une donnée de travail importante, une « liste blanche » est mise en place : une interface web permet aux utilisateurs de renseigner des noms de fichiers à conserver, lorsqu’ils ont besoin de tels fichiers pour travailler. Lorsqu’un utilisateur ajoute des données dans cette interface, son nom ainsi que la date sont enregistrés. On peut alors récupérer sur une adresse particulière la liste complète des fichiers à conserver, qui se présente sous le format JSON de la manière suivante :
[
{
"utilisateur": "rincevent",
"date": "2017-08-26",
"fichier": "bagage.txt"
},
{
"utilisateur": "kreskenn",
"date": "2017-03-19",
"fichier": "groupe-de-rocs.mp3"
}
]
Toutefois, avant toute action, l’utilisateur propriétaire du fichier doit être averti du traitement futur de ses fichiers, afin de lui laisser le temps de les ajouter à la liste blanche.
Solution
Ici, le besoin n’est pas décrit d’une manière qui puisse directement être transposée sous forme d’un algorithme. Il faut alors commencer par l’analyser pour en tirer une suite d’étapes claire, permettant de répondre au besoin. L’enchaînement des étapes peut alors être le suivant :
-
Identifier les fichiers qui seraient à supprimer, compresser ou archiver.
-
Ne prendre en compte...