Virencheck beim Dateiupload
Ziel
Mit diesem StEP soll die Möglichkeit geschaffen werden, beim Hochladen von Dateien einen Virenscan durchzuführen.
Beschreibung
Dateien, die in Stud.IP hochgeladen werden, können von verschiedensten Quellen stammen. Nicht immer ist auf den Rechnern der jeweiligen Anwender auch ein (aktueller) Virenscanner installiert, der für eine gewisse Sicherheit sorgt, dass diese Dateien virenfrei sind. Da hochgeladene Dateien in Stud.IP potenziell von vielen anderen Personen heruntergeladen werden können, erscheint es sinnvoll, schon beim Upload die jeweilige Datei durch einen Virenscanner überprüfen zu können.
Maßnahmen
Überblick
Der Uploadprozess wird durch eine Überprüfung der jeweiligen Datei durch einen extern installierten Virenscanner ergänzt. Nur wenn dieser eine unverseuchte Datei meldet, wird diese auch hochgeladen. Diese Überprüfung ist natürlich optional und muss extra in der globalen Konfiguration angeschaltet werden.
Zusätzlich wird ein weiterer cli-Befehl hinzugefügt, der den gesamten upload_doc
-Ordner durch ebendiesen Virenscanner überprüfen kann.
Details
Die Klasse FileManager
wird durch den Virenscan beim Upload ergänzt, falls diese Option in der globalen Konfiguration angeschaltet ist. Dafür wird eine weitere Einstellung in der globalen Konfiguration hinterlegt, die den Pfad zum Virenscanner inklusive Argumenten enthält. Die initiale Implementierung in diesem StEP ist auf die Verwendung von clamav
bzw. dem zugehörigen Daemon clamd
zugeschnitten, jedoch wird der Aufruf in eine eigene Klasse gekapselt, damit hier leicht ausgetauscht oder erweitert werden kann. Es werden keine weiteren Bibliotheken benötigt, der Aufruf wird einfach per exec()
ausgeführt. clamd liefert einen Exitstatus ungleich 0 zurück, falls ein Problem gefunden wurde, die Meldung wird dann einfach als Fehler im Uploaddialog ausgegeben und enthält normalerweise auch die gefundene Virendefinition.
Da clamd normalerweise mit anderen Benutzerrechten als der Webserver läuft, werden die hierfür nötigen Argumente (bei clamd insbesondere --fdpass
) gleich mit zentral beim Aufrufpfad hinterlegt. Das ist über direkte Socket- oder TCP-Konfiguration nicht so einfach realisierbar, weil dort mit Streams gearbeitet werden müsste und dafür wieder eigene Größenlimits bei clamd einzustellen sind.
Das cli-Skript verwendet ebenfalls diesen Pfad, verhält sich also exakt genauso wie der Aufruf beim Upload. Da der aufzurufende Pfad in der globalen Konfiguration liegt und diese nur von Roots geändert werden kann, bestehen keine Sicherheitsbedenken.
Der Aufruf selbst ist in einer neuen Klasse Virusscan
gekapselt.
Kurzbezeichnung des Integrationsaufwandes
-
gering
Wenige Zeilen Code imFileManager
, zwei neue Einträge in der globalen Konfiguration und ein neues Kommando fürcli
.
Durchführung
data-quest (Thomas)