77 lines
3.3 KiB
Bash
Executable File
77 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
||
# ESPO-01-Grundeinrichtung – schliesst die Basis-VM ab.
|
||
# Laeuft als root, ist idempotent und kann jederzeit wiederholt werden.
|
||
# Aufruf: bash ESPO-01-Grundeinrichtung.sh "<Kundenname>"
|
||
# Der RMM-Task ist nur ein duenner Ausloeser, der dieses Skript holt und mit %companyname% aufruft.
|
||
set -u
|
||
KUNDE_ROH="${1:-}"
|
||
FEHLER=0
|
||
|
||
# 1. Hostname aus dem Kundennamen ableiten (klein, nur a-z 0-9 und Bindestrich), damit die
|
||
# Flotte im RMM und in Logs eindeutig benannt ist.
|
||
KUNDE=$(printf '%s' "$KUNDE_ROH" | tr '[:upper:]' '[:lower:]' | tr -c 'a-z0-9' '-' | sed 's/-\+/-/g; s/^-//; s/-$//')
|
||
SOLL="crm-${KUNDE}"
|
||
IST=$(hostnamectl --static)
|
||
if [ -z "$KUNDE" ]; then
|
||
echo "FEHLER: Kundenname leer - Hostname nicht gesetzt"; FEHLER=1
|
||
elif [ "$IST" != "$SOLL" ]; then
|
||
hostnamectl set-hostname "$SOLL" && sed -i "s/\b${IST}\b/${SOLL}/g" /etc/hosts
|
||
echo "Hostname: $IST -> $SOLL"
|
||
else
|
||
echo "Hostname: $SOLL (unveraendert)"
|
||
fi
|
||
|
||
# 2. Hinweis auf das Initialpasswort aus dem Konsolen-Login entfernen - er hat nach der
|
||
# Erstanmeldung keinen Zweck mehr und steht sonst dauerhaft am Anmeldebildschirm.
|
||
if grep -q "Initialpasswort" /etc/issue; then
|
||
sed -i '/Initialpasswort/d; /beim ersten Anmelden/d' /etc/issue
|
||
echo "/etc/issue: Hinweis auf das Initialpasswort entfernt"
|
||
else
|
||
echo "/etc/issue: kein Hinweis vorhanden"
|
||
fi
|
||
|
||
# 3. Pruefen, dass das Konto ein gueltiges Passwort hat (Status P) - sonst ist die
|
||
# Erstinbetriebnahme unvollstaendig.
|
||
if [ "$(passwd -S administrator | awk '{print $2}')" = "P" ]; then
|
||
echo "Konto administrator: Passwort gesetzt"
|
||
else
|
||
echo "FEHLER: Konto administrator hat kein gueltiges Passwort"; FEHLER=1
|
||
fi
|
||
|
||
# 4. SSH haerten: keine Root-Anmeldung, wenige Fehlversuche, kurze Anmeldefrist.
|
||
install -d -m 755 /etc/ssh/sshd_config.d
|
||
cat > /etc/ssh/sshd_config.d/10-espo.conf <<'CONF'
|
||
PermitRootLogin no
|
||
MaxAuthTries 3
|
||
LoginGraceTime 20
|
||
CONF
|
||
if sshd -t; then systemctl reload ssh && echo "SSH: PermitRootLogin no, MaxAuthTries 3"; else echo "FEHLER: sshd-Konfiguration ungueltig"; FEHLER=1; fi
|
||
|
||
# 5. Journal begrenzen, damit Logs das Wurzeldateisystem nicht fuellen koennen.
|
||
install -d -m 755 /etc/systemd/journald.conf.d
|
||
printf '[Journal]\nSystemMaxUse=500M\n' > /etc/systemd/journald.conf.d/10-espo.conf
|
||
systemctl restart systemd-journald && echo "journald: SystemMaxUse=500M"
|
||
|
||
# 6. needrestart daran hindern, containerd automatisch neu zu starten - das wuerde die
|
||
# laufenden Container mitreissen. docker ist ab Werk schon ausgenommen.
|
||
install -d -m 755 /etc/needrestart/conf.d
|
||
printf '# containerd nicht automatisch neu starten (Container haengen daran).\n$nrconf{override_rc}{qr(^containerd)} = 0;\n' > /etc/needrestart/conf.d/10-espo.conf
|
||
echo "needrestart: containerd ausgenommen"
|
||
|
||
# 7. Zeitzone sicherstellen.
|
||
if [ "$(timedatectl show -p Timezone --value)" != "Europe/Berlin" ]; then
|
||
timedatectl set-timezone Europe/Berlin && echo "Zeitzone auf Europe/Berlin gesetzt"
|
||
else
|
||
echo "Zeitzone: Europe/Berlin"
|
||
fi
|
||
|
||
# 8. Automatische Sicherheitsupdates nur pruefen, nicht aendern - sie sind Ubuntu-Standard.
|
||
if grep -qs '"1"' /etc/apt/apt.conf.d/20auto-upgrades; then
|
||
echo "unattended-upgrades: aktiv"
|
||
else
|
||
echo "WARNUNG: unattended-upgrades nicht aktiv"; FEHLER=1
|
||
fi
|
||
|
||
# 9. Ergebniszeile fuer Monitor und Custom Field.
|
||
if [ "$FEHLER" -eq 0 ]; then echo "ESPO01_ERGEBNIS: OK"; exit 0; else echo "ESPO01_ERGEBNIS: FEHLER"; exit 1; fi
|