diff --git a/benutzer_anlegen/initialize_user_list.sh b/benutzer_anlegen/initialize_user_list.sh new file mode 100644 index 0000000..d228bb9 --- /dev/null +++ b/benutzer_anlegen/initialize_user_list.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +cat >encrypted_users.list </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." + diff --git a/benutzer_anlegen/remove_user_from_group.sh b/benutzer_anlegen/remove_user_from_group.sh new file mode 100644 index 0000000..f386f96 --- /dev/null +++ b/benutzer_anlegen/remove_user_from_group.sh @@ -0,0 +1,52 @@ +#!/bin/bash +source ./data_utils.sh + +remove_user_from_group() { + initialize_user_list + + # Benutzer auswählen + users=$(read_users | grep ":aktiv$" | awk -F':' '{print $1 " " $1}') + if [[ -z "$users" ]]; then + dialog --msgbox "Keine aktiven Benutzer verfügbar." 10 40 + return + fi + + username=$(dialog --menu "Benutzer auswählen, um ihn aus einer Gruppe zu entfernen:" 20 50 10 $users 3>&1 1>&2 2>&3) + if [[ -z "$username" ]]; then + dialog --msgbox "Kein Benutzer ausgewählt." 10 40 + return + fi + + # Aktuelle Gruppenzugehörigkeiten des Benutzers abrufen + existing_user=$(grep "^$username:" <(read_users)) + current_groups=$(echo "$existing_user" | cut -d':' -f4) + + # Prüfen, ob der Benutzer nur in "fileserver" ist + if [[ "$current_groups" == "fileserver" ]]; then + dialog --msgbox "Benutzer $username kann nicht aus der Gruppe 'fileserver' entfernt werden." 10 40 + return + fi + + # Gruppenliste anzeigen, ohne "fileserver" + selectable_groups=$(echo "$current_groups" | tr ',' '\n' | grep -v "fileserver" | awk '{print $1 " " $1}') + if [[ -z "$selectable_groups" ]]; then + dialog --msgbox "Benutzer $username ist nur in der Gruppe 'fileserver'." 10 40 + return + fi + + group_to_remove=$(dialog --menu "Gruppe auswählen, aus der $username entfernt werden soll:" 20 50 10 $selectable_groups 3>&1 1>&2 2>&3) + if [[ -z "$group_to_remove" ]]; then + dialog --msgbox "Keine Gruppe ausgewählt." 10 40 + return + fi + + # Gruppe aus der Liste entfernen + updated_groups=$(echo "$current_groups" | tr ',' '\n' | grep -v "^$group_to_remove$" | tr '\n' ',' | sed 's/,$//') + + # Daten in der Datei aktualisieren + sed -i "s|^$username:.*|$username:$(echo "$existing_user" | cut -d':' -f2-3):$updated_groups:aktiv|" "$USER_LIST" + + dialog --msgbox "Benutzer $username wurde erfolgreich aus der Gruppe $group_to_remove entfernt." 10 40 +} + +remove_user_from_group