diff --git a/benutzer_anlegen/apply_changes.sh b/benutzer_anlegen/apply_changes.sh new file mode 100644 index 0000000..25b7396 --- /dev/null +++ b/benutzer_anlegen/apply_changes.sh @@ -0,0 +1,143 @@ +#!/bin/bash +set -euo pipefail + +# Debugging aktivieren +DEBUG_LOG="debug_apply_changes.log" +exec > >(tee -a "$DEBUG_LOG") 2>&1 +set -x + +source ./data_utils.sh + +apply_changes_to_system() { + initialize_user_list + + echo "Starte Änderungen am System..." | tee -a "$DEBUG_LOG" + + # GID der Gruppe "fileserver" ermitteln oder anlegen + fileserver_gid=$(getent group fileserver | cut -d':' -f3 || echo "") + if [[ -z "$fileserver_gid" ]]; then + echo "Erstelle primäre Gruppe 'fileserver' mit GID 1000" | tee -a "$DEBUG_LOG" + groupadd --gid 1000 fileserver + fileserver_gid=1000 + fi + + # Vorschau vorbereiten + changes_preview="" + group_changes_preview="" + user_changes_preview="" + + # Gruppenänderungen analysieren + echo "Analysiere Gruppenänderungen..." | tee -a "$DEBUG_LOG" + 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 + if getent group "$group_name" > /dev/null; then + existing_gid=$(getent group "$group_name" | cut -d':' -f3) + if [[ "$existing_gid" != "$group_gid" ]]; then + group_changes_preview+="Korrigiere GID der Gruppe $group_name: $existing_gid -> $group_gid\n" + fi + else + group_changes_preview+="Erstelle Gruppe $group_name mit GID $group_gid\n" + fi + elif [[ "$group_status" == "geloescht" && "$group_name" != "fileserver" ]]; then + if getent group "$group_name" > /dev/null; then + group_changes_preview+="Lösche Gruppe $group_name\n" + fi + fi + done < <(read_groups) + + # Benutzeränderungen analysieren + echo "Analysiere Benutzeränderungen..." | tee -a "$DEBUG_LOG" + while read -r user_entry || [[ -n "$user_entry" ]]; do + user_name=$(echo "$user_entry" | cut -d':' -f1) + user_uid=$(echo "$user_entry" | cut -d':' -f2) + user_password=$(echo "$user_entry" | cut -d':' -f3) + user_groups=$(echo "$user_entry" | cut -d':' -f4 | tr ',' ' ') + user_status=$(echo "$user_entry" | cut -d':' -f5) + + if [[ "$user_status" == "aktiv" ]]; then + if id "$user_name" > /dev/null 2>&1; then + user_changes_preview+="Aktualisiere Benutzer $user_name\n" + else + user_changes_preview+="Erstelle Benutzer $user_name mit UID $user_uid und Gruppen $user_groups\n" + fi + elif [[ "$user_status" == "geloescht" ]]; then + if id "$user_name" > /dev/null 2>&1; then + user_changes_preview+="Lösche Benutzer $user_name\n" + fi + fi + done < <(read_users) + + # Vorschau anzeigen + changes_preview="Gruppenänderungen:\n$group_changes_preview\nBenutzeränderungen:\n$user_changes_preview" + dialog --msgbox "$changes_preview" 20 70 + + # Bestätigung abfragen + dialog --yesno "Möchten Sie die Änderungen anwenden?" 10 30 + if [[ $? -ne 0 ]]; then + echo "Änderungen abgebrochen." | tee -a "$DEBUG_LOG" + return + fi + + echo "Wende Änderungen im System an..." | tee -a "$DEBUG_LOG" + + # Gruppenänderungen anwenden + echo "Wende Gruppenänderungen an..." | tee -a "$DEBUG_LOG" + 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 + if getent group "$group_name" > /dev/null; then + existing_gid=$(getent group "$group_name" | cut -d':' -f3) + if [[ "$existing_gid" != "$group_gid" ]]; then + echo "Korrigiere GID der Gruppe $group_name: $existing_gid -> $group_gid" | tee -a "$DEBUG_LOG" + groupmod --gid "$group_gid" "$group_name" + fi + else + echo "Erstelle Gruppe $group_name mit GID $group_gid" | tee -a "$DEBUG_LOG" + groupadd --gid "$group_gid" "$group_name" + fi + elif [[ "$group_status" == "geloescht" && "$group_name" != "fileserver" ]]; then + if getent group "$group_name" > /dev/null; then + echo "Lösche Gruppe $group_name" | tee -a "$DEBUG_LOG" + groupdel "$group_name" + fi + fi + done < <(read_groups) + + # Benutzeränderungen anwenden + echo "Wende Benutzeränderungen an..." | tee -a "$DEBUG_LOG" + while read -r user_entry || [[ -n "$user_entry" ]]; do + user_name=$(echo "$user_entry" | cut -d':' -f1) + user_uid=$(echo "$user_entry" | cut -d':' -f2) + user_password=$(echo "$user_entry" | cut -d':' -f3) + user_groups=$(echo "$user_entry" | cut -d':' -f4 | tr ',' ' ') + user_status=$(echo "$user_entry" | cut -d':' -f5) + + if [[ "$user_status" == "aktiv" ]]; then + if id "$user_name" > /dev/null 2>&1; then + echo "Aktualisiere Benutzer $user_name" | tee -a "$DEBUG_LOG" + usermod --uid "$user_uid" --gid "$fileserver_gid" --groups "$(echo "$user_groups" | tr ' ' ',')" "$user_name" + echo "$user_name:$(echo "$user_password" | openssl enc -aes-256-cbc -d -base64 -k "$DECRYPTION_KEY")" | chpasswd + else + echo "Erstelle Benutzer $user_name mit UID $user_uid und Gruppen $user_groups" | tee -a "$DEBUG_LOG" + useradd --uid "$user_uid" --gid "$fileserver_gid" --groups "$(echo "$user_groups" | tr ' ' ',')" "$user_name" + echo "$user_name:$(echo "$user_password" | openssl enc -aes-256-cbc -d -base64 -k "$DECRYPTION_KEY")" | chpasswd + fi + elif [[ "$user_status" == "geloescht" ]]; then + if id "$user_name" > /dev/null 2>&1; then + echo "Lösche Benutzer $user_name" | tee -a "$DEBUG_LOG" + userdel -r "$user_name" + fi + fi + done < <(read_users) + + echo "Änderungen erfolgreich angewendet." | tee -a "$DEBUG_LOG" +} + +apply_changes_to_system diff --git a/benutzer_anlegen/apply_changes_to_remote_server.sh b/benutzer_anlegen/apply_changes_to_remote_server.sh new file mode 100644 index 0000000..215ba67 --- /dev/null +++ b/benutzer_anlegen/apply_changes_to_remote_server.sh @@ -0,0 +1,109 @@ +#!/bin/bash + +# Variablen +REMOTE_IP="" +REMOTE_USER="root" +REMOTE_PASSWORD="" +REMOTE_SCRIPT="remote_apply_changes.sh" +USER_LIST="encrypted_users.list" +FILES_GROUP="fileserver" +FILES_GROUP_GID=1000 + +# Funktion: Abhängigkeiten prüfen +check_dependencies() { + echo "Prüfe, ob alle Abhängigkeiten installiert sind..." + local dependencies=('ssh' 'sshpass' 'scp' 'openssl' 'dialog') + for dep in "${dependencies[@]}"; do + if ! command -v "$dep" &>/dev/null; then + echo "Fehler: $dep ist nicht installiert. Bitte installieren." + exit 1 + fi + done + echo "Alle Abhängigkeiten sind installiert." +} + +# Funktion: SSH-Verbindung testen +test_ssh_connection() { + echo "Prüfe Verbindung zu $REMOTE_USER@$REMOTE_IP..." + ssh -o BatchMode=yes -o ConnectTimeout=5 "$REMOTE_USER@$REMOTE_IP" "exit" &>/dev/null + if [[ $? -eq 0 ]]; then + echo "Schlüssel-basierte Verbindung erfolgreich." + return 0 + else + echo "Schlüssel-basierte Verbindung fehlgeschlagen. Versuche Passwort-basierte Verbindung..." + sshpass -p "$REMOTE_PASSWORD" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 "$REMOTE_USER@$REMOTE_IP" "exit" &>/dev/null + if [[ $? -eq 0 ]]; then + echo "Passwort-basierte SSH-Verbindung erfolgreich." + return 1 + else + echo "Fehler: Keine Verbindung möglich. Bitte prüfen Sie die Zugangsdaten." + exit 1 + fi + fi +} + +# Funktion: Benutzer "fileserver" anlegen +ensure_fileserver_user() { + echo "Prüfe, ob die Gruppe $FILES_GROUP mit GID $FILES_GROUP_GID existiert..." + ssh "$REMOTE_USER@$REMOTE_IP" "getent group $FILES_GROUP || groupadd -g $FILES_GROUP_GID $FILES_GROUP" || { + echo "Fehler beim Anlegen der Gruppe $FILES_GROUP auf dem entfernten Server." + exit 1 + } + echo "Gruppe $FILES_GROUP mit GID $FILES_GROUP_GID erfolgreich geprüft/angelegt." +} + +# Funktion: SSH-Schlüssel installieren +install_ssh_key() { + echo "Prüfe SSH-Schlüssel..." + if [[ ! -f ~/.ssh/id_rsa ]]; then + echo "SSH-Schlüssel nicht gefunden. Erstelle neuen Schlüssel..." + ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa + fi + + echo "Installiere öffentlichen Schlüssel auf dem entfernten Server..." + sshpass -p "$REMOTE_PASSWORD" ssh-copy-id -i ~/.ssh/id_rsa.pub "$REMOTE_USER@$REMOTE_IP" + echo "SSH-Schlüssel erfolgreich installiert." +} + +# Funktion: Dateien übertragen und Skript ausführen +execute_remote_script() { + echo "Übertrage Skript und Benutzerliste auf den entfernten Server..." + scp "$REMOTE_SCRIPT" "$USER_LIST" "$REMOTE_USER@$REMOTE_IP:/tmp" || { + echo "Fehler: Dateien konnten nicht übertragen werden." + exit 1 + } + + echo "Führe Skript auf dem entfernten Server aus..." + ssh "$REMOTE_USER@$REMOTE_IP" "bash /tmp/$REMOTE_SCRIPT" || { + echo "Fehler beim Ausführen des Remote-Skripts. Überprüfen Sie die Logs auf dem entfernten Server." + exit 1 + } + echo "Änderungen erfolgreich auf dem entfernten Server angewendet." +} + +# Hauptlogik +main() { + # Eingabe der Remote-Daten + REMOTE_IP=$(dialog --inputbox "Geben Sie die IP des entfernten Servers ein:" 10 50 3>&1 1>&2 2>&3) + REMOTE_PASSWORD=$(dialog --passwordbox "Geben Sie das Passwort für $REMOTE_USER@$REMOTE_IP ein:" 10 50 3>&1 1>&2 2>&3) + + # Überprüfen der Abhängigkeiten + check_dependencies + + # SSH-Verbindung testen und Schlüssel ggf. installieren + if test_ssh_connection; then + echo "Schlüssel-basierte Verbindung erfolgreich." + else + echo "Passwort-basierte Verbindung erfolgreich. Installiere SSH-Schlüssel..." + install_ssh_key + fi + + # Benutzer fileserver anlegen + ensure_fileserver_user + + # Dateien übertragen und Remote-Skript ausführen + execute_remote_script + echo "Alle Schritte erfolgreich abgeschlossen!" +} + +main diff --git a/benutzer_anlegen/create_user_list.sh b/benutzer_anlegen/create_user_list.sh new file mode 100644 index 0000000..c169737 --- /dev/null +++ b/benutzer_anlegen/create_user_list.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +source ./data_utils.sh + +# Abfrage des Verschlüsselungsschlüssels +get_encryption_key() { + while true; do + key=$(dialog --insecure --passwordbox "Bitte geben Sie den Verschlüsselungsschlüssel ein:" 10 50 3>&1 1>&2 2>&3) + exit_status=$? + if [[ $exit_status -ne 0 ]]; then + dialog --msgbox "Abbruch! Kein Schlüssel eingegeben." 10 50 + exit 1 + fi + + # Zweite Abfrage zur Bestätigung + confirm_key=$(dialog --insecure --passwordbox "Bestätigen Sie den Verschlüsselungsschlüssel:" 10 50 3>&1 1>&2 2>&3) + exit_status=$? + if [[ $exit_status -ne 0 ]]; then + dialog --msgbox "Abbruch! Bestätigung nicht abgeschlossen." 10 50 + exit 1 + fi + + # Schlüsselvergleich + if [[ "$key" == "$confirm_key" ]]; then + echo "$key" + return + else + dialog --msgbox "Die Schlüssel stimmen nicht überein. Bitte erneut versuchen." 10 50 + fi + done +} + +# Schlüssel global abfragen +ENCRYPTION_KEY=$(get_encryption_key) + +# Hauptmenü +while true; do + choice=$(dialog --menu "Benutzer- und Gruppenverwaltung" 20 50 12 \ + 1 "Benutzer hinzufügen" \ + 2 "Benutzer löschen" \ + 3 "Benutzer zu Gruppe hinzufügen" \ + 4 "Benutzer aus Gruppe entfernen" \ + 5 "Benutzer anzeigen" \ + 6 "Gruppen anzeigen" \ + 7 "Gruppe hinzufügen" \ + 8 "Gruppe löschen" \ + 9 "Änderungen ins System schreiben" \ + 10 "Änderungen auf entfernten Server schreiben" \ + 11 "Beenden" 3>&1 1>&2 2>&3) + + case $choice in + 1) + ./add_user.sh "$ENCRYPTION_KEY" ;; + 2) + ./delete_user.sh ;; + 3) + ./add_user_to_group.sh ;; + 4) + ./remove_user_from_group.sh ;; + 5) + ./list_users.sh ;; + 6) + ./list_groups.sh ;; + 7) + ./add_group.sh ;; + 8) + ./delete_group.sh ;; + 9) + ./apply_changes.sh "$ENCRYPTION_KEY" ;; + 10) + ./apply_changes_to_remote_server.sh "$ENCRYPTION_KEY" ;; + 11) + break ;; + *) + dialog --msgbox "Ungültige Auswahl!" 10 30 ;; + esac +done diff --git a/benutzer_anlegen/data_utils.sh b/benutzer_anlegen/data_utils.sh new file mode 100644 index 0000000..0b3b8cf --- /dev/null +++ b/benutzer_anlegen/data_utils.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +USER_LIST="encrypted_users.list" + +# Initialisiert die Benutzer- und Gruppendatei, falls sie nicht existiert oder unvollständig ist +initialize_user_list() { + if [[ ! -f "$USER_LIST" ]]; then + echo -e "[users]\n\n[groups]\nfileserver:aktiv" >"$USER_LIST" + fi + + # Prüft und fügt fehlende Sektionen hinzu + if ! grep -q "\[users\]" "$USER_LIST"; then + sed -i '1i\[users]\n' "$USER_LIST" + fi + + if ! grep -q "\[groups\]" "$USER_LIST"; then + echo -e "\n[groups]\nfileserver:aktiv" >>"$USER_LIST" + elif ! grep -q "^fileserver:" "$USER_LIST"; then + # Fügt die Gruppe fileserver hinzu, falls sie fehlt + echo "fileserver:aktiv" >>"$USER_LIST" + fi +} + +# Liest Benutzer aus der Datei +read_users() { + awk '/\[users\]/ {flag=1; next} /\[groups\]/ {flag=0} flag' "$USER_LIST" | grep -v "^\s*$" +} + +# Liest Gruppen aus der Datei +read_groups() { + awk '/\[groups\]/ {flag=1; next} flag' "$USER_LIST" | grep -v "^\s*$" +} + +# Fügt einen Benutzer hinzu (oder aktualisiert ihn, falls er gelöscht wurde) +add_user_to_file() { + local username=$1 + local uid=$2 + local password=$3 + local groups=$4 + local status=$5 + + # Entfernt bestehenden Eintrag des Benutzers + sed -i "/^$username:/d" "$USER_LIST" + + # Fügt den Benutzer in die Sektion [users] ein + sed -i "/\[users\]/a $username:$uid:$password:$groups:$status" "$USER_LIST" +} + +# Fügt eine Gruppe hinzu +add_group_to_file() { + local groupname=$1 + + if ! grep -q "^$groupname:" <(read_groups); then + echo "$groupname:aktiv" >>"$USER_LIST" + fi +} + diff --git a/benutzer_anlegen/debug_apply_changes.log b/benutzer_anlegen/debug_apply_changes.log new file mode 100644 index 0000000..5661088 --- /dev/null +++ b/benutzer_anlegen/debug_apply_changes.log @@ -0,0 +1,238 @@ +Starte Änderungen am System... ++ source ./data_utils.sh +++ USER_LIST=encrypted_users.list ++ apply_changes_to_system ++ initialize_user_list ++ [[ ! -f encrypted_users.list ]] ++ grep -q '\[users\]' encrypted_users.list ++ grep -q '\[groups\]' encrypted_users.list ++ grep -q '^fileserver:' encrypted_users.list ++ echo 'Starte Änderungen am System...' ++ tee -a debug_apply_changes.log +Starte Änderungen am System... +++ getent group fileserver +++ cut -d: -f3 +++ echo '' ++ fileserver_gid= ++ [[ -z '' ]] ++ echo 'Erstelle primäre Gruppe '\''fileserver'\'' mit GID 1000' ++ tee -a debug_apply_changes.log +Erstelle primäre Gruppe 'fileserver' mit GID 1000 +Erstelle primäre Gruppe 'fileserver' mit GID 1000 ++ groupadd --gid 1000 fileserver ++ fileserver_gid=1000 ++ changes_preview= ++ group_changes_preview= ++ user_changes_preview= +Analysiere Gruppenänderungen... ++ echo 'Analysiere Gruppenänderungen...' ++ tee -a debug_apply_changes.log +Analysiere Gruppenänderungen... ++ read -r group_entry +++ read_groups +++ awk '/\[groups\]/ {flag=1; next} flag' encrypted_users.list +++ grep -v '^\s*$' +++ echo fileserver:aktiv +++ cut -d: -f1 ++ group_name=fileserver +++ echo fileserver:aktiv +++ cut -d: -f2 ++ group_gid=aktiv +++ echo fileserver:aktiv +++ cut -d: -f3 ++ group_status= ++ [[ '' == \a\k\t\i\v ]] ++ [[ '' == \g\e\l\o\e\s\c\h\t ]] ++ read -r group_entry +++ echo buero:501:aktiv +++ cut -d: -f1 ++ group_name=buero +++ echo buero:501:aktiv +++ cut -d: -f2 ++ group_gid=501 +++ echo buero:501:aktiv +++ cut -d: -f3 ++ group_status=aktiv ++ [[ aktiv == \a\k\t\i\v ]] ++ getent group buero ++ group_changes_preview+='Erstelle Gruppe buero mit GID 501\n' ++ read -r group_entry +++ echo familie:502:aktiv +++ cut -d: -f1 ++ group_name=familie +++ echo familie:502:aktiv +++ cut -d: -f2 ++ group_gid=502 +++ cut -d: -f3 +++ echo familie:502:aktiv ++ group_status=aktiv ++ [[ aktiv == \a\k\t\i\v ]] ++ getent group familie ++ group_changes_preview+='Erstelle Gruppe familie mit GID 502\n' ++ read -r group_entry +++ echo privat:503:aktiv +++ cut -d: -f1 ++ group_name=privat +++ echo privat:503:aktiv +++ cut -d: -f2 ++ group_gid=503 +++ echo privat:503:aktiv +++ cut -d: -f3 ++ group_status=aktiv ++ [[ aktiv == \a\k\t\i\v ]] ++ getent group privat ++ group_changes_preview+='Erstelle Gruppe privat mit GID 503\n' ++ read -r group_entry ++ [[ -n '' ]] ++ echo 'Analysiere Benutzeränderungen...' ++ tee -a debug_apply_changes.log +Analysiere Benutzeränderungen... +Analysiere Benutzeränderungen... ++ read -r user_entry +++ read_users +++ awk '/\[users\]/ {flag=1; next} /\[groups\]/ {flag=0} flag' encrypted_users.list +++ grep -v '^\s*$' +++ echo sebastian.zell:2000:U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc=:fileserver,familie,buero:aktiv +++ cut -d: -f1 ++ user_name=sebastian.zell +++ echo sebastian.zell:2000:U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc=:fileserver,familie,buero:aktiv +++ cut -d: -f2 ++ user_uid=2000 +++ echo sebastian.zell:2000:U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc=:fileserver,familie,buero:aktiv +++ cut -d: -f3 ++ user_password=U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc= +++ echo sebastian.zell:2000:U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc=:fileserver,familie,buero:aktiv +++ cut -d: -f4 +++ tr , ' ' ++ user_groups='fileserver familie buero' +++ echo sebastian.zell:2000:U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc=:fileserver,familie,buero:aktiv +++ cut -d: -f5 ++ user_status=aktiv ++ [[ aktiv == \a\k\t\i\v ]] ++ id sebastian.zell ++ user_changes_preview+='Erstelle Benutzer sebastian.zell mit UID 2000 und Gruppen fileserver familie buero\n' ++ read -r user_entry ++ [[ -n '' ]] ++ changes_preview='Gruppenänderungen:\nErstelle Gruppe buero mit GID 501\nErstelle Gruppe familie mit GID 502\nErstelle Gruppe privat mit GID 503\n\nBenutzeränderungen:\nErstelle Benutzer sebastian.zell mit UID 2000 und Gruppen fileserver familie buero\n' ++ dialog --msgbox 'Gruppenänderungen:\nErstelle Gruppe buero mit GID 501\nErstelle Gruppe familie mit GID 502\nErstelle Gruppe privat mit GID 503\n\nBenutzeränderungen:\nErstelle Benutzer sebastian.zell mit UID 2000 und Gruppen fileserver familie buero\n' 20 70 +)0[?7h[?1000h ┌────────────────────────────────────────────────────────────────────┐  ││   ││   ││   ││   ││   ││   ││   ││   ││   ││   ││   ││   ││   ││   ││   ││   ├────────────────────────────────────────────────────────────────────┤   │< OK >│   └────────────────────────────────────────────────────────────────────┘  Gruppenänderungen:Erstelle Gruppe buero mit GID 501Erstelle Gruppe familie mit GID 502Erstelle Gruppe privat mit GID 503Benutzeränderungen:Erstelle Benutzer sebastian.zell mit UID 2000 und Gruppenfileserver familie buero[?1000l + dialog --yesno 'Möchten Sie die Änderungen anwenden?' 10 30 +)0[?7h[?1000h ┌────────────────────────────┐ ││  ││  ││  ││  ││  ││  ├────────────────────────────┤  │ < Yes > < No > │  └────────────────────────────┘  Möchten Sie die Änderungenanwenden?[?1000l + [[ 0 -ne 0 ]] ++ echo 'Wende Änderungen im System an...' ++ tee -a debug_apply_changes.log +Wende Änderungen im System an... +Wende Änderungen im System an... +Wende Gruppenänderungen an... ++ echo 'Wende Gruppenänderungen an...' ++ tee -a debug_apply_changes.log +Wende Gruppenänderungen an... ++ read -r group_entry +++ read_groups +++ awk '/\[groups\]/ {flag=1; next} flag' encrypted_users.list +++ grep -v '^\s*$' +++ echo fileserver:aktiv +++ cut -d: -f1 ++ group_name=fileserver +++ echo fileserver:aktiv +++ cut -d: -f2 ++ group_gid=aktiv +++ echo fileserver:aktiv +++ cut -d: -f3 ++ group_status= ++ [[ '' == \a\k\t\i\v ]] ++ [[ '' == \g\e\l\o\e\s\c\h\t ]] ++ read -r group_entry +++ echo buero:501:aktiv +++ cut -d: -f1 ++ group_name=buero +++ echo buero:501:aktiv +++ cut -d: -f2 ++ group_gid=501 +++ echo buero:501:aktiv +++ cut -d: -f3 ++ group_status=aktiv ++ [[ aktiv == \a\k\t\i\v ]] ++ getent group buero ++ echo 'Erstelle Gruppe buero mit GID 501' ++ tee -a debug_apply_changes.log +Erstelle Gruppe buero mit GID 501 +Erstelle Gruppe buero mit GID 501 ++ groupadd --gid 501 buero ++ read -r group_entry +++ cut -d: -f1 +++ echo familie:502:aktiv ++ group_name=familie +++ echo familie:502:aktiv +++ cut -d: -f2 ++ group_gid=502 +++ echo familie:502:aktiv +++ cut -d: -f3 ++ group_status=aktiv ++ [[ aktiv == \a\k\t\i\v ]] ++ getent group familie ++ echo 'Erstelle Gruppe familie mit GID 502' ++ tee -a debug_apply_changes.log +Erstelle Gruppe familie mit GID 502 +Erstelle Gruppe familie mit GID 502 ++ groupadd --gid 502 familie ++ read -r group_entry +++ echo privat:503:aktiv +++ cut -d: -f1 ++ group_name=privat +++ echo privat:503:aktiv +++ cut -d: -f2 ++ group_gid=503 +++ echo privat:503:aktiv +++ cut -d: -f3 ++ group_status=aktiv ++ [[ aktiv == \a\k\t\i\v ]] ++ getent group privat ++ echo 'Erstelle Gruppe privat mit GID 503' ++ tee -a debug_apply_changes.log +Erstelle Gruppe privat mit GID 503 +Erstelle Gruppe privat mit GID 503 ++ groupadd --gid 503 privat ++ read -r group_entry ++ [[ -n '' ]] +Wende Benutzeränderungen an... ++ echo 'Wende Benutzeränderungen an...' ++ tee -a debug_apply_changes.log +Wende Benutzeränderungen an... ++ read -r user_entry +++ read_users +++ awk '/\[users\]/ {flag=1; next} /\[groups\]/ {flag=0} flag' encrypted_users.list +++ grep -v '^\s*$' +++ echo sebastian.zell:2000:U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc=:fileserver,familie,buero:aktiv +++ cut -d: -f1 ++ user_name=sebastian.zell +++ echo sebastian.zell:2000:U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc=:fileserver,familie,buero:aktiv +++ cut -d: -f2 ++ user_uid=2000 +++ echo sebastian.zell:2000:U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc=:fileserver,familie,buero:aktiv +++ cut -d: -f3 ++ user_password=U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc= +++ echo sebastian.zell:2000:U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc=:fileserver,familie,buero:aktiv +++ cut -d: -f4 +++ tr , ' ' ++ user_groups='fileserver familie buero' +++ echo sebastian.zell:2000:U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc=:fileserver,familie,buero:aktiv +++ cut -d: -f5 ++ user_status=aktiv ++ [[ aktiv == \a\k\t\i\v ]] ++ id sebastian.zell ++ echo 'Erstelle Benutzer sebastian.zell mit UID 2000 und Gruppen fileserver familie buero' ++ tee -a debug_apply_changes.log +Erstelle Benutzer sebastian.zell mit UID 2000 und Gruppen fileserver familie buero +Erstelle Benutzer sebastian.zell mit UID 2000 und Gruppen fileserver familie buero +++ echo 'fileserver familie buero' +++ tr ' ' , ++ useradd --uid 2000 --gid 1000 --groups fileserver,familie,buero sebastian.zell ++ chpasswd +++ echo U2FsdGVkX18tLfq131Ve0QvTqZJi/w9FNTek5K122Xc= +./apply_changes.sh: line 130: DECRYPTION_KEY: unbound variable ++ echo sebastian.zell: +No password has been supplied. +No password has been supplied. +No password has been supplied. +chpasswd: (user sebastian.zell) pam_chauthtok() failed, error: +Authentication token manipulation error +chpasswd: (line 1, user sebastian.zell) password not changed