#!/bin/bash function sessions_viewer() { echo -e "Ci dessous les utilisateurs disponibles sur le bastion.\nVeillez sélectionner celui dont vous souhaitez visionner les accès :" Available_Users=$(find /home/. -maxdepth 1 -type d | grep -v "\.$" | cut -d "/" -f 4) users_counter=1 declare -A users_map while read -r line; do user="${line}" users_map[${users_counter}]="${user}" echo "${users_counter}) ${user}" users_counter=$((users_counter + 1)) done <<<"${Available_Users}" echo "${users_counter}) Tapez 'quit' ou ${users_counter} pour revenir au menu précédent." read -r -p "Votre choix (1-${users_counter}): " choice if [[ ${choice} == "quit" ]] || [[ ${choice} == "${users_counter}" ]]; then main_menu elif [[ -z ${choice} ]] || [[ -z ${users_map[${choice}]} ]]; then echo "Sélection invalide." else local selected_option selected_option="${users_map[${choice}]}" while true; do Available_Sessions=$(find /home/"${selected_option}"/. -maxdepth 1 -type f -name "*.ttyrec" | grep -v "\.$" | cut -d "/" -f 5) echo "Sélectionnez une session de cet utilisateur que vous souhaitez visionner :" sessions_counter=1 declare -A sessions_map while read -r line; do session_name="${line}" sessions_map[${sessions_counter}]="${session_name}" echo "${sessions_counter}) ${session_name}" sessions_counter=$((sessions_counter + 1)) done <<<"${Available_Sessions}" echo "${sessions_counter}) Tapez 'quit' ou ${sessions_counter} pour vous revenir au choix d'utilisateur." read -r -p "Votre choix (1-${sessions_counter}): " choice if [[ ${choice} == "quit" ]] || [[ ${choice} == "${sessions_counter}" ]]; then sessions_viewer elif [[ -z ${choice} ]] || [[ -z ${sessions_map[${choice}]} ]]; then echo "Sélection invalide." else local selected_session selected_session="${sessions_map[${choice}]}" ttyplay /home/"${selected_option}"/"${selected_session}" fi done fi while true; do sessions_viewer done } function servers_access_control() { echo -e "Choisissez une option d'administration des serveurs ci dessous :" echo -e "1) Ajout de fichiers clés privées/mots de passes pour l'authentification aux serveurs distants.\n2) Modification des droits d'accès aux serveurs.\n3) Tapez 'quit' ou 3 pour revenir au menu précédent." read -r -p "Votre choix (1-3): " choice case "${choice}" in "1") Authorization_Files_List=$(find /opt/public/servers/. -type f ! -name 'authorized_servers.txt' | cut -d "/" -f 6) echo -e "Le ficher d'authentification qui sera crée ou modifié sera placé dans le répertoire \"/opt/public/servers/\" du bastion.\nle nom de ce dernier ne doit pas comporter de \"/\", être vide ou être égal à \"authorized_servers.txt\"." echo -e "Ci dessous la liste des fichiers d'authentification existants :\n${Authorization_Files_List}" read -r -p 'Entrez le nom du fichier: ' File_Name if [[ $(echo "${File_Name}" | grep -o "/") == "/" ]] || [[ $(echo "${File_Name}" | grep -o "*") == "*" ]] || [[ -z ${File_Name} ]] || [[ ${File_Name} == "authorized_servers.txt" ]]; then echo 'Le nom du fichier ne doit pas contenir les caractères "/" ou "*", être vide ou ce nommer "authorized_servers.txt". Veuillez modifier ce dernier.' else echo "Assurez vous que le fichier créé ou modifié comporte bien uniquement la clé privée ou le mot de passe nécessaire à la connexion." sleep 5s sudo nano /opt/public/servers/"${File_Name}" if [[ $(cat "/opt/public/servers/${File_Name}") == "" ]]; then echo "Le fichier modifié \"${File_Name}\" est vide. Ce dernier sera supprimé." rm -rf /opt/public/servers/"${File_Name}" fi fi ;; "2") echo -e "Veuillez bien vérifier la syntaxe de votre configuration avant de valider cette dernière.\nPour plus d'informations, consultez la documentation de Monosphere." sleep 5s sudo nano /opt/public/servers/authorized_servers.txt ;; "3" | "quit") main_menu ;; *) echo "Sélection invalide." ;; esac while true; do servers_access_control done } function admin_rights_control() { echo -e "Veuillez bien vérifier la syntaxe de votre configuration avant de valider cette dernière.\nPour plus d'informations, consultez la documentation de Monosphere." sleep 5s sudo nano /opt/public/rights/admin_rights.txt } function main_menu() { ADMIN_RIGHTS_PATH="opt/public/rights" ADMIN_RIGHTS_FILE="/${ADMIN_RIGHTS_PATH}/admin_rights.txt" CONNECTED_ADMIN="$(whoami)" ADMIN_RIGHTS=$(awk -v user="${CONNECTED_ADMIN}" ' { split($3, users, ","); for (i in users) { if (users[i] == user) { print $0; } } }' "${ADMIN_RIGHTS_FILE}") if [[ -z ${ADMIN_RIGHTS} ]]; then echo -e "Vous n'avez aucune autorisation d'administration.\nVous pouvez cependant vous connecter aux serveurs dont l'accès vous est autorisé." fi echo "Veuillez sélectionner une option d'administration :" counter=1 declare -A adminrights_map while read -r line; do admin_right=$(echo "${line}" | cut -d ' ' -f 1) admin_right_pretty_name=$(echo "${line}" | cut -d ' ' -f 2) adminrights_map[${counter}]="${admin_right} ${admin_right_pretty_name}" echo "${counter}) ${admin_right_pretty_name}" counter=$((counter + 1)) done <<<"${ADMIN_RIGHTS}" echo "${counter}) Tapez 'servers_access' ou ${counter} pour vous connecter a un serveur." counter=$((counter + 1)) echo "${counter}) Tapez 'quit' ou ${counter} pour vous déconnecter." read -r -p "Votre choix (1-${counter}): " choice if [[ ${choice} == "servers_access" ]] || [[ ${choice} == "$((counter - 1))" ]]; then bash /opt/public/scripts/server_menu.sh elif [[ ${choice} == "quit" ]] || [[ ${choice} == "${counter}" ]]; then echo "Déconnexion du bastion." exit 0 elif [[ -z ${choice} ]] || [[ -z ${adminrights_map[${choice}]} ]]; then echo "Sélection invalide." else local selected_option selected_option="${adminrights_map[${choice}]}" case "$(echo "${selected_option}" | cut -d ' ' -f 1)" in "sessionswatch_admins") sessions_viewer ;; "serverscontrol_admins") servers_access_control ;; # # "usercontrol_admins") # # ;; # "adminscontrol_admins") admin_rights_control ;; # # "cluster_admins") # # ;; *) echo -e "Un problème de configuration a été détecté sur \nles options du droit administrateur sélectionné.\nVeuillez contacter votre administrateur." ;; esac fi while true; do main_menu done } main_menu