From b6931842272c14f416350b809cbe950f9b71fb35 Mon Sep 17 00:00:00 2001 From: "sebastian.zell" Date: Mon, 30 Dec 2024 01:41:04 +0000 Subject: [PATCH] Dateien nach "/" hochladen --- add_group.sh | 22 ++++++++++++ add_user.sh | 51 +++++++++++++++++++++++++++ add_user_to_group.sh | 56 ++++++++++++++++++++++++++++++ deploy_changes.sh | 48 +++++++++++++++++++++++++ remote_apply_changes.sh | 77 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 254 insertions(+) create mode 100644 add_group.sh create mode 100644 add_user.sh create mode 100644 add_user_to_group.sh create mode 100644 deploy_changes.sh create mode 100644 remote_apply_changes.sh diff --git a/add_group.sh b/add_group.sh new file mode 100644 index 0000000..52355e2 --- /dev/null +++ b/add_group.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +source ./data_utils.sh + +group_name=$(dialog --inputbox "Geben Sie den Namen der neuen Gruppe ein:" 10 40 3>&1 1>&2 2>&3) +[[ -z "$group_name" ]] && exit 1 + +# Prüfen, ob die Gruppe bereits existiert +if grep -q "^$group_name:" <(awk '/^\[groups\]/ {flag=1; next} /^\[users\]/ {flag=0} flag' encrypted_users.list); then + # Wenn die Gruppe gelöscht ist, reaktivieren + sed -i "/^\[groups\]/,/^\[users\]/s/^$group_name:.*:geloescht$/$group_name:$gid:aktiv/" encrypted_users.list + dialog --msgbox "Die Gruppe '$group_name' wurde reaktiviert." 10 40 + exit 0 +fi + +# Berechnung der nächsten GID (beginnend ab 501) +max_gid=$(awk '/^\[groups\]/ {flag=1; next} /^\[users\]/ {flag=0} flag' encrypted_users.list | awk -F: '{print $2}' | sort -n | tail -n1) +next_gid=$((max_gid > 500 ? max_gid + 1 : 501)) + +# Gruppe in der Datendatei speichern +echo "$group_name:$next_gid:aktiv" >>encrypted_users.list +dialog --msgbox "Gruppe '$group_name' mit GID '$next_gid' hinzugefügt." 10 40 diff --git a/add_user.sh b/add_user.sh new file mode 100644 index 0000000..105d8f7 --- /dev/null +++ b/add_user.sh @@ -0,0 +1,51 @@ +#!/bin/bash +source ./data_utils.sh + +add_user() { + initialize_user_list + + # Benutzername abfragen + username=$(dialog --inputbox "Benutzernamen eingeben:" 10 50 3>&1 1>&2 2>&3) + if [[ -z "$username" ]]; then + dialog --msgbox "Der Benutzername darf nicht leer sein." 10 30 + return + fi + + # Überprüfen, ob der Benutzer existiert + existing_user=$(grep "^$username:" <(read_users)) + if [[ -n "$existing_user" ]]; then + if echo "$existing_user" | grep -q ":aktiv$"; then + dialog --msgbox "Benutzer $username existiert bereits." 10 30 + return + fi + + # Benutzer ist gelöscht, wird wieder aktiviert + uid=$(echo "$existing_user" | cut -d':' -f2) + dialog --msgbox "Benutzer $username war gelöscht und wird wiederhergestellt." 10 30 + else + # Nächste verfügbare UID berechnen + uid=$(($(read_users | cut -d':' -f2 | sort -n | tail -1) + 1)) + if [[ -z "$uid" || "$uid" -lt 2000 ]]; then + uid=2000 + fi + fi + + # Passwort abfragen + password=$(dialog --insecure --passwordbox "Passwort eingeben:" 10 50 3>&1 1>&2 2>&3) + password_confirm=$(dialog --insecure --passwordbox "Passwort erneut eingeben:" 10 50 3>&1 1>&2 2>&3) + + if [[ "$password" != "$password_confirm" ]]; then + dialog --msgbox "Passwörter stimmen nicht überein." 10 30 + return + fi + + # Passwort verschlüsseln + encrypted_password=$(echo "$password" | openssl enc -aes-256-cbc -salt -base64 -pass pass:my_secret_key) + + # Benutzer hinzufügen oder wiederherstellen + add_user_to_file "$username" "$uid" "$encrypted_password" "fileserver" "aktiv" + + dialog --msgbox "Benutzer $username wurde erfolgreich hinzugefügt." 10 30 +} + +add_user diff --git a/add_user_to_group.sh b/add_user_to_group.sh new file mode 100644 index 0000000..16516a6 --- /dev/null +++ b/add_user_to_group.sh @@ -0,0 +1,56 @@ +#!/bin/bash +source ./data_utils.sh + +add_user_to_group() { + initialize_user_list + + # Benutzerliste abrufen (nur aktive Benutzer) + users=$(read_users | grep ":aktiv$" | awk -F':' '{print $1 " " $1}') + if [[ -z "$users" ]]; then + dialog --msgbox "Keine aktiven Benutzer verfügbar." 10 30 + return + fi + + # Benutzer grafisch auswählen + username=$(dialog --menu "Benutzer auswählen:" 20 50 10 $users 3>&1 1>&2 2>&3) + if [[ -z "$username" ]]; then + dialog --msgbox "Kein Benutzer ausgewählt." 10 30 + return + fi + + # Gruppenliste abrufen (nur aktive Gruppen) + groups=$(read_groups | grep ":aktiv$" | awk -F':' '{print $1 " " $1}') + if [[ -z "$groups" ]]; then + dialog --msgbox "Keine aktiven Gruppen verfügbar." 10 30 + return + fi + + # Gruppe grafisch auswählen + groupname=$(dialog --menu "Gruppe auswählen, zu der $username hinzugefügt werden soll:" 20 50 10 $groups 3>&1 1>&2 2>&3) + if [[ -z "$groupname" ]]; then + dialog --msgbox "Keine Gruppe ausgewählt." 10 30 + return + fi + + # Benutzer zur Gruppe hinzufügen + existing_user=$(grep "^$username:" <(read_users)) + current_groups=$(echo "$existing_user" | cut -d':' -f4) + + # Überprüfen, ob Benutzer bereits in der Gruppe ist + if [[ "$current_groups" == *"$groupname"* ]]; then + dialog --msgbox "Benutzer $username ist bereits in der Gruppe $groupname." 10 30 + return + fi + + # GID der Gruppe abrufen + group_entry=$(grep "^$groupname:" <(read_groups)) + group_gid=$(echo "$group_entry" | cut -d':' -f2) + + # Aktualisieren der Gruppenzugehörigkeit + updated_groups="${current_groups},${groupname}" + sed -i "s|^$username:.*|$username:$(echo "$existing_user" | cut -d':' -f2-3):$updated_groups:aktiv|" "$USER_LIST" + + dialog --msgbox "Benutzer $username wurde erfolgreich zur Gruppe $groupname hinzugefügt." 10 30 +} + +add_user_to_group diff --git a/deploy_changes.sh b/deploy_changes.sh new file mode 100644 index 0000000..91df3c1 --- /dev/null +++ b/deploy_changes.sh @@ -0,0 +1,48 @@ +#!/bin/bash +source ./data_utils.sh + +deploy_changes_to_remote() { + # Schritt 1: Zielserver-Informationen abfragen + TARGET_SERVER=$(dialog --inputbox "Geben Sie die IP-Adresse des Zielservers ein:" 10 50 3>&1 1>&2 2>&3) + TARGET_USER="root" + TARGET_PASSWORD=$(dialog --insecure --passwordbox "Geben Sie das Passwort für $TARGET_USER@$TARGET_SERVER ein:" 10 50 3>&1 1>&2 2>&3) + + if [[ -z "$TARGET_SERVER" || -z "$TARGET_PASSWORD" ]]; then + dialog --msgbox "IP-Adresse oder Passwort fehlt. Vorgang abgebrochen." 10 30 + return + fi + + # Schritt 2: SSH-Schlüsselpaar prüfen oder erstellen + if [[ ! -f "$HOME/.ssh/id_rsa" ]]; then + dialog --msgbox "SSH-Schlüssel wird erstellt..." 10 30 + ssh-keygen -t rsa -b 4096 -N "" -f "$HOME/.ssh/id_rsa" + fi + + # Schritt 3: Öffentlichen Schlüssel auf dem Zielserver installieren + dialog --msgbox "Installiere öffentlichen Schlüssel auf $TARGET_SERVER..." 10 30 + sshpass -p "$TARGET_PASSWORD" ssh-copy-id -i "$HOME/.ssh/id_rsa.pub" "$TARGET_USER@$TARGET_SERVER" + + # Verbindung testen + ssh -o BatchMode=yes "$TARGET_USER@$TARGET_SERVER" "echo 'SSH-Zugang ohne Passwort erfolgreich!'" &>/dev/null + if [[ $? -ne 0 ]]; then + dialog --msgbox "Fehler bei der SSH-Konfiguration. Bitte prüfen." 10 30 + return + fi + dialog --msgbox "SSH-Zugang ohne Passwort erfolgreich." 10 30 + + # Schritt 4: Generiertes Skript erstellen + remote_script="remote_apply_changes.sh" + ./generate_remote_script.sh + + # Schritt 5: Skript auf Zielserver hochladen + dialog --msgbox "Übertrage Skript auf den Zielserver..." 10 30 + scp "$remote_script" "$TARGET_USER@$TARGET_SERVER:/tmp" + + # Schritt 6: Skript auf Zielserver ausführen + dialog --msgbox "Führe das Skript auf dem Zielserver aus..." 10 30 + ssh "$TARGET_USER@$TARGET_SERVER" "bash /tmp/$remote_script" + + dialog --msgbox "Änderungen wurden erfolgreich auf $TARGET_SERVER angewendet." 10 30 +} + +deploy_changes_to_remote diff --git a/remote_apply_changes.sh b/remote_apply_changes.sh new file mode 100644 index 0000000..a3b9633 --- /dev/null +++ b/remote_apply_changes.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +set -euo pipefail + +USER_LIST="/tmp/encrypted_users.list" +DECRYPTION_KEY="IhrGeheimerSchlüssel" + +# Funktion: Datei prüfen +check_user_list_file() { + if [[ ! -f "$USER_LIST" ]]; then + echo "Benutzerliste $USER_LIST existiert nicht. Abbruch." + exit 1 + fi +} + +apply_group_changes() { + echo "Beginne Gruppenänderungen..." + while read -r group_entry; do + group_name=$(echo "$group_entry" | cut -d: -f1) + group_gid=$(echo "$group_entry" | cut -d: -f2) + group_status=$(echo "$group_entry" | cut -d: -f3) + + if [[ "$group_status" == "aktiv" ]]; then + if ! getent group "$group_name" &>/dev/null; then + echo "Erstelle Gruppe: $group_name mit GID $group_gid" + groupadd --gid "$group_gid" "$group_name" + fi + elif [[ "$group_status" == "geloescht" ]]; then + if getent group "$group_name" &>/dev/null; then + echo "Lösche Gruppe: $group_name" + groupdel "$group_name" + fi + fi + done < <(awk '/^\[groups\]/ {skip=1; next} skip {print}' "$USER_LIST") +} + +apply_user_changes() { + echo "Beginne Benutzeränderungen..." + while read -r user_entry; do + username=$(echo "$user_entry" | cut -d: -f1) + uid=$(echo "$user_entry" | cut -d: -f2) + password=$(echo "$user_entry" | cut -d: -f3) + groups=$(echo "$user_entry" | cut -d: -f4) + status=$(echo "$user_entry" | cut -d: -f5) + + if [[ "$status" == "aktiv" ]]; then + primary_group="fileserver" + additional_groups=$(echo "$groups" | tr ',' '\n' | grep -v "$primary_group" | tr '\n' ',' | sed 's/,$//') + + if ! id "$username" &>/dev/null; then + echo "Erstelle Benutzer: $username" + useradd --uid "$uid" --gid "$primary_group" --groups "$additional_groups" "$username" + + # Passwort setzen mit chpasswd + echo "$username:$(echo "$password" | openssl enc -d -aes-256-cbc -base64 -pass pass:"$DECRYPTION_KEY")" | chpasswd + else + echo "Benutzer $username existiert bereits. Aktualisiere Gruppen und Passwort..." + usermod -g "$primary_group" -G "$additional_groups" "$username" + + # Passwort aktualisieren + echo "$username:$(echo "$password" | openssl enc -d -aes-256-cbc -base64 -pass pass:"$DECRYPTION_KEY")" | chpasswd + fi + elif [[ "$status" == "geloescht" ]]; then + if id "$username" &>/dev/null; then + echo "Lösche Benutzer: $username" + userdel -r "$username" + fi + fi + done < <(awk '/^\[users\]/ {skip=1; next} skip {print}' "$USER_LIST") +} + +echo "Beginne Änderungen auf dem Server..." +check_user_list_file +apply_group_changes +apply_user_changes +echo "Änderungen abgeschlossen." +