From 101aa44bfecd850ec4052cce1e51cb4105c355e1 Mon Sep 17 00:00:00 2001 From: jfontaine35 <76435797+jfontaine35@users.noreply.github.com> Date: Fri, 12 Jan 2024 13:23:46 +0100 Subject: [PATCH] Serveur SambaAD manager --- AD.sh | 62 +++++++++++++++++++++++++++++++++++ AddAtThisGroups.sh | 7 ++++ CheckAccountOf.sh | 82 ++++++++++++++++++++++++++++++++++++++++++++++ CreateNewUser.sh | 18 ++++++++++ DisableUserTo.sh | 2 ++ ListAllUsers.sh | 2 ++ ListGroupTo.sh | 3 ++ ResetPwdTo.sh | 3 ++ RstPwd.sh | 3 ++ 9 files changed, 182 insertions(+) create mode 100644 AD.sh create mode 100644 AddAtThisGroups.sh create mode 100644 CheckAccountOf.sh create mode 100644 CreateNewUser.sh create mode 100644 DisableUserTo.sh create mode 100644 ListAllUsers.sh create mode 100644 ListGroupTo.sh create mode 100644 ResetPwdTo.sh create mode 100644 RstPwd.sh diff --git a/AD.sh b/AD.sh new file mode 100644 index 0000000..ebac96f --- /dev/null +++ b/AD.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +while true; do + echo "Gestion des comptes utilisateurs dans Samba AD" + echo "1. Créer un nouveau compte" + echo "2. Désactiver un compte" + echo "3. Supprimer un compte" + echo "4. Réinitialiser le mot de passe" + echo "5. Vérifier un compte" + echo "0. Quitter" + + read -p "Choisissez une option (1-5 ou 0): " choice + + case $choice in + 1) + read -p "Nom d'utilisateur: " username + read -p "Prénom de l'utilisateur: " first_name + read -p "Nom de famille de l'utilisateur: " last_name + samba-tool user create $username --given-name="$first_name" --surname="$last_name" + echo "Compte $username ($first_name $last_name) créé avec succès." + ;; + 2) + read -p "Nom d'utilisateur à désactiver: " username + read -p "Voulez-vous vraiment désactiver le compte $username ? (y/n): " confirmation + if [ "$confirmation" == "y" ]; then + samba-tool user disable $username + echo "Compte $username désactivé." + else + echo "Opération annulée." + fi + ;; + 3) + read -p "Nom d'utilisateur à supprimer: " username + read -p "Voulez-vous vraiment supprimer le compte $username ? (y/n): " confirmation + if [ "$confirmation" == "y" ]; then + samba-tool user delete $username + echo "Compte $username supprimé avec succès." + else + echo "Opération annulée." + fi + ;; + 4) + read -p "Nom d'utilisateur pour réinitialiser le mot de passe: " username + read -p "Définir un mot de passe par défaut ? (y/n): " default_password + samba-tool user setpassword $username --newpassword="${default_password}" --must-change-at-next-login + echo "Mot de passe réinitialisé pour le compte $username. L'utilisateur devra le changer au prochain démarrage." + ;; + 5) + read -p "Nom d'utilisateur: " username + bash ./CheckAccountOf.sh $username + pause + ;; + 0) + echo "Au revoir! Merci d'etre passé" + exit 0 + ;; + *) + echo "Choix invalide. Veuillez choisir une option de 1 à 5." + ;; + esac + +done diff --git a/AddAtThisGroups.sh b/AddAtThisGroups.sh new file mode 100644 index 0000000..96b5f2f --- /dev/null +++ b/AddAtThisGroups.sh @@ -0,0 +1,7 @@ +#!/bin/bash +read -p "Entrer l'utilisateur concerné : " login +for var in "$@" +do + samba-tool group addmembers "$var" $login +done + diff --git a/CheckAccountOf.sh b/CheckAccountOf.sh new file mode 100644 index 0000000..aa5d829 --- /dev/null +++ b/CheckAccountOf.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +# Fonction pour vérifier la présence d'un binaire et l'installer si nécessaire +install_if_missing() { + local binary_name=$1 + + if ! command -v $binary_name > /dev/null; then + echo "Le binaire '$binary_name' n'est pas présent. Tentative d'installation..." + sudo apt update + sudo apt install -y $binary_name + + # Vérifier à nouveau si l'installation a réussi + if ! command -v $binary_name > /dev/null; then + echo "Erreur : Impossible d'installer le binaire '$binary_name'." + exit 1 + fi + fi +} + +# Vérifier et installer les binaires nécessaires +install_if_missing "samba-tool" +install_if_missing "ldapsearch" + +# Vérifier le nombre d'arguments +if [ "$#" -ne 1 ]; then + echo "Usage: $0 " + exit 1 +fi + +# Nom d'utilisateur à vérifier +utilisateur="$1" + +# Récupérer le DN (Distinguished Name) de l'utilisateur +dn=$(samba-tool user show "$utilisateur" | grep "distinguishedName" | awk '{print $NF}') + +# Vérifier si l'utilisateur existe +if [ -z "$dn" ]; then + echo "L'utilisateur '$utilisateur' n'existe pas." +else + # Récupérer la valeur de userAccountControl + user_account_control=$(samba-tool user show "$utilisateur" | grep "userAccountControl" | awk '{print $NF}') + + # Récupérer la valeur de badPwdCount + bad_pwd_count=$(samba-tool user show "$utilisateur" | grep "badPwdCount" | awk '{print $NF}') + + # Récupérer la valeur de Account lockout threshold (attempts) dans la politique des mots de passe du domaine + domain_lockout_threshold=$(samba-tool domain passwordsettings show | grep "Account lockout threshold (attempts)" | awk '{print $NF}') + + # Vérifier si le compte est activé ou désactivé + if [ $((user_account_control & 2)) -eq 2 ]; then + echo "Le compte de l'utilisateur '$utilisateur' est désactivé." + + # Proposer d'activer le compte + read -p "Voulez-vous activer le compte (oui/non)? " activate_choice + if [ "$activate_choice" == "oui" ]; then + # Activer le compte + samba-tool user enable "$utilisateur" + echo "Le compte de l'utilisateur '$utilisateur' a été activé." + else + echo "Le compte de l'utilisateur '$utilisateur' reste désactivé." + fi + else + echo "Le compte de l'utilisateur '$utilisateur' est activé." + + # Vérifier si le compte est verrouillé + if [ "$bad_pwd_count" -eq "$domain_lockout_threshold" ]; then + echo "Le compte de l'utilisateur '$utilisateur' est verrouillé." + + # Proposer de déverrouiller le compte + read -p "Voulez-vous déverrouiller le compte (oui/non)? " unlock_choice + if [ "$unlock_choice" == "oui" ]; then + # Déverrouiller le compte + samba-tool user unlock "$utilisateur" + echo "Le compte de l'utilisateur '$utilisateur' a été déverrouillé." + else + echo "Le compte de l'utilisateur '$utilisateur' reste verrouillé." + fi + else + echo "Le compte de l'utilisateur '$utilisateur' n'est pas verrouillé." + fi + fi +fi diff --git a/CreateNewUser.sh b/CreateNewUser.sh new file mode 100644 index 0000000..10e70d9 --- /dev/null +++ b/CreateNewUser.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +#Prequis : apt install -y pwgen +PASS_LENGTH=12 + +# Demande à l'utilisateur de saisir le info +read -p "Entrez le Nom : " NAME +read -p "Entrez le Prenom :" PRENOM + +LOGIN=`echo $PRENOM|cut -c1`".$NAME" +PASSWORD=$(pwgen -c -n -y -s -B $PASS_LENGTH 1) + +echo "Création du nouvel utilisateur $LOGIN en cours..." +samba-tool user create $LOGIN $PASSWORD --given-name=$PRENOM --surname=$NAME +echo "Mot de passe de $PRENOM : " $PASSWORD + +#Ajout ds le groupe Administratifs par defaut +samba-tool group addmembers Administratifs $LOGIN diff --git a/DisableUserTo.sh b/DisableUserTo.sh new file mode 100644 index 0000000..d88456c --- /dev/null +++ b/DisableUserTo.sh @@ -0,0 +1,2 @@ +#!/bin/bash +samba-tool user disable $1 diff --git a/ListAllUsers.sh b/ListAllUsers.sh new file mode 100644 index 0000000..88a2571 --- /dev/null +++ b/ListAllUsers.sh @@ -0,0 +1,2 @@ +#!/bin/bash +samba-tool user list | sort | grep "." diff --git a/ListGroupTo.sh b/ListGroupTo.sh new file mode 100644 index 0000000..393286f --- /dev/null +++ b/ListGroupTo.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +samba-tool user show $1 | grep "memberOf" | cut -d ',' -f1 | cut -d ':' -f2 | cut -d '=' -f2 diff --git a/ResetPwdTo.sh b/ResetPwdTo.sh new file mode 100644 index 0000000..3589e2b --- /dev/null +++ b/ResetPwdTo.sh @@ -0,0 +1,3 @@ +#!/bin/bash +password=H3campus@2023 +samba-tool user setpassword $1 --must-change-at-next-login --newpassword=$password diff --git a/RstPwd.sh b/RstPwd.sh new file mode 100644 index 0000000..a42eeba --- /dev/null +++ b/RstPwd.sh @@ -0,0 +1,3 @@ +#!/bin/bash +password=H3campus@2023 +samba-tool user setpassword $1 --newpassword=$password