Automatischer Weg: Ein Skript aus dem Benutzerkonto richtet den gesamten Server ein (Web-Stack Apache + PHP, Datenbank, Sicherheitswerkzeuge, cron). Danach nur noch das Dashboard bereitstellen, SSL ausstellen und die Lizenz eingeben. Läuft unter Ubuntu/Debian: Auf einem frischen VPS richtet es alles von Grund auf ein, auf einem bereits konfigurierten Server nur additiv (Profil „Konfigurierter Server“, Schritt 01). Alle Befehle unten der Reihe nach – einfach von oben nach unten durchgehen. Auf einem frischen VPS passt jeder Schritt der Reihe nach; ist der Server bereits konfiguriert oder läuft darauf ein Hosting-Panel, überlässt das Skript einen Teil der Arbeit bewusst Ihnen — was genau, schreibt es am Ende seines Laufs (die Auswertung der Ausgabe finden Sie in Schritt 01).
monitor.example.com – Ihre Domain; 203.0.113.10 – die reale IP des Servers; /var/www/monitor – das Dashboard-Verzeichnis (wo public/, assets/, config.php liegen); für die DB ein eigenes Passwort wählen.
jail.local), root-crontab, UFW-Regeln, Apache-Konfiguration. Ist der Server bereits konfiguriert (laufendes Dashboard, Websites, Mail, eigene jails) – wählen Sie das Profil „Konfigurierter Server“: Es nimmt nur additive Änderungen vor und lässt Ihre Firewall, Fail2ban, Mail, SSH und sysctl unberührt. Erkennt das Skript eine Hosting-Panel, wechselt es selbst in diesen Modus. Vor dem ersten Start kann ein Testlauf aktiviert werden (Häkchen im Benutzerkonto) – er zeigt, was getan würde, ohne etwas zu ändern. Erstellen Sie auf einem produktiven Server zur Sicherheit einen Snapshot.
my.arciveo.com → Bereich „Server-Einrichtung“ (verfügbar nach dem Erwerb von Arcivéo Security Monitor). Er ist an Ihr Konto gebunden und enthält ein persönliches Token.
Das Skript richtet den gesamten Server ein: Web-Stack (Apache + PHP), Datenbank, SSL-Werkzeuge, den vollständigen Satz an Schutzmitteln und Cron-Aufgaben (Lynis, SMART, debsums, Logwatch, Tagesbericht, ipsum-Aktualisierung).
1) Schutzstufe wählen (im Benutzerkonto, vor dem Kopieren des Befehls):
2) Führen Sie auf dem Server als root den Befehl aus dem Benutzerkonto aus — er sieht so aus:
3) Lesen Sie die Ausgabe am Ende — dort steht, was Ihnen zu tun bleibt. Das Skript schließt seine Arbeit mit einem Prüfblock und der Liste „Weiter — Installation des Dashboards“ ab. Einen Teil der Schritte führt es bewusst nicht aus: welche genau, hängt vom gewählten Profil ab und davon, was es auf dem Server vorgefunden hat. Gleichen Sie mit der Liste unten ab — auszuführen sind nur die Punkte, deren Zeilen in Ihrer Ausgabe erschienen sind.
Control panel detected (…) — die Website wird mit den Mitteln des Hosting-Panels selbst angelegt, einen vhost erstellt das Skript nicht. Schritt 03, Zweig „Server mit Hosting-Panel“.No vhost created (no domain given) — Profil „Konfigurierter Server“ ohne Domain: ein vhost ohne Namen würde zur Standard-Website und finge Ihre eigenen Websites ab, deshalb wurde er nicht angelegt. Schritt 03, Zweig „vhost von Hand anlegen“.sudo rules NOT written — das Skript konnte nicht ermitteln, unter welchem Konto das Panel läuft. Das ist ein normaler Fall: die Panel-Dateien werden erst nach der Autokonfiguration hochgeladen, es gab also noch nichts, woran es sich hätte erkennen lassen. Ohne diese Regeln sehen die Module keine Systemdaten. Schritt 04, Block „sudo für den Webserver“.! Nginx does not read .htaccess — vor Apache steht Nginx, und die Sperre ließ sich nicht automatisch in dessen Konfiguration eintragen. Holen Sie das unbedingt nach: sonst werden data/, keys/, database/ und config.php unter Umgehung der .htaccess nach außen ausgeliefert. Schritt 03, Block „Wenn vor Apache Nginx steht“.UFW installed but inactive — die Firewall ist installiert, aber ausgeschaltet: auf einem konfigurierten Server schaltet das Skript sie nicht selbst ein, um Ihnen nicht den Zugang abzuschneiden. Schalten Sie sie selbst ein und geben Sie dabei unbedingt Ihren SSH-Port frei:
Fail2ban installed but not running — starten Sie ihn: sudo systemctl enable --now fail2ban.Database server present … but not running — starten Sie das Datenbanksystem vor Schritt 04: sudo systemctl enable --now mariadb (oder mysql — je nachdem, was installiert ist).Certbot skipped — issue SSL in … — das Zertifikat wird über den Let's Encrypt-Schalter im Hosting-Panel ausgestellt; Schritt 06 entfällt für Sie.All checks passed. Punkte mit ! erfordern Aufmerksamkeit; Einzelheiten werden ins Log geschrieben, dessen Pfad das Skript ganz am Ende ausgibt (Log: …).
Damit das Dashboard über eine Adresse wie monitor.example.com erreichbar ist und ein kostenloses SSL erhält, muss die Domain auf den Server zeigen. Erstellen Sie im DNS-Verwaltungspanel (beim Registrar oder Hoster) einen A-Eintrag:
Prüfen Sie nach einigen Minuten (manchmal bis zu einer Stunde), ob die Domain auf den Server zeigt:
/var/www/monitor angelegt und die Apache-Site eingerichtet (DocumentRoot auf das Panel-Stammverzeichnis, PHP-FPM, AllowOverride für .htaccess). In der Ausgabe des Skripts ist das die Zeile vhost … → DocumentRoot …. Ein separates Verzeichnis oder ein vhost muss nicht angelegt werden – einfach die Dateien hochladen und die Rechte setzen.
Zweig „Server mit Hosting-Panel“ (in der Ausgabe: Control panel detected (…)). Über die Websites auf einem solchen Server bestimmt das Panel, und einen eigenen vhost legt das Skript bewusst nicht an — er würde beim ersten Neuaufbau der Konfigurationen durch das Panel überschrieben. Das Vorgehen:
public_html dieser Domain: neben index.php, api/, assets/ müssen dort auch die Dienstdateien und -ordner config.php, includes/, data/, tmp/, logs/, keys/, cron/, database/ liegen. Nichts muss oberhalb des Web-Roots ausgelagert werden: die Dienstordner sind durch die .htaccess aus der Distribution gesperrt, unter Nginx durch die Sperre, die das Skript in die Konfiguration der Domain eingetragen hat.config.php (Schritt 05). Ersetzen Sie die Pfade in den Befehlen durch /home/konto/web/domain/public_html und den Eigentümer durch den Benutzer dieser Domain anstelle von www-data.Zweig „vhost von Hand anlegen“ (in der Ausgabe: No vhost created (no domain given)). Das kommt nur beim Profil „Konfigurierter Server“ vor, wenn keine Domain übergeben wurde. Am einfachsten ist es, den Befehl aus dem Benutzerkonto erneut auszuführen und dabei die Domain anzugeben:
Ein erneuter Start ist gefahrlos: bereits Erledigtes wird nicht doppelt ausgeführt. Muss der vhost dennoch von Hand angelegt werden — hier ist dieselbe Konfiguration, die das Installationsprogramm schreibt:
ServerName ist hier zwingend. Ein vhost ohne Namen wird zur Standard-Website von Apache und beantwortet dann Anfragen für fremde Domains auf demselben Server. Aus demselben Grund deaktivieren Sie auf einem konfigurierten Server nicht 000-default.conf: diese Site könnte für einen produktiven Zweck umgebaut worden sein — auf einem frischen VPS entfernt das Installationsprogramm sie selbst, hier ist das nicht nötig.
! Nginx does not read .htaccess). Nginx liefert statische Dateien direkt von der Platte aus und liest die .htaccess nicht — die Dienstordner wären dann nach außen offen, obwohl Apache sie korrekt sperrt. Das Skript hat die Datei mit den Sperren bereits vorbereitet; sie muss im Block server{} Ihrer Website eingebunden und Nginx neu geladen werden:
my.arciveo.com → „Downloads“ heruntergeladen. Entpacken Sie das Archiv vor dem Upload auf den Server.
Laden Sie den Inhalt der Distribution nach /var/www/monitor hoch (sodass darin public/, assets/, config.php usw. liegen) – per SFTP/SCP (FileZilla / WinSCP) oder mit dem Befehl scp vom lokalen Rechner:
ServerName), übergibt man sie bereits in Schritt 01 an den Autokonfigurations-Befehl: … | sudo bash -s -- monitor.example.com (oder gibt die Domain im Feld „Panel-Domain“ im Benutzerkonto an). Wurde keine Domain übergeben, antwortet das Panel auf jeden Host und über die IP-Adresse, und den ServerName trägt certbot beim Ausstellen des SSL-Zertifikats ein (Schritt 06); eine Neuinstallation ist nicht nötig.
root oder per SFTP hochgeladen, gehören die Dateien root, und der Webserver (www-data) kann sie nicht lesen – das Panel öffnet sich leer oder mit Fehler 403 (im Log: .htaccess unreadable / directory not executable). Der Befehl unten behebt das:
Schalten Sie den SFTP-Upload für sich selbst frei. Nach dem Befehl oben gehören alle Dateien www-data, während FileZilla / WinSCP sich unter Ihrem eigenen Benutzer verbinden — der Upload scheitert dann mit SSH_FX_PERMISSION_DENIED (Permission denied). Wählen Sie eine der beiden Varianten.
Variante A — eine ACL nur für Ihren Benutzer (empfohlen). Schreibrechte bekommen nur Sie; der Webserver kann den Panel-Code weiterhin nicht überschreiben:
Variante B — über die Gruppe www-data. Einfacher, aber der Webserver erhält ebenfalls Schreibrechte auf die Panel-Dateien: bei einer Schwachstelle in PHP ließe sich der Code austauschen. Die Reihenfolge der Befehle ist wichtig — config.php und die Arbeitsordner werden zuletzt abgesichert:
id deploy — in der Gruppenliste muss www-data erscheinen; ls -ld /var/www/monitor — Rechte drwxrwsr-x, das s anstelle von x bedeutet, dass setgid gesetzt ist.
Erstellen Sie Datenbank und Benutzer und importieren Sie dann das Schema. Der Datenbank-Block wird vollständig ins Terminal eingefügt (sudo mysql meldet root über den Unix-Socket an — kein root-Passwort nötig). monitor_db und monitor_user sind Beispielnamen, Sie können beliebige eigene wählen; merken Sie sich Datenbankname, Benutzer und Passwort — Sie tragen sie im nächsten Schritt in config.php ein:
admin beim ersten Aufruf im Browser selbst (aus database/db.sql), sofern die Datenbank leer ist.
Falls die Tabellen nicht angelegt wurden (das Dashboard zeigt einen Fehler bei der Datenbankverbindung oder einen leeren Bildschirm statt des Anmeldeformulars) — importieren Sie das Schema von Hand. Der Befehl wird im Panel-Stammverzeichnis ausgeführt, die Werte stammen aus dem Block oben:
$DBNAME / $DBUSER / $DBPASS bereits „vergessen“ (neue Terminal-Sitzung) — setzen Sie die Werte von Hand in den Befehl ein oder legen Sie sie mit denselben drei Zeilen aus dem Block oben erneut fest.
sudo rules NOT written — dann gab es nichts, woran sich das Panel-Konto hätte erkennen lassen (die Dateien waren noch nicht hochgeladen), und die Regeln wurden nicht angelegt. Ohne sie bleiben Bereiche wie Firewall, Fail2ban und CrowdSec leer. Jetzt, da die Dateien vorhanden sind, führen Sie den Befehl aus dem Benutzerkonto noch einmal aus und benennen Sie das Konto ausdrücklich:
www-data ersetzen Sie durch den Benutzer, unter dem das PHP Ihrer Website läuft (bei einem Hosting-Panel ist das in der Regel der Eigentümer der Domain). So finden Sie ihn heraus:
/etc/sudoers.d/monitor existiert und enthält Zeilen mit Ihrem Benutzer.
config.php im Wurzelverzeichnis des Dashboards (/var/www/monitor/config.php) ist die einzige Datei, die von Hand bearbeitet werden muss. Alle Dashboard-Einstellungen sind darin als define()-Konstanten festgelegt. Öffnen Sie sie im Editor:
Tragen Sie Ihre Werte an den hervorgehobenen Stellen ein; den Rest lassen Sie unverändert:
Was zu ändern ist:
DB_NAME, DB_USER, DB_PASS — exakt derselbe Datenbankname, Benutzer und dasselbe Passwort, die Sie beim Anlegen der DB in Schritt 04 festgelegt haben (falls Sie die Beispiele behalten haben — monitor_db / monitor_user). DB_HOST und DB_CHARSET nicht anrühren.APP_URL — die vollständige Dashboard-Adresse mit https://, ohne Schrägstrich am Ende und ohne www. Sie muss mit der Domain übereinstimmen, für die Sie die Lizenz aktivieren (Schritt 07), sonst wird der Schlüssel abgelehnt.TIMEZONE — Ihre Zeitzone (Liste — timedatectl list-timezones). Betrifft nur die Anzeige der Daten im Dashboard; auf die Startzeit der cron-Aufgaben hat sie keinen Einfluss (dort gilt die Zeitzone des Systems).SESSION_LIFETIME — nach wie vielen Sekunden Inaktivität das Dashboard eine erneute Anmeldung verlangt (Standard: 8 Stunden). Z. B. 3600 = 1 Stunde, 86400 = 1 Tag.display_errors, log_errors, error_log) — auf Standard belassen.Speichern Sie die Datei (Ctrl+O, Enter, dann Ctrl+X) und starten Sie PHP-FPM neu — sonst werden die Änderungen wegen OPcache nicht übernommen:
640 (in Schritt 03 gesetzt) und eine ausdrückliche Sperre in der .htaccess des Wurzelverzeichnisses. Legen Sie sie nicht in öffentliche Repositories und geben Sie sie dem Support nicht mit echtem Passwort weiter.
http:// ist keine Anmeldung möglich.
Certbot skipped — issue SSL in …). Das Zertifikat wird über den Let's Encrypt-Schalter an der Web-Domain im Panel selbst ausgestellt — so kümmert sich das Panel auch um die Verlängerung.
certbot und das Apache-Plugin wurden bereits von der automatischen Einrichtung installiert. Der DNS der Domain muss bereits auf den Server zeigen (Schritt 02). Ausstellung mit einem Befehl:
Soll das Dashboard auch mit www. erreichbar sein — geben Sie beide Namen in einem Befehl an, sonst zeigt der Browser auf der zweiten Adresse eine Zertifikatswarnung:
Y.<VirtualHost *:443> ein, richtet die Weiterleitung http→https und die automatische Verlängerung ein. Am Ende — Successfully enabled HTTPS.
dig +short monitor.example.com die Server-IP zurückgibt und die Ports 80/443 offen sind (sudo ufw allow 80,443/tcp).
Nach der Ausstellung: https://monitor.example.com öffnet sich mit Schloss, http:// leitet auf https:// weiter.
Öffnen Sie https://monitor.example.com, melden Sie sich mit admin / useradmin an und arbeiten Sie die Checkliste ab:
ARCIVEO-… aus dem Benutzerkonto auf Ihre Domain aktivieren und den Schlüssel unter „Einstellungen“ → „Lizenz“ einfügen. Mehr dazu.public/start_db.php, falls noch vorhanden: es erlaubt, die Datenbank ohne Anmeldung neu anzulegen. Solange die Datei im Panel-Stammverzeichnis oder in public/ liegt, warnt das Panel mit einem roten Banner davor.sudo /usr/local/bin/clamav-scan.sh) belastet Platte und Prozessor stark und kann eine Stunde und länger dauern — auf einem produktiven Server warten Sie besser den nächtlichen Lauf um 01:30 ab. Die Bereiche „Datenträger (SMART)“, „Leistung“ und „Sicherheitsupdates“ füllen sich von selbst: alle 30 Minuten, alle 5 Minuten bzw. einmal pro Stunde.