Website-Suche

DebPostInstall: Debian- und Ubuntu-Server-Post-Installationsskript


Haben Sie jemals einen frischen Debian- oder Ubuntu-Server eingerichtet, nur um mit einer langen Checkliste wichtiger Nachinstallationsaufgaben konfrontiert zu werden? Keine Sorge mehr! In diesem Tutorial stellen wir ein Bash-Skript namens DebPostInstall vor. Egal, ob Sie neu bei Linux sind oder ein erfahrener Systemadministrator, das DebPostInstall-Skript kann Ihnen helfen, wichtige Nachinstallationsaufgaben zu automatisieren auf einem frisch installierten minimalen Debian- oder Ubuntu-Server.

Am Ende dieses Tutorials werden Sie ein solides Verständnis dafür haben, wie man das DebPostInstall-Skript verwendet, um schnell und effizient einen sicheren und gut konfigurierten Debian-basierten Server einzurichten. Lassen Sie uns anfangen!

DebPostInstall: Debian- und Ubuntu-Post-Installations-Bash-Skript

DebPostInstall ist ein einfaches Bash-Skript, um wichtige Aufgaben nach der Installation auf einem neu installierten minimalen Debian- oder Ubuntu-Server zu automatisieren.

Das DebPostInstall-Skript wird die folgenden Aufgaben ausführen:

  1. Erstellen eines neuen Benutzers mit Sudo-Rechten.
  2. Hinzufügen eines öffentlichen SSH-Schlüssels für sicheren Zugriff.
  3. Deaktivierung der Passwortauthentifizierung und des Root-Logins zur erhöhten Sicherheit.
  4. Einrichten der unkomplizierten Firewall (UFW), um Ihren Server zu schützen.
  5. Erstellen einer Auslagerungsdatei zur Optimierung der Systemleistung.
  6. Konfigurieren der Zeitzone und der Zeitsynchronisation für eine genaue Zeitmessung.

Natürlich könnten Sie diese Aufgaben manuell nacheinander erledigen. Es ist keine große Sache, aber warum sich die Mühe machen? Das DebPostInstall-Skript wird Ihnen helfen, diese Aufgaben zu automatisieren.

Hier ist der Inhalt des Skripts:

#!/usr/bin/env bash
# ------------------------------------------------------------------
# Script Name:   DebPostInstall
# Description:   A Bash Script to automate essential
#                post-installation tasks on Debian and Ubuntu
# Website:       https://gist.github.com/ostechnix
# Version:       1.0
# Usage:         sudo ./debpostinstall.sh
# ------------------------------------------------------------------
# Update the system
echo "Updating the system..."
apt-get update && apt-get full-upgrade -y
apt-get autoremove -y && apt-get autoclean -y
# Install necessary packages
echo "Installing necessary packages..."
apt-get install -y sudo openssh-server ufw systemd-timesyncd vim htop net-tools curl wget git
# Prompt for username
read -p "Enter the username for the new user: " USERNAME
# Check if the user already exists
if id "$USERNAME" &>/dev/null; then
    echo "User $USERNAME already exists. Skipping user creation."
else
    # Prompt for password
    read -s -p "Enter the password for the new user: " PASSWORD
    echo
    read -s -p "Confirm the password for the new user: " PASSWORD_CONFIRM
    echo
    # Check if passwords match
    if [ "$PASSWORD" != "$PASSWORD_CONFIRM" ]; then
        echo "Passwords do not match. Exiting."
        exit 1
    fi
    # Add a new user account with sudo access and set the password
    echo "Adding new user account..."
    useradd -m -s /bin/bash -G sudo $USERNAME
    echo "$USERNAME:$PASSWORD" | chpasswd
