Script d'administration Linux

Ce script entièrement rédigé pour ceux qui souhaitent approfondir leurs connaissances en scripting Linux. Vous pouvez reprendre des briques de code, l'améliorer, il est là pour ça !
NOTA :
- Il se peut qu'il reste des caractères spéciaux.
- L'indentation des notes peut être décalée, elles sont commentées par le #
#!/bin/bash
#*********************************************************************************
#************************************* SCRIPT D'ADMINISTRATION Version 1.2 ***********
#*********************************************************************************
#
# Notes :
#
# ce script peut être modifié en implémentant de nouvelles fonctions
# l'indentation doit être claire et les commandes commentées
# le menu principal d'administration est en fin de script
# ce script ne peut-être exécuter qu'en tant que root
# en cas de rajout de fonction penser à rappeler la fonction dans le menu principal ou dans le sous menu auquel
# elle est implémentée
# en cas de modification l'interface doit restée au maximum intuitive
#
#
#
#
#
#*************************************************************************************
#***********************************************Fonction gestion des utilisateurs
#*************************************************************************************
function gestion_utilisateur () {
function creation_supp_utilisateur () { # fonction creation_supp_utilisateur
echo -e " \033[31m Supprimer ou créer un utilisateur ? \033[00m"
echo " Taper x pour supprimer / Taper c pour créer :"
read choix
if [ $choix = "c" ] ;
then
echo "Entrer le login de l'utilisateur souhaité :"
read user
adduser -a $user 2>/dev/null # 2>/dev/null redirection vers la
if [ $? -eq 0 ] # poubelle de la commande précédente
then # si le résultat est faux
echo -e "\033[31m L'utilisateur $user à bien été créé ! \033[00m"
else
echo -e "\033[31m Echec, l'utilisateur $user n'a pas été créé, vérifier vos données... \033[00m"
fi
echo "Appuyer sur la touche <Entrée> pour revenir au menu..."
read touche # lecture de la touche entrée
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
else
if [ $choix = "x" ] ;
then
echo "Donner le nom de l'utilisateur à supprimer :"
read utildel
userdel -r $utildel 2>/dev/null # suppression avec userdel -r
if [ $? -eq 0 ] # et vérification
then
echo -e "\033[31m La suppression de l'utilisateur $utildel est confirmée \033[00m"
else
echo -e "\033[31m Echec, de la suppression de l'utilisateur $utildel, vérifier vos données... \033[00m"
fi
echo "Appuyer sur la touche <Entrée> pour revenir au menu..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
else
exit 0
fi
fi
menu_utilisateur # retour au sous menu de la fonction
}
function creation_supp_group () {
echo -e " \033[31m Supprimer ou créer un groupe ? \033[00m"
echo " Taper x pour supprimer / Taper c pour créer :"
read choix
if [ $choix = "c" ] ;
then
echo "Entrer le nom du groupe souhaité :"
read group
groupadd $group 2>/dev/null
if [ $? -eq 0 ]
then
echo -e "\033[31m Le group $group a bien été créé ! \033[00m"
else
echo -e "\033[31m Echec, le group $group n'a pas été créé, vérifier vos données... \033[00m"
fi
echo "Voulez-vous vérifier en regardant le fichier /etc/group ? (y/n)"
read rep
if [ $rep = "y" ] ;
then
vi /etc/group # vi permet d'éditer et cat est
else # plus adapté pour cette
echo "Appuyer sur la touche <Entrée> pour revenir au menu..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_utilisateur
fi
else
if [ $choix = "x" ]; # deuxième partie du choix
then
echo "Donner le nom du groupe à supprimer :"
read group
groupdel $group2>/dev/null # suppression avec groupdel
if [ $? -eq 0 ]
then
echo -e "\033[31m La suppression du group $group est confirmée \033[00m"
else
echo -e "\033[31m Echec, de la suppression du group $group, vérifier vos données... \033[00m"
fi
echo "Voulez-vous vérifier en regardant le fichier /etc/group ? (y/n)"
read rep
if [ $rep = "y" ] ;
then
vi /etc/group
else
echo "Appuyer sur la touche <Entrée> pour revenir au menu..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_utilisateur # retour au menu de la sous fonction
fi
else
exit 0
fi
fi
menu_utilisateur # rappel du sous menu de la fonction
}
function voir_utilisateur () {
who -q # montre tous les logins des utilisateurs
echo "Appuyer sur la touche <Entrée> pour continuer..." # connectés
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_utilisateur
}
function ajout_user_samba () {
echo "Donner le nom de l'utilisateur à implémenter à Samba :"
read nom
smbpasswd -a $nom 2>/dev/null # rajout de l'utilisateur à samba par
if [ $? -eq 0 ] # smbpasswd et vérification
then
echo -e "\033[31m L'utilisateur $nom a bien été rajouté à Samba \033[00m"
else
echo -e "\033[31m Echec l'utilisateur $nom n'a pas été rajouté à Samba, vérifier le nom... \033[00m"
fi
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_utilisateur
}
function ajout_user_group () {
echo "Donner le nom de l'utilisateur à rajouter dans un groupe :" # Note : l'interface doit être intuitive
read nom
echo "Donner le nom du groupe dans lequel vous voulez implémenter cet utilisateur :"
read group
adduser $nom $group 2>/dev/null # rajout avec adduser d'un utilisateur à
if [ $? -eq 0 ] # un groupe
then
echo -e "\033[31m L'utilisateur $nom a bien été rajouté au groupe $group \033[00m"
else
echo -e "\033[31m Echec l'utilisateur $nom n'a pas été rajouté au groupe $group, vérifier vos données... \033[00m"
fi
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_utilisateur
}
function capacite_user () {
echo "La taille des dossiers utilisateurs est de :"
du -s -h /home/*
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_utilisateur
}
function Menu_principal () {
Menu
}
function menu_utilisateur () { # menu de la sous fonction
clear # "gestion des utilisateurs"
echo ""
echo -e "\033[36mProjet Linux eXia 2008 \033[00m"
echo -e " \033[36m3ème année RIR \033[00m "
echo -e " \033[37m________________________________\033[00m "
echo -e " \033[37m| Gestion des utilisateurs |\033[00m "
echo""
echo -e "\033[33m*** MENU *** :\033[00m"
echo""
echo "1 - Créer / Supprimer un utilisateur"
echo "2 - Créer / Supprimer un groupe"
echo "3 - Voir les utilisateurs connectés"
echo "4 - Rajouter un utilisateur à Samba"
echo "5 - Rajouter un utilisateur à un groupe"
echo "6 - Voir la taille des dossiers des utilisateurs"
echo "7 - Revenir au menu Principal"
echo ""
echo "Entrez votre choix :"
read CHOIX # lecture du choix et appel
case $CHOIX in # de la fonction concernée
1)creation_supp_utilisateur;;
2)creation_supp_group;;
3)voir_utilisateur;;
4)ajout_user_samba;;
5)ajout_user_group;;
6)capacite_user;;
7)Menu_principal;;
*)exit 0;;
esac
}
menu_utilisateur
} # FIN de la sous fonction
# gestion_utilisateur
#**********************************************************************************
#******************************************************Fonction tuer un processus
#**********************************************************************************
function tuer_proc () {
ps ax --sort=tty,pid | more # défilements des processus petit à petit
echo " VEUILLEZ TAPER LE(S) "PID" DU(DES) PROCESS A TUER: " # par l'utilisation de |more
read PROCESS # lecture de la saisie avant la boucle POUR
for TRUC in $PROCESS; do
kill -9 $TRUC 2>/dev/null # arrêt des processus par kill -9
if [ $? -eq 0 ]
then
echo -e "\033[31m Le(s) processus $PROCESS on été arrêtés \033[00m"
else
echo -e "\033[31m Echec le(s) processus $PROCESS n'on pas été arrêtés, vérifier le PID \033[00m"
fi
done
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
Menu
}
# ***********************************************************************************
# *******************************************Fonction Récupérer les processus
# ***********************************************************************************
function recuperer_processus () {
ps -aux >> proccessus_du_$(date +%d_%m_%y).log # récup et supp de l'ancien fichier de log par >>
echo -e "\033[31m Le fichier Log de récupération des processus a été créé sur le bureau \033[00m"
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
Menu
}
# ***********************************************************************************
# ****************Fonction sauvegarder / rechercher par taille / nom fichier ou répertoire
# ***********************************************************************************
function sauv_recherche_fichier () {
function sauv_resol_conf () {
rsync -a /etc/resolv.conf /home/dyllan/Bureau/sauv_resol.conf_du_$(date +%d_%m_%y).log # utilisation de rsync pour une
echo -e "\033[31m Le fichier resolv.conf du $(date +%d_%m_%y) est bien sauvegardé sur le bureau \033[00m" # sauvegarde distante mais non
echo "Appuyer sur la touche <Entrée> pour continuer..." # présentée ici
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_sauv
}
function sauv_suppr_autre() {
echo -e " \033[31m Supprimer ou Sauvegarder ? \033[00m"
echo " Taper x pour supprimer / Taper s pour sauvegarder :"
read choix
if [ $choix = "s" ] ;
then
echo "Entrez le chemin du repertoire à sauvegarder" # demande du chemin relatif pour la supp ou
read chemin # la sauvegarde
echo "Entrez le chemin de l'endroit où vous voulez le sauvegarder"
read dest
cp -r $chemin $dest 2>/dev/null # copie du répertoire et tous les fichiers
if [ $? -eq 0 ] # par le rajout du -r pour récursif
then
echo -e "\033[31m La sauvegarde a été réalisée \033[00m"
else
echo -e "\033[31m Echec, la sauvegarde n'a pas été réalisée, vérifier vos données... \033[00m"
fi
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
else
if [ $choix = "x" ]; # 2ème partie du choix : la suppression
then
echo "Entrez le chemin du repertoire à supprimer"
read chem
rm -r $chem 2>/dev/null
if [ $? -eq 0 ]
then
echo -e "\033[31m La suppression de $chem est confirmée \033[00m"
else
echo -e "\033[31m Echec de la suppression de $chem, vérifier vos données... \033[00m"
fi
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
else
exit 0
fi
fi
menu_sauv
}
function creer_rep () {
echo "Quel est le nom du répertoire ? (tapez le nom) :"
read nom
if test -x $nom ;
then
echo -e "\033[31m Echec, le répertoire existe déjà !\033[00m"
else
mkdir "$nom"
chmod 0733 $nom
echo -e "\033[31m Le dossier $nom a été créé avec les droits sur le bureau \033[00m"
fi
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_sauv
}
function recherche_taille () {
echo -e "\033[31m La recherche est orientée supérieure ou inférieure à la taille du fichier ? \033[00m"
echo " Taper s pour supérieure / Taper i pour inférieure :"
read choix
if [ $choix = "s" ] ;
then
echo "Donner la taille minimum (en kilo):"
read taille
echo -e "\033[37m Résultat avec une taille minimum de $taille kilo :\033[00m"
find /* -size +$taille -print # recherche par taille orientée supérieure
else # donc demande d'une taille minimum
if [ $choix = "i" ];
then
echo "Donner la taille maximum (en kilo):"
read taille
echo -e "\033[37m Résultat avec une taille maximum de $taille kilo :\033[00m"
find /* -size -$taille -print # recherche par taille orientée inférieure
else # donc demande d'une taille max
exit 0
fi
fi
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_sauv
}
function recherche_nom () {
echo " Quel est le fichier ou répertoire que vous souhaitez rechercher ?"
read nom_fic
echo -e "\033[37m Résultat de votre recherche :\033[00m"
find /* -name $nom_fic # recherche dans tout le / par le nom
echo "Appuyer sur la touche <Entrée> pour continuer..." # cette recherche peut prendre du temps
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_sauv
}
function Menu_principal () { # retour au menu Principal du script
Menu
}
function menu_sauv () {
clear
echo ""
echo -e "\033[36mProjet Linux eXia 2008 \033[00m"
echo -e " \033[36m3ème année RIR \033[00m "
echo -e " \033[37m______________________________\033[00m "
echo -e " \033[37m| Sauvegarde et Recherche |\033[00m "
echo""
echo -e "\033[33m*** MENU *** :\033[00m"
echo""
echo "1 - Sauvegarder le fichier resolv.conf"
echo "2 - Sauvegarder / Supprimer un fichier ou répertoire"
echo "3 - Créer un répertoire"
echo "4 - Recherche d'un fichier / répertoire par sa taille"
echo "5 - Recherche d'un fichier / répertoire par son nom"
echo "6 - Revenir au menu Principal"
echo ""
echo "Entrez votre choix :"
read CHOIX
case $CHOIX in
1)sauv_resol_conf;;
2)sauv_suppr_autre;;
3)creer_rep;;
4)recherche_taille;;
5)recherche_nom;;
6)Menu_principal;;
*)exit 0;;
esac
}
menu_sauv
}
#********************************************************************************
#***********************************************Fonction Service Networking
#********************************************************************************
function networking () {
function restart () {
/etc/init.d/networking restart # redémarrage du service networking
echo "revenir au menu ? [y/n]"
read reponse
if [ $reponse = "y" ] ;
then
menu
else
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
Menu
fi
}
function stop () {
/etc/init.d/networking stop # arrêt du service networking par stop
echo "revenir au menu ? [y/n]"
read reponse
if [ $reponse = "y" ] ;
then
menu
else
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
Menu
fi
}
function start () { # redémarrage du service networking par
/etc/init.d/networking start # start
echo "revenir au menu ? [y/n]"
read reponse
if [ $reponse = "y" ] ;
then
menu
else
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
Menu
fi
}
function edit () {
vi /etc/resolv.conf # vi permet d'éditer en ligne de commande
clear # le fichier resolv.conf
echo""
echo "Revenir au menu Administration du service Networking ? [y/n]"
read reponse
if [ $reponse = "y" ] ;
then
menu
else
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
Menu
fi
}
function Menu_principal () {
Menu
}
function menu () { # configuration de l'apparence et de la
clear # syntaxe du menu d'administration
echo "" # du service Networking
echo -e "\033[36mProjet Linux eXia 2008 \033[00m"
echo -e " \033[36m3ème année RIR \033[00m "
echo -e " \033[37m____________________________________________\033[00m "
echo -e " \033[37m| Administration du service Networking |\033[00m "
echo""
echo -e "\033[33m*** MENU *** :\033[00m"
echo""
echo "1 - Restart"
echo "2 - Stop"
echo "3 - Start"
echo "4 - Editer le fichier resolv.conf"
echo "5 - Revenir au menu Principal"
echo ""
echo "Entrez votre choix :"
read CHOIX
case $CHOIX in
1)restart;;
2)stop;;
3)start;;
4)edit;;
5)Menu_principal;;
*)exit 0;;
esac
}
menu
}
#****************************************************************************
#*************************************************Fonction Quitter
#****************************************************************************
function quitter () {
exit
}
#****************************************************************************
#************************************************Fonction MENU
#****************************************************************************
function Menu () { # conception du menu Principal du script appelant
echo "" # les sous fonctions
echo -e "\033[36mProjet Linux eXia 2008 \033[00m"
echo -e " \033[36m3ème année RIR \033[00m "
echo -e " \033[37m _______________________________ \033[00m "
echo -e " \033[37m| Script d'administration |\033[00m "
echo""
echo -e "\033[33m*** Menu Principal *** :\033[00m"
echo""
echo "1 - Gestion des utilisateurs"
echo "2 - Gérer les processus"
echo "3 - Récupérer les processus"
echo "4 - Sauvegarde et Recherche"
echo "5 - Administration du service Networking"
echo "6 - Quitter"
echo ""
echo "Entrez votre choix :"
read CHOIX # lecture du choix et appel des fonctions
case $CHOIX in
1)gestion_utilisateur;;
2)tuer_proc;;
3)recuperer_processus;;
4)sauv_recherche_fichier;;
5)networking;;
6)quitter;;
*)exit 0;;
esac
} # FIN de la fonction du menu Principal
if [ ! `id -u` = 0 ]; # Vérification de l'identifiant du user
then # si l'identifiant n'est pas celui de root
echo -e "\033[31m Ce script doit être exécuté en root \033[00m" # le script n'est pas exécute,
echo"" # Sinon accès au menu Principal
echo "**********************************************"
echo "Appuyer sur la touche <Entrée> pour quitter..."
echo "**********************************************"
read touche
case $touche in
*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
exit 0
else
Menu
fi