linux-suse-opensuse security hardening best-practices sles opensuse

SUSE Security: Best Practices Checklist (Artikel 150)

Der definitive Sicherheits-Check für SUSE-Systeme. Von der Installation über AppArmor bis hin zu Compliance-Audits – alles für den gehärteten Enterprise-Betrieb.

# SUSE Security: Best Practices für die Produktion

TL;DR / Management Summary Ein SLES-Server im Standardzustand ist stabil, aber noch nicht “Hardened”. Für den Enterprise-Betrieb müssen wir das volle Potenzial von SUSE ausschöpfen. Die Top 3 Maßnahmen: 1. AppArmor für alle Netzwerkdienste erzwingen, 2. Sicherheits-Patches (zypper patch) automatisieren und 3. Das YaST Security Center für globale System-Policys nutzen. Dieser Guide liefert die Checkliste für den produktionsreifen SLES-Host.


# 1. Einführung & Architektur

Defense in Depth auf SUSE-Art.

Sicherheit ist kein einmaliges Event, sondern ein Prozess. SUSE bietet hierfür eine mehrschichtige Architektur.

# Die Sicherheits-Pyramide (Mermaid)

graph TD
    A[Hardened Application] --> B[AppArmor Profiles]
    B --> C[Kernel Hardening: sysctl]
    C --> D[System Policy: YaST Security]
    D --> E[Patch Management: SCC / RMT]
    E --> F[Hardware / Boot: Secure Boot]

# 2. Checkliste: Initiales Hardening

Das Fundament legen.

# 1. Physische & Boot-Sicherheit

  • GRUB Passwort: Setzen Sie ein Passwort via yast2 bootloader, um Manipulationen am Boot-Prompt zu verhindern.
  • Secure Boot: Stellen Sie sicher, dass Secure Boot im UEFI und in SLES aktiviert ist.

# 2. System-Policys (YaST)

Starten Sie yast2 security und setzen Sie:

  • File Permissions auf Secure (Entfernt SUID-Bits von unnötigen Binaries).
  • Password Aging auf 90 Tage.
  • Console Login für Root deaktivieren.

# 3. Applikations-Sicherheit (AppArmor)

Isolation erzwingen.

Jeder Dienst, der Ports nach außen öffnet (Apache, Bind, MySQL), muss im Enforce-Modus laufen.

# Prüfung
sudo aa-status | grep "processes are in enforce mode"

Wichtig: Wenn Sie Third-Party Software nutzen, die kein AppArmor-Profil mitbringt, bauen Sie eines via aa-genprof (siehe Artikel 147). Ein ungeschützter Dienst ist das schwächste Glied in der Kette.


# 4. Day-2 Operations: Patching & Auditing

Den Vorsprung halten.

# Strategisches Patching

Nutzen Sie zypper patch statt zypper up für Produktion. Es minimiert das Risiko von Inkompatibilitäten bei Funktions-Updates.

# Automatisierung via Cron/Ansible
0 3 * * * root /usr/bin/zypper patch --no-confirm

# Integritäts-Checks (AIDE)

Installieren Sie AIDE, um Manipulationen am Dateisystem zu erkennen.

sudo zypper install aide
sudo aide --init

# 5. Troubleshooting & “War Stories”

Vermeiden Sie die Stolperfallen.

# Story 1: “Der offene SMT-Mirror”

Symptom: Interne Server laden Updates, aber ein Security-Audit meldet, dass die Kommunikation unverschlüsselt erfolgt. Ursache: Der lokale RMT/SMT Server bietet HTTP statt HTTPS an. Lösung: Erzwingen Sie HTTPS für den Repository-Mirror und verteilen Sie das CA-Zertifikat an alle Clients.

# Story 2: “Das volle Audit-Log”

Symptom: Der Server wird plötzlich extrem langsam beim Datei-Zugriff. Ursache: Zu viele Audit-Regeln für das Dateisystem (auditd) führen zu massiven I/O-Wartezeiten. Lösung: Reduzieren Sie die Regeln auf das Wesentliche (z.B. nur /etc und /bin) und nutzen Sie Filter in audit.rules.


# 6. Fazit & Empfehlung

  • YaST: Vertrauen Sie YaST. Es ist das beste Werkzeug, um komplexe Security-Settings konsistent zu setzen.
  • Modularität: SLES ist modular. Deinstallieren Sie Module, die Sie nicht brauchen (z.B. Desktop-Applications auf einem Server).
  • Automatisierung: Nutzen Sie Ansible (Rollen der Community oder SUSE-Manager), um diese Checkliste auf alle Server auszurollen.

# Anhang: Die 5-Minuten-Härtung (CLI)

# 1. Update alles
zypper patch -y

# 2. Aktiviere AppArmor global
systemctl enable --now apparmor

# 3. Restriktive Umask setzen
sed -i 's/UMASK.*/UMASK 027/' /etc/login.defs

# 4. SSH-Login für Root verbieten
sed -i 's/PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd

# 5. Firewall-Status prüfen
firewall-cmd --state