fi
# Prompt for public SSH key
read -p "Enter the public SSH key for the new user: " SSH_KEY
# Add a public SSH key for the new user account, avoiding duplicates
echo "Adding public SSH key..."
mkdir -p /home/$USERNAME/.ssh
if ! grep -qFx "$SSH_KEY" /home/$USERNAME/.ssh/authorized_keys; then
    echo "$SSH_KEY" >> /home/$USERNAME/.ssh/authorized_keys
    echo "SSH key added successfully."
else
    echo "SSH key already exists in authorized_keys file."
fi
chmod 700 /home/$USERNAME/.ssh
chmod 600 /home/$USERNAME/.ssh/authorized_keys
chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh
# Disable password authentication to the server
echo "Disabling password authentication..."
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd
# Deny root login to the server
echo "Denying root login..."
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd
# Setup Uncomplicated Firewall (UFW)
echo "Setting up Uncomplicated Firewall (UFW)..."
ufw allow OpenSSH
ufw --force enable
# Create Swap file based on machine's installed memory
echo "Creating Swap file..."
TOTAL_MEM=$(free -m | awk '/^Mem:/{print $2}')
if [ "$TOTAL_MEM" -le 2048 ]; then
    SWAP_SIZE=1024
elif [ "$TOTAL_MEM" -le 8192 ]; then
    SWAP_SIZE=2048
else
    SWAP_SIZE=4096
fi
dd if=/dev/zero of=/swapfile bs=1M count=$SWAP_SIZE
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab
# Setup the timezone for the server (Default value is "Asia/Kolkata")
echo "Setting up timezone..."
read -p "Enter the timezone for the server (default is Asia/Kolkata): " TIMEZONE
TIMEZONE=${TIMEZONE:-"Asia/Kolkata"}
timedatectl set-timezone $TIMEZONE
# Set up time synchronization with systemd-timesyncd
echo "Setting up time synchronization with systemd-timesyncd..."
systemctl enable systemd-timesyncd
systemctl start systemd-timesyncd
echo "Post-installation tasks completed successfully!"

Dieses Skript ist ein Werk in Arbeit. Wir können es von Zeit zu Zeit mit weiteren Funktionen aktualisieren. Bitte schauen Sie regelmäßig nach Updates. Es ist auch kostenlos zu verwenden, zu ändern und zu verteilen. Sie können dieses Skript nach Belieben anpassen.

Erklärung des Skripts

Lassen Sie uns das Skript aufschlüsseln und sehen, was jeder Teil macht.

