Anti-Virus
Die App files_antivirus lässt jede hochgeladene Datei von einem Virenscanner
prüfen, bevor owncloud.online sie speichert. Meldet der Scanner Schadsoftware,
lehnt die App den Upload ab. Ein Hintergrund-Job prüft zusätzlich Dateien, die
schon gespeichert sind. Sinnvoll ist das überall, wo Dateien aus fremden Quellen
ankommen, etwa über öffentliche Links oder von Gästen.
Verfügbarkeit
Öffentlich im Marketplace, ohne API-Schlüssel. App-ID files_antivirus,
Version 1.3.11. Name im Markt: „Anti-Virus“.
Voraussetzungen
| Bereich | Anforderung |
|---|---|
| owncloud.online | 11.x |
| PHP | 8.4 oder neuer |
| Virenscanner | ClamAV, entweder als Dienst clamd (TCP oder Unix-Socket) oder als Programm clamscan |
| Cron | für die Prüfung gespeicherter Dateien, siehe Hintergrund-Jobs (Cron) |
Im Produktivbetrieb verwenden Sie clamd. Der Dienst hält die Signaturen im
Speicher. clamscan lädt sie für jede Datei neu und verlangsamt so jeden Upload
deutlich.
Unter Debian und Ubuntu bringt das Paket clamav-daemon den Dienst clamd und
die automatische Aktualisierung der Signaturen mit:
sudo apt install clamav-daemon
sudo systemctl status clamav-daemon
Direkt nach der Installation startet der Dienst erst, wenn freshclam die
Signaturen heruntergeladen hat. Meldet systemctl status ihn noch als inaktiv,
warten Sie einige Minuten und starten Sie ihn dann mit
sudo systemctl start clamav-daemon.
Der Webserver-Benutzer (meist www-data) muss den Socket des Dienstes öffnen
dürfen.
Installation
Installieren Sie ClamAV vor der App. Dann findet die App den Scanner selbst: Sie
probiert bei der Installation zuerst localhost:3310 (TCP), dann den Socket
/var/run/clamav/clamd.ctl und bleibt sonst bei „ClamAV ausführbar“. Diese
Suche läuft nur einmal. Lief clamd zu dem Zeitpunkt noch nicht, stellen Sie
den Modus danach von Hand ein (siehe „Einrichtung“).
In der Weboberfläche: im App-Menü links oben Markt öffnen, die App „Anti-Virus“ aufrufen und Installieren klicken.
Auf der Kommandozeile:
sudo -u www-data php8.4 occ market:install files_antivirus
market:install lädt die App, installiert sie und schaltet sie ein. Ist die App
schon vorhanden und nur abgeschaltet, genügt
sudo -u www-data php8.4 occ app:enable files_antivirus.
Einrichtung
Die Einstellungen stehen unter Einstellungen → Administration → Sicherheit, Abschnitt „Antivirus-Konfiguration“. Speichern übernimmt die Werte und startet sofort eine Testprüfung mit der EICAR-Testdatei, einer harmlosen Datei, die jeder Scanner als Fund meldet. Erkennt der Scanner sie nicht, erscheint „Test war nicht erfolgreich. Bitte überprüfe die Antivirus-Einstellungen“.
| Feld | Schlüssel | Vorgabe | Bedeutung |
|---|---|---|---|
| Modus | av_mode |
executable |
„ClamAV Daemon (Unix Socket)“ (socket), „ClamAV Daemon (TCP Socket)“ (daemon) oder „ClamAV ausführbar“ (executable) |
| Socket | av_socket |
/var/run/clamav/clamd.ctl |
Socket des clamd, nur im Modus socket |
| Host, Port | av_host, av_port |
localhost, 3310 |
Adresse des clamd, nur im Modus daemon |
| Stream-Länge | av_stream_max_length |
26214400 |
Bytes je Verbindung zum Scanner; darf nicht größer sein als StreamMaxLength in der clamd.conf |
| Dateigrößenbeschränkung, -1 bedeutet keine Beschränkung | av_max_file_size |
-1 |
Grenze in Bytes; größere Uploads prüft die App nicht |
| Hintergrund-Scan | av_scan_background |
true |
„Aktiviert“ oder „Deaktiviert“ |
| Wenn infizierte Dateien bei einem Hintergrund-Scan gefunden werden | av_infected_action |
only_log |
„Nur protokollieren“ (only_log) oder „Datei löschen“ (delete) |
Die Schlüssel sind App-Werte der App files_antivirus. Auf der Kommandozeile,
zum Beispiel für den Socket-Betrieb:
sudo -u www-data php8.4 occ config:app:set files_antivirus av_mode --value socket
sudo -u www-data php8.4 occ config:app:set files_antivirus av_socket --value /var/run/clamav/clamd.ctl
Die Testprüfung läuft nur beim Speichern in der Oberfläche, nicht nach
config:app:set.
Zwei Werte stehen nur in config/config.php. Die Oberfläche zeigt sie an
(„Pfad zu clamscan“, „Zusätzliche Kommandozeilenoptionen (Kommata-getrennt)“),
ändern lassen sie sich dort nicht:
'files_antivirus.av_path' => '/usr/bin/clamscan',
'files_antivirus.av_cmd_options' => '',
av_cmd_options nimmt mehrere Optionen durch Kommas getrennt auf.
Regeln
Unter Fortgeschritten → „Regeln“ steht, wie die App die Antwort des Scanners
deutet: im Modus „ClamAV ausführbar“ nach dem Rückgabewert von clamscan, in den
Daemon-Modi nach der Ausgabe von clamd. Jede Regel ordnet einem Wert einen
Status zu: „Säubern“, „Infiziert“ oder „Ungeprüft“. Die mitgelieferten Regeln
passen zu ClamAV. Nach versehentlichen Änderungen stellt Auf Standard
rücksetzen sie wieder her.
Nutzung
Anwender merken die App nur, wenn ein Upload abgewiesen wird:
| Situation | Meldung |
|---|---|
| Der Scanner meldet Schadsoftware. | „Der Virus %s wurde in der Datei gefunden. Das Hochladen konnte nicht abgeschlossen werden.“ |
| Die Prüfung liefert kein Ergebnis. | „The file could not be checked for viruses. Upload cannot be completed, please try again.“ (nicht übersetzt) |
| Der Scanner ist nicht erreichbar. | „Die owncloud.online antivirus App ist entweder falsch konfiguriert, oder der externe Virenscanner Dienst ist nicht erreichbar. …“ |
Ist die App activity eingeschaltet, sieht der Eigentümer zusätzlich den
Eintrag „Datei %s ist infiziert mit %s“.
Was bei einem Fund passiert
| Weg | Reaktion |
|---|---|
| Upload eines angemeldeten Kontos | Upload abgewiesen, geschriebene Teile gelöscht, Warnung im Protokoll mit Virusname, Konto und Pfad, Aktivitätseintrag |
| Upload über einen öffentlichen Link | Upload abgewiesen, bevor etwas geschrieben wird; Warnung im Protokoll, kein Aktivitätseintrag |
| Hintergrund-Scan mit „Nur protokollieren“ | Datei bleibt liegen; Protokolleintrag „File is infected.“ und Aktivitätseintrag, bei jedem Lauf erneut |
| Hintergrund-Scan mit „Datei löschen“ | Datei wird gelöscht; Protokolleintrag „Infected file deleted.“ und Aktivitätseintrag |
Beim Upload gilt „Wenn infizierte Dateien bei einem Hintergrund-Scan gefunden werden“ nicht: Ein infizierter Upload wird immer abgewiesen.
Grenzen und Hinweise
- Scanner-Ausfall sperrt Uploads. Ist der Scanner nicht erreichbar oder
bricht er mitten in der Prüfung ab, weist die App den Upload ab. Das betrifft
auch das Speichern im Texteditor und das Erzeugen von Vorschaubildern.
Überwachen Sie
clamdwie den Webserver. - Größengrenze. Uploads über
av_max_file_sizespeichert die App ungeprüft. Bei Uploads über öffentliche Links prüft sie nur den Anfang bis zu dieser Grenze. Der Hintergrund-Scan nimmt größere Dateien nicht auf. - Chunk-Uploads. Die App prüft nicht die einzelnen Teile, sondern die zusammengesetzte Datei.
- Hintergrund-Scan. Der Job läuft höchstens alle 15 Minuten und prüft je Lauf 10 Dateien, also rund 960 am Tag. Ein großer Altbestand braucht entsprechend lange. Geänderte Dateien kommen über ihren ETag erneut an die Reihe. Er prüft nur Dateien im Hauptspeicher der Konten, keine externen Speicher, und überspringt leere Dateien und Ordner.
- Infizierte Dateien mit „Nur protokollieren“ prüft der Job bei jedem Lauf erneut und schreibt jedes Mal einen Protokoll- und einen Aktivitätseintrag. Weil er je Lauf nur 10 Dateien schafft, bremsen solche Dateien den übrigen Bestand; ab zehn liegengebliebenen Funden kann der Hintergrund-Scan ganz stehen bleiben. Entfernen Sie gemeldete Dateien zügig oder wählen Sie „Datei löschen“.
- S3 als Primärspeicher. Ein Objektspeicher kennt keine Teildateien. Wird beim Überschreiben einer Datei die neue Fassung abgewiesen, entfernt die App die Datei selbst, ohne Papierkorb. Bis zum erneuten Upload fehlt sie.
- Termine und Kontakte liegen in der Datenbank und werden nicht geprüft.
- ICAP. Die Auswahl „Modus“ enthält auch drei ICAP-Betriebsarten. Sie
verlangen einen Lizenzschlüssel, für den es in owncloud.online keinen
Bezugsweg gibt. Ohne gültige Lizenz laufen sie höchstens 24 Stunden, danach
arbeitet die App im Modus „ClamAV ausführbar“. Ist
clamscannicht installiert, scheitert dann jeder Upload. Nutzen Sie ClamAV. - Umzug. Betriebsart, Adressen und Regeln kommen mit der Datenbank mit. Zeigen
sie auf einen Scanner, den der neue Server nicht erreicht, scheitert jeder
Upload. Prüfen Sie die Einstellungen direkt nach dem Umzug.
av_pathundav_cmd_optionsaus sehr alten Datenbanken übernimmt die App nicht; tragen Sie sie bei Bedarf selbst inconfig/config.phpein.
Mehr zu Betriebsarten, Hintergrundprüfung und Uploadgeschwindigkeit: Virenprüfung.
Fehlersuche
Die App schreibt unter der Kennung files_antivirus ins Serverprotokoll.
Größen, Übersprungsgründe und Antworten des Scanners stehen nur auf Stufe
Debug:
sudo -u www-data php8.4 occ log:manage --level debug
Stellen Sie die Stufe danach wieder zurück, siehe Serverprotokoll und Fehlermeldungen.
| Symptom | Ursache | Abhilfe |
|---|---|---|
| „Test war nicht erfolgreich. Bitte überprüfe die Antivirus-Einstellungen“ | Der Scanner ist nicht erreichbar oder erkennt die EICAR-Datei nicht. | Prüfen, ob clamd läuft, ob Socket oder Host und Port stimmen und ob Signaturen geladen sind |
| Protokoll: „Could not connect to socket …“ oder „Could not connect to host …“ | clamd läuft nicht, oder der Webserver-Benutzer darf den Socket nicht öffnen. |
Dienst starten, Rechte am Socket prüfen |
| Protokoll: „Unexpected response to ping …“ oder „Unexpected response to version …“ | An der Adresse antwortet kein ClamAV-Dienst. | Socket-Pfad oder Host und Port korrigieren |
| Protokoll: „The antivirus executable could not be found at path …“ | files_antivirus.av_path zeigt ins Leere. |
Pfad in config/config.php korrigieren |
| Protokoll: „Failed to write a chunk. Check if Stream Length matches StreamMaxLength in ClamAV daemon settings“ | Die Stream-Länge ist größer als StreamMaxLength des clamd. |
Beide Werte angleichen |
| Protokoll: „No matching rules. Please check antivirus rules.“ | Die Regeln sind leer oder verstellt. | Fortgeschritten → Auf Standard rücksetzen |
| Protokoll: „No valid license found for icap scanner …“ | Ein ICAP-Modus ist eingestellt. | ClamAV-Modus wählen |
| Debug-Protokoll: „Scanning is skipped.“ | Die Datei ist größer als die Dateigrößenbeschränkung, oder ein einzelner Teil eines Chunk-Uploads kommt an. | Grenze anheben oder -1 setzen; bei Chunk-Uploads ist das normal, geprüft wird die zusammengesetzte Datei |