diff --git a/benutzer_anlegen/delete_group.sh b/benutzer_anlegen/delete_group.sh new file mode 100644 index 0000000..178ffeb --- /dev/null +++ b/benutzer_anlegen/delete_group.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +source ./data_utils.sh + +# Gruppenliste erstellen (nur aktive Gruppen, außer fileserver) +group_list=$(awk -F: '/^\[groups\]/ {flag=1; next} /^\[users\]/ {flag=0} flag && $3 == "aktiv" && $1 != "fileserver" {print $1}' encrypted_users.list) + +if [[ -z "$group_list" ]]; then + dialog --msgbox "Keine Gruppen verfügbar, die gelöscht werden können." 10 40 + exit 1 +fi + +# Konvertieren der Gruppenliste für die Übergabe an dialog +dialog_group_list="" +while read -r group; do + dialog_group_list="$dialog_group_list $group ''" +done <<< "$group_list" + +# Gruppe auswählen +group_name=$(dialog --menu "Wählen Sie die Gruppe, die gelöscht werden soll:" 15 50 8 $dialog_group_list 3>&1 1>&2 2>&3) + +if [[ -z "$group_name" ]]; then + dialog --msgbox "Abbruch. Keine Gruppe ausgewählt." 10 40 + exit 1 +fi + +# Gruppe als gelöscht markieren +sed -i "/^\[groups\]/,/^\[users\]/s/^$group_name:[^:]*:[^:]*$/$group_name:geloescht/" encrypted_users.list +dialog --msgbox "Die Gruppe '$group_name' wurde markiert und wird beim nächsten Synchronisieren gelöscht." 10 40 + diff --git a/benutzer_anlegen/delete_user.sh b/benutzer_anlegen/delete_user.sh new file mode 100644 index 0000000..41bfca4 --- /dev/null +++ b/benutzer_anlegen/delete_user.sh @@ -0,0 +1,27 @@ +#!/bin/bash +source ./data_utils.sh + +delete_user() { + initialize_user_list + + # Benutzerliste abrufen + 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, der gelöscht werden soll:" 20 50 10 $users 3>&1 1>&2 2>&3) + if [[ -z "$username" ]]; then + dialog --msgbox "Kein Benutzer ausgewählt." 10 30 + return + fi + + # Benutzer als gelöscht markieren + sed -i "s|^$username:.*|$username::geloescht|" "$USER_LIST" + + dialog --msgbox "Benutzer $username wurde erfolgreich gelöscht." 10 30 +} + +delete_user diff --git a/benutzer_anlegen/deploy_changes.sh b/benutzer_anlegen/deploy_changes.sh new file mode 100644 index 0000000..91df3c1 --- /dev/null +++ b/benutzer_anlegen/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/benutzer_anlegen/encrypted_users.list b/benutzer_anlegen/encrypted_users.list new file mode 100644 index 0000000..a697926 --- /dev/null +++ b/benutzer_anlegen/encrypted_users.list @@ -0,0 +1,8 @@ +[users] +sebastian.zell:2000:U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc=:fileserver,familie,buero:aktiv + +[groups] +fileserver:aktiv +buero:501:aktiv +familie:502:aktiv +privat:503:aktiv diff --git a/benutzer_anlegen/generate_remote_script.sh b/benutzer_anlegen/generate_remote_script.sh new file mode 100644 index 0000000..d685038 --- /dev/null +++ b/benutzer_anlegen/generate_remote_script.sh @@ -0,0 +1,89 @@ +#!/bin/bash +set -euo pipefail + +REMOTE_SCRIPT="remote_apply_changes.sh" + +# Skriptvorlage mit Debugging +cat << 'EOF' > "$REMOTE_SCRIPT" +#!/bin/bash +set -euo pipefail +exec > >(tee -a /var/log/remote_apply_changes.log) 2>&1 +set -x + +# Sicherstellen, dass die erforderlichen Gruppen existieren +create_group_if_not_exists() { + local group_name="\$1" + local group_gid="\$2" + if ! getent group "\$group_name" > /dev/null; then + echo "Erstelle Gruppe: \$group_name mit GID \$group_gid" + groupadd --gid "\$group_gid" "\$group_name" + else + echo "Gruppe \$group_name existiert bereits." + fi +} + +# Sicherstellen, dass der Benutzer existiert +create_or_update_user() { + local username="\$1" + local uid="\$2" + local password="\$3" + local primary_group="\$4" + local additional_groups="\$5" + + if id "\$username" > /dev/null 2>&1; then + echo "Aktualisiere Benutzer: \$username" + usermod --uid "\$uid" --gid "\$primary_group" --groups "\$additional_groups" "\$username" + else + echo "Erstelle Benutzer: \$username" + useradd --uid "\$uid" --gid "\$primary_group" --groups "\$additional_groups" "\$username" + fi + echo "\$username:\$password" | chpasswd +} + +# Gruppenänderungen anwenden +apply_group_changes() { + while read -r group_entry || [[ -n "\$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 + create_group_if_not_exists "\$group_name" "\$group_gid" + 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 < <(grep -E '^[^#]' /etc/encrypted_users.list | awk '/^\[groups\]/ {skip=1; next} skip {print}') +} + +# Benutzeränderungen anwenden +apply_user_changes() { + while read -r user_entry || [[ -n "\$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" + create_or_update_user "\$username" "\$uid" "\$password" "\$primary_group" "\$groups" + elif [[ "\$status" == "geloescht" ]]; then + if id "\$username" > /dev/null 2>&1; then + echo "Lösche Benutzer: \$username" + userdel -r "\$username" + fi + fi + done < <(grep -E '^[^#]' /etc/encrypted_users.list | awk '/^\[users\]/ {skip=1; next} skip {print}') +} + +echo "Beginne Änderungen auf dem Server..." +apply_group_changes +apply_user_changes +echo "Änderungen abgeschlossen." +EOF + +chmod +x "$REMOTE_SCRIPT" +echo "Remote-Skript $REMOTE_SCRIPT erfolgreich erstellt."