1. Shebang (#!/usr/bin/env bash):

  • Gibt den Skriptinterpreter als bash an.

2. System aktualisieren:

  • apt-get update && apt-get full-upgrade -y: Aktualisiert die Paketliste und aktualisiert alle installierten Pakete.

3. Notwendige Pakete installieren:

  • apt-get install -y sudo openssh-server ufw systemd-timesyncd vim htop net-tools curl wget git: Installiert sudo, openssh-server, ufw (Uncomplicated Firewall), systemd-timesyncd, vim, htop, net-tools, curl, wget und git. Sie können hier zusätzliche Pakete Ihrer Wahl hinzufügen.

4. Aufforderung zur Eingabe des Benutzernamens:

  • read -p "Geben Sie den Benutzernamen für den neuen Benutzer ein: " USERNAME: Fordert den Benutzer auf, einen Benutzernamen einzugeben.

5. Überprüfen, ob der Benutzer existiert:

  • if id "$USERNAME" &>/dev/null; then ... else ... fi: Prüft, ob der Benutzer bereits existiert. Wenn der Benutzer existiert, wird die Benutzererstellung übersprungen.

6. Passwortabfrage:

  • read -s -p "Geben Sie das Passwort für den neuen Benutzer ein: " PASSWORD: Fordert den Benutzer auf, ein Passwort einzugeben, ohne es im Terminal anzuzeigen.
  • read -s -p "Bestätigen Sie das Passwort für den neuen Benutzer: " PASSWORD_CONFIRM: Fordert den Benutzer auf, das Passwort zu bestätigen.

7. Überprüfen, ob die Passwörter übereinstimmen:

  • if [ "$PASSWORD" != "$PASSWORD_CONFIRM" ]; then ... fi: Überprüft, ob die eingegebenen Passwörter übereinstimmen. Wenn sie dies nicht tun, wird das Skript beendet.

8. Ein neues Benutzerkonto mit Sudo-Zugriff hinzufügen und das Passwort festlegen:

  • useradd -m -s /bin/bash -G sudo $USERNAME: Erstellt einen neuen Benutzer mit einem Home-Verzeichnis, /bin/bash als Shell und fügt den Benutzer der sudo-Gruppe hinzu.
  • echo "$USERNAME:$PASSWORD" | chpasswd: Legt das Passwort für den neuen Benutzer fest.

9. Aufforderung zur öffentlichen SSH-Schlüssel:

  • read -p "Geben Sie den öffentlichen SSH-Schlüssel für den neuen Benutzer ein: " SSH_KEY: Fordert den Benutzer auf, einen öffentlichen SSH-Schlüssel einzugeben.

10. Einen öffentlichen SSH-Schlüssel für das neue Benutzerkonto hinzufügen, Duplikate vermeiden:

  • mkdir -p /home/$USERNAME/.ssh: Erstellt das .ssh-Verzeichnis, falls es nicht existiert.
  • if ! grep -qFx "$SSH_KEY" /home/$USERNAME/.ssh/authorized_keys; then ... fi: Überprüft, ob der SSH-Schlüssel bereits in der authorized_keys-Datei vorhanden ist. Falls nicht, wird der Schlüssel hinzugefügt.
  • chmod 700 /home/$USERNAME/.ssh: Setzt die Berechtigungen des .ssh-Verzeichnisses auf 700 (lesen, schreiben, ausführen nur für den Besitzer).
  • chmod 600 /home/$USERNAME/.ssh/authorized_keys: Setzt die Berechtigungen der Datei authorized_keys auf 600 (lesen, schreiben nur für den Besitzer).
  • chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh: Setzt den Besitzer und die Gruppe des .ssh-Verzeichnisses und seines Inhalts auf den neuen Benutzer.

11. Deaktivieren Sie die Passwortauthentifizierung für den Server:

  • sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config: Deaktiviert die Passwortauthentifizierung in der SSH-Konfiguration.
  • systemctl restart sshd: Startet den SSH-Dienst neu, um die Änderungen anzuwenden.

12. Root-Login auf dem Server verweigern:

  • sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config: Deaktiviert das Root-Login in der SSH-Konfiguration.
  • systemctl restart sshd: Startet den SSH-Dienst neu, um die Änderungen anzuwenden.

13. Unkomplizierte Firewall (UFW) einrichten:

  • ufw allow OpenSSH: Erlaubt SSH-Verkehr durch die Firewall.
  • ufw --force enable: Aktiviert die Firewall.

14. Swap-Datei basierend auf dem installierten Arbeitsspeicher des Computers erstellen:

  • TOTAL_MEM=$ (free -m | awk '/^Mem:/{print $2}')}: Ruft den gesamten installierten Speicher ab.
  • if [ "$TOTAL_MEM" -le 2048 ]; then ... elif [ "$TOTAL_MEM" -le 8192 ]; then ... else ... fi: Bestimmt die Swap-Dateigröße basierend auf dem installierten Speicher.
  • dd if=/dev/zero of=/swapfile bs=1M count=$SWAP_SIZE: Erstellt die Swap-Datei.
  • chmod 600 /swapfile: Setzt die Berechtigungen der Swap-Datei auf 600.
  • mkswap /swapfile: Initialisiert die Swap-Datei.
  • swapon /swapfile: Aktiviert die Swap-Datei.
  • echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab: Fügt die Swap-Datei zu /etc/fstab hinzu, um sie beim Neustart persistent zu machen.

15. Stellen Sie die Zeitzone für den Server ein (Standardwert ist "Asia/Kolkata"):

  • read -p "Geben Sie die Zeitzone für den Server ein (Standard ist Asia/Kolkata): " TIMEZONE: Fordert den Benutzer auf, eine Zeitzone einzugeben.
  • TIMEZONE=$ {TIMEZONE:-"Asia/Kolkata"}: Legt die Standardzeitzone auf "Asia/Kolkata" fest, wenn keine Zeitzone angegeben ist.
  • timedatectl set-timezone $TIMEZONE: Setzt die Systemzeitzone.

16. Einrichtung der Zeitsynchronisierung mit systemd-timesyncd:

  • systemctl enable systemd-timesyncd: Aktiviert systemd-timesyncd, damit es beim Booten gestartet wird.
  • systemctl start systemd-timesyncd: Startet systemd-timesyncd.

17. Abschlussnachricht:

  • echo "Post-Installationsaufgaben erfolgreich abgeschlossen!": Gibt eine Nachricht aus, die anzeigt, dass die Post-Installationsaufgaben abgeschlossen sind.

Indem Sie jeden Teil des Skripts verstehen, können Sie sehen, wie es die Einrichtung eines neuen Benutzers, die SSH-Konfiguration, die Firewall, die Swap-Datei, die Zeitzone und die Zeit synchronisation auf einem Debian-basierten System automatisiert.

Automatisieren Sie wichtige Nachinstallationsaufgaben in Debian oder Ubuntu mit dem DebPostInstall-Skript

Bevor Sie dieses Skript verwenden, müssen Sie auf Ihrem lokalen Rechner einen SSH-Schlüssel erstellen. Führen Sie dazu aus:

ssh-keygen -t ed25519 -a 200 -C "mail@example.com" -f ~/.ssh/id_ed25519

Ersetzen Sie die E-Mail-ID durch Ihre eigene.

Sobald der Schlüssel erzeugt wurde, führen Sie den folgenden Befehl aus, um den Inhalt der Datei des öffentlichen Schlüssels anzuzeigen:

cat ~/.ssh/id_ed25519.pub

Wählen Sie den angezeigten Schlüssel aus und kopieren Sie ihn. Sie werden ihn später benötigen.

Als Nächstes melden Sie sich bei Ihrem Debian- oder Ubuntu-Server an.

Kopieren Sie den Inhalt des DebPostInstall-Skripts und speichern Sie ihn in einer Datei mit dem Namen debpostinstall.sh (oder einem anderen Namen Ihrer Wahl) und machen Sie sie ausführbar:

chmod +x debpostinstall.sh

Dann können Sie das Skript mit dem Befehl ausführen:

sudo ./debpostinstall.sh

Das Skript wird beginnen, die Nachinstallationsaufgaben auf Ihrem Debian-basierten System auszuführen. Behalten Sie den Bildschirm im Auge.

Wenn Sie aufgefordert werden, den Benutzernamen einzugeben, tun Sie dies bitte.

Enter the username for the new user:

Geben Sie dann die zuvor von Ihrem lokalen Rechner kopierte Schlüsselphrase ein.

Enter the public SSH key for the new user:

Geben Sie Ihre Zeitzone ein. Standardmäßig ist Asia/Kolkata.

Enter the timezone for the server (default is Asia/Kolkata):

Das war's. Das Skript erledigt den Rest. Lehnen Sie sich zurück und entspannen Sie sich!

Sobald das Skript abgeschlossen ist, starten Sie Ihr System neu.

Post-Installationsschritte überprüfen

Um zu überprüfen, ob das Skript korrekt funktioniert, können Sie mehrere Überprüfungen durchführen, um sicherzustellen, dass jede Aufgabe erfolgreich abgeschlossen wurde.

Melden Sie sich bei Ihrem Debian/Ubuntu-Server an und führen Sie die folgenden Aufgaben nacheinander aus.

1. Überprüfung der Erstellung eines neuen Benutzers

getent passwd $USERNAME

Dieser Befehl sollte die Details des neu erstellten Benutzers zurückgeben.

2. Sudo-Zugriff prüfen:

groups $USERNAME

Dieser Befehl sollte zeigen, dass der Benutzer Mitglied der sudo-Gruppe ist.

3. Überprüfen Sie die SSH-Schlüsseleinrichtung

ls -ld ~/.ssh/
ls -l ~/.ssh/authorized_keys

Stellen Sie sicher, dass das Verzeichnis .ssh und die Datei authorized_keys die richtigen Berechtigungen haben (700 für das Verzeichnis und 600 für die Datei).

4. Überprüfen Sie, ob die Passwortauthentifizierung deaktiviert ist

grep "PasswordAuthentication no" /etc/ssh/sshd_config

Dieser Befehl sollte die Zeile zurückgeben, die angibt, dass die Passwortauthentifizierung deaktiviert ist.

5. Überprüfen Sie, ob der Root-Login deaktiviert ist

grep "PermitRootLogin no" /etc/ssh/sshd_config

Dieser Befehl sollte die Zeile zurückgeben, die angibt, dass der Root-Login deaktiviert ist.

6. UFW-Einrichtung überprüfen

sudo ufw status

Dieser Befehl sollte zeigen, dass die Firewall aktiv ist und dass SSH erlaubt ist.

7. Überprüfen Sie die Erstellung der Swap-Datei

sudo swapon --show

Dieser Befehl sollte die vom Skript erstellte Auslagerungsdatei auflisten.

8. Überprüfen Sie /etc/fstab:

grep "/swapfile" /etc/fstab

Dieser Befehl sollte die Zeile zurückgeben, die angibt, dass die Swap-Datei so konfiguriert ist, dass sie beim Start gemountet wird.

9. Überprüfen Sie die Zeitzoneneinstellungen

timedatectl | grep "Time zone"

Dieser Befehl sollte die vom Skript eingestellte korrekte Zeitzone anzeigen.

10. Überprüfen Sie die Zeitsynchronisation mit systemd-timesyncd

sudo systemctl status systemd-timesyncd

Dieser Befehl sollte zeigen, dass der Dienst aktiv ist und läuft.

11. Überprüfen der Zeitsynchronisation:

timedatectl status | grep "System clock synchronized"
timedatectl status | grep "NTP service"

Diese Befehle sollten jeweils "ja" und "aktiv" anzeigen.

Alternativ könnten Sie einfach den folgenden Befehl ausführen:

timedatectl

Dies zeigt Systemdatum- und Zeitdetails sowie Zeit- Synchronisationsdetails an.

Durch Ausführen dieser Befehle können Sie überprüfen, dass jeder Schritt des Skripts korrekt ausgeführt wurde und dass das System wie erwartet konfiguriert ist.

Wenn einer dieser Prüfungen fehlschlägt, müssen Sie möglicherweise das Skript und die Systemkonfiguration überprüfen, um etwaige Probleme zu identifizieren und zu beheben.

Fazit

Herzlichen Glückwunsch! Sie haben Ihren Debian-Server erfolgreich mit dem DebPostInstall-Skript eingerichtet. Mit diesem Skript haben Sie mehrere wichtige Nachinstallationsaufgaben automatisiert, sodass Ihr Server sicher und einsatzbereit ist.

Das DebPostInstall-Skript ist ein nützliches Werkzeug, das Ihnen Zeit und Mühe beim Einrichten neuer Server sparen kann. Zögern Sie nicht, das Skript anzupassen, um es besser an Ihre spezifischen Bedürfnisse und Ihre Umgebung anzupassen.

Wenn Sie Fragen haben oder weitere Unterstützung benötigen, zögern Sie nicht, sich zu melden.

Verwandte Lektüre:

  • Debian 12 Server Einrichtung: Wesentliche Schritte nach der Installation