Dateien nach "/" hochladen

This commit is contained in:
sebastian.zell 2024-12-30 01:41:04 +00:00
parent b5c3bbe952
commit b693184227
5 changed files with 254 additions and 0 deletions

22
add_group.sh Normal file
View File

@ -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

51
add_user.sh Normal file
View File

@ -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

56
add_user_to_group.sh Normal file
View File

@ -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

48
deploy_changes.sh Normal file
View File

@ -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

77
remote_apply_changes.sh Normal file
View File

@ -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."