F-Prot:Linux

Aus KissDoc

Wechseln zu: Navigation, Suche
Deprecated

Dieses Dokument ist veraltet und wird nicht mehr gewartet. Es gibt jedoch einen "neuen" Weg ;).
KissDoc:Deprecated

Inhaltsverzeichnis

Thema: F-Prot

Top

Allgemein

Die Software für Linux setzt sich aus drei Teilen zusammen, welche auch einzeln beziehbar sind:

  • ein on-demand Scanner f-prot (Primärscanner)
  • ein daemon f-protd (per HTTP Protokoll für Scripte verwendbar)
  • eine Bibliothek für andere Dienste (RealTime Scan)

Die Installation unter Linux Debian kann nicht mit apt-get erfolgen, da F-Prot aus lizenzrechtlichen Gründen nicht distributiert wird. Es ist zwar möglich, sich das Package f-prot-installer bzw. fp-linux-fs zu installieren, dieses enthält aber keine aktuelle Version.

Aktuell verwenden wir keine F-Prot mehr. Sollte je wieder ein $Scanner nötig sein, wird es aber wohl wieder F-Prot sein ;).

Top

Installation

Für die Standard-Installation steht zum einen ein Debian-File fp-linux-fs_x.x.x-x_i386.deb zu Verfügung, zum anderen ein allgemeine Linuxvariante fp-linux-fs_x.x.x-x_i386.tar.gz. Die .deb-Installation erfolgt einfach mit dpkg, die tar.gz-Variante wird entpackt und anschliessend ein Installationsskript install-f-prot.pl aufgerufen. Beide Installationsvarianten führen folgende Schritte durch:

  • Die Installation der Binarys in /usr/local/f-prot
  • Erstellung eines Symlink des Binarys nach /usr/local/sbin/f-protd
  • Erstellung eines Start/Stop-Scripts /etc/init.d/f-protd
  • Einrichtung des daemon mit Symlinks s12f-prot in /etc/rc[3|5].d und k21f-prot in /etc/rc[1|3|5].d (Die Symlinks sind etwas seltsam verteilt !)
  • Bereitstellung eines Updatescriptes /usr/local/f-prot/check-updates.sh für die Virendefinitionsdateien. Dieses ändert allerdings die Zugriffsrechte sicherheitskritisch von rw-r--r-- auf rwxr-x-r-x !

Bei einem Update (Überinstallation) von F-Prot werden alle Binarys und Scripte vollständig ersetzt, funktioniert also gut. Allerdings ist das fest eingebrannte Binary-Verzeichnis /usr/local/f-prot von F-Prot für eine kommerzielle Software nicht gerade günstig.

Kommerzielle Zusatzsoftware sollte aus Übersichtsgründen nach /opt installiert werden. Das hat allerdings den Nachteil: ein per Hand installiert heisst immer per Hand installiert, aber das ist ein anderes Thema. Da beide Varianten (.deb, *tar.gz) den Installationspfad fest eingebrannt haben, sind manuelle Korrekturen notwendig. Dies sind aber (zumindest derzeitig) überblickbar:

  1. Das Zielverzeichnis /opt/f-prot erstellen.
  2. Die Datei fp-linux-fs_x.x.x-x_i386.tar.gz nach /tmp kopieren und entpacken.
  3. Den Inhalt in das Zielverzeichnis /opt/f-prot kopieren.
  4. Das /tmp-Verzeichnis wieder säubern
  5. Es werden folgende Symlinks erstellt:
    • /opt/f-prot/tools/check-updates.pl nach /opt/f-prot/check-updates.sh (ist zwar nicht unbedingt notwendig, aber so arbeitet auch die Originalinstallation)
    • /opt/f-prot/f-prot.sh nach /usr/local/bin/f-prot
    • /opt/f-prot/f-protd nach /usr/local/sbin/f-protd
    • Die Manpages aus man_pages nach /usr/share/man/man[1-8]/
  6. Es werden folgende Dateien kopiert | verschoben | gelöscht:
    • Das nicht verwendbare Installationsskript install-f-prot.pl wird gelöscht.
    • Die mitgelieferte html-Dokumentation im Verzeichnis doc_fs wird dahin verschoben, wo sie auch per http zugänglich ist.
    • Es wird das init-Skript aus tools/rc_script/f-protd.xxx nach /etc/init.d/f-prot kopiert. Die entprechenden Symlinks in rc[0-6].d werden nicht gesetzt, wir sehen darin momentan keinen Bedarf.
  7. Durch die fest eingebrannten Pfade müssen wir jetzt noch in einigen Dateien Pfadersetzungen von /usr/local/f-prot nach /opt/f-prot vornehmen. Es werden folgende Dateien modifiziert:
    • /opt/f-prot/tools/check-updates.pl
    • /opt/f-prot/f-prot.sh
    • /etc/init.d/f-protd
Top

Testscan

Einen ersten Test, ob der Scanner funktioniert, erreicht man mit f-prot datei. Für ein positives Testergebnis kann der offizielle Testvirus von Eikar verwendet werden. Dazu wird eine Datei mit nachfolgendem Inhalt erstellt, gespeichert und gescant.

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

F-Prot sollte jetzt einen gefundenen Virus melden. Die Bescheibung des Binarys ist im bekannten man Format gut umgesetzt.

Top

Update der Virusdefinionen

Für das Update der Virendefinitionen steht von F-Prot das Skript tools/check-updates.pl zur Verfügung. Es verbindet sich mit dem Download-Server von FRISK über Port 80 und lädt die neuesten Viren-Signaturen herunter. Allerdings meldet das Skript momentan auf stderr einen Error, das dieses Update-Skript veraltet sei (obwohl es aus der neuen Installation kommt) und das binary f-prot nicht finden kann. Die Meldung kann aber ignoriert werden, da das Update durchläuft. Ausserdem beinhaltet dieses Skript keine vernünftige Protokollierung. Deshalb wird ein Skript mit folgenden Erweiterungen vorgeschaltet:

  • Eine Start-Meldung zum syslog senden mit Priorität info
  • Das von FRISK mitgeliferte Skript check-updates.pl aufrufen und auf Erfolg prüfen
  • Die Zugriffsrechte der Signaturdateien korrigieren (Die Dateien müssen kein x-Bit haben)
  • Eine Stop-Meldung zum Syslog senden mit Priorität info und folgenden Zusatzinformationen:
    • Welche Signaturdateien sich geändert haben
    • Die Gesamtanzahl der vorhandenen Virensignaturen
  • Bei Fehlern von check-updates.pl eine Message mit Priorität warn zum syslog senden
  • Auf eine neue Version von F-Prot prüfen und bei Vorhandensein eine Meldung an syslog mit Priorität notice senden (noch nicht sauber möglich, da eine neue Version nur über ein parsen der Webseite von FRISK ermittelbar ist - kein RSS)
Top

Automatisierung

(De)Installation und Update sind Administratoraufgaben. Deshalb ist der einmalige Aufwand eines Skriptes gerechfertigt, welches diese Aufgaben übernimmt. Dazu schreiben wir ein Skript namens fprot.sh, welches folgende Argumente versteht und entsprechend verarbeitet:

  • install - Installation von f-prot
  • remove - Deinstallation von f-prot
  • upgrade - Überinstallation der f-prot Binary, wenn neue Version verfügbar (remove + install)
  • update - Aktualisierung der Virus-Signaturen

Der Skriptaufruf mit install, remove und upgrade erfordert eine Bestätigung, ist also interaktiv. Der Parameter update hingegen ist nicht interaktiv und eignet sich für einen Cron-Job, um die Virensignaturen für den Scanner regelmässig auf dem neuesten Stand zu halten. Dass dieses Skript root-Rechte benötigt, versteht sich von selbst.

Das Script ist für die F-Prot-Version 4.5.4 getestet. Bei einer Installation wird ein bereits vorhandenes Script /etc/init.d/f-protd überschrieben, eigene Modifikationen sind also vorher zu sichern.

Da wir dieses Script derzeit nicht beötigen und es auf der Abschußliste steht, stellen wir hier mal die letzte Version ein:

#!/bin/bash
# /usr/local/sbin/fprot.sh
# install|remove|update the f-prot scanner, update is only for the sinature-files
# update: 
# - update the virus-signatures, change permissions of signatur-files (*.DEF) 
# - send message to syslog
# - use the original-script check-updates.sh from f-prot
# written by Pischti

#SECURITY
if test "$(id -u)" != "0"; then
	echo "only for root"
	exit 1
fi

#VARIABLES 
DIRNAME='f-prot'
OLDPATH='/usr/local/'${DIRNAME}
INSTALLPATH='/opt/'${DIRNAME}

TMPPATH='/tmp'
SOURCEFILE='/usr/local/lib/install/fprot/fp-linux-fs-4.5.4.tar.gz'

INITSCRIPT='/etc/init.d/f-protd'
BINPATH='/usr/local/bin'
SBINPATH='/usr/local/sbin'
DOCPATH='/usr/local/man/security/f-prot/foreign'
MANPATH='/usr/share/man'

#INITSCRIPT='/tmp/f-protdx'
#BINPATH='/tmp'
#SBINPATH='/tmp'
#DOCPATH='/tmp/foreign'
#MANPATH='/tmp'

SIGFILES[0]='MACRO.DEF'
SIGFILES[1]='SIGN.DEF'
SIGFILES[2]='SIGN2.DEF'

PROGRAM=$(basename $0)
FACILITY='user'
PRIORITY='info'
PRIORITY_ERR='warn'

MSG1="starting"
MSG2="updated files:"
MSG_ERR="check-updates.sh failed"

#####################################################################

_install(){
	read -p "install f-prot?(y)" quest
	if test "${quest}" != "y" ; then
		echo "abort install"
		exit 1
	fi

	if ! test -r ${SOURCEFILE}; then
		echo "${SOURCEFILE} not exist. abort install."
		exit 1
	fi
	
	if test -d ${INSTALLPATH}; then
		echo "allready installed. abort install"
		exit 1
	fi

	#extract and copy to INSTALLPATH	
	mkdir -p ${INSTALLPATH}
	cp "${SOURCEFILE}" "${TMPPATH}/"
	cd ${TMPPATH}
	tar -xzf "${TMPPATH}/$(basename ${SOURCEFILE})" 
	rm "${TMPPATH}/${DIRNAME}/install-f-prot.pl"
	cp -R  ${TMPPATH}/${DIRNAME}/* "${INSTALLPATH}/"

	#clean up TMPDIR
	rm  "${TMPPATH}/$(basename ${SOURCEFILE})"
	rm -r "${TMPPATH}/${DIRNAME}"

	#move documentation 
	mkdir -p ${DOCPATH}
	mv "${INSTALLPATH}/doc_fs/"* "${DOCPATH}/"
	rmdir "${INSTALLPATH}/doc_fs"
	
	#create the symlinks to bin, sbin, man and updater
	ln -s "${INSTALLPATH}/f-prot.sh" "${BINPATH}/f-prot"
	ln -s "${INSTALLPATH}/f-protd"   "${SBINPATH}/f-protd"
	ln -s "${INSTALLPATH}/tools/check-updates.pl"   "${INSTALLPATH}/check-updates.sh"
	ln -s "${INSTALLPATH}/man_pages/f-prot.1"   "${MANPATH}/man1/f-prot.1"
	ln -s "${INSTALLPATH}/man_pages/f-protd.8"  "${MANPATH}/man8/f-protd.8"
	ln -s "${INSTALLPATH}/man_pages/check-updates.pl.8"   "${MANPATH}/man8/check-updates.pl.8"

	#copy the init-script for daemon
	cp "${INSTALLPATH}/tools/rc_scripts/f-protd.rc-debian" "${INITSCRIPT}"

	#replace paths in some files
	sed  -i -s 's%'${OLDPATH}'%'${INSTALLPATH}'%g' "${INITSCRIPT}"
	sed  -i -s 's%'${OLDPATH}'%'${INSTALLPATH}'%g' "${INSTALLPATH}/f-prot.sh"
	sed  -i -s 's%'${OLDPATH}'%'${INSTALLPATH}'%g' "${INSTALLPATH}/tools/check-updates.pl"

	#set good rights
 	chmod 0760 "${INITSCRIPT}"
 	chmod 0755 "${INSTALLPATH}/f-prot.sh" 
 	chmod 0760 "${INSTALLPATH}/tools/check-updates.pl" 
	 
	echo "install success"
}

_remove(){
	read -p "remove f-prot?(y)" quest
	if test "${quest}" != "y" ; then
		echo "abort remove"
		exit 1
	fi
	rm -r "${INSTALLPATH}"
	rm -r "${DOCPATH}"
	rm    "${BINPATH}/f-prot"
	rm    "${SBINPATH}/f-protd"
	rm    "${INITSCRIPT}"
	rm    "${MANPATH}/man1/f-prot.1"
	rm    "${MANPATH}/man8/f-protd.8"
	rm    "${MANPATH}/man8/check-updates.pl.8"
	echo "remove  success"
}

_upgrade(){
	echo "comming soon"
}

_update(){

	logger -t $PROGRAM -p $FACILITY.$PRIORITY $MSG1

	#read the timestamps before updating
	for i in $( seq 0 $[${#SIGFILES[*]}-1]  ) ; do
		before[$i]=$(ls --time-style="+%Y-%m-%d %H:%M:%S" -l "${INSTALLPATH}/${SIGFILES[$i]}" | awk '{print $6 $7}') 
	done

	#run the f-prot-updater
	${INSTALLPATH}/check-updates.sh
	ret=$?
	if test $ret -ne 0; then
		logger -t $PROGRAM -p "$FACILITY.$PRIORITY_ERR" "$MSG_ERR $ret"
		exit 1
	fi

	#read the timestamps after updating
	for i in $( seq 0 $[${#SIGFILES[*]}-1]  ) ; do
		after[$i]=$( ls --time-style="+%Y-%m-%d %H:%M:%S" -l "${INSTALLPATH}/${SIGFILES[$i]}" | awk '{print $6 $7}') 
	done

	#change permission of sinatur-files
	for i in $( seq 0 $[${#SIGFILES[*]}-1]  ) ; do
		chmod 0644 "${INSTALLPATH}/${SIGFILES[$i]}"
	done

	#complete the update-msg with changeg signatur-files
	for i in $( seq 0 $[${#SIGFILES[*]}-1]  ) ; do
		if test "${before[$i]}" != "${after[$i]}"; then
			MSG2_1="${MSG2_1} ${SIGFILES[$i]}"
		fi
	done

	#complete the update-msg with signatures-count
	sigcount=$( f-prot -virno | tail -1 | awk '{print $9}' | sed s/\\.//g)
	MSG2_2="${sigcount} viruses in database"

	logger -t $PROGRAM -p $FACILITY.$PRIORITY  "$MSG2 $MSG2_1 - $MSG2_2"
}


case "$1" in
	install)
		_install
	;;
	remove)
		_remove
	;;
	upgrade)
		_upgrade
	;;
	update)
		_update
	;;
	*)
		echo "USAGE ${PROGRAM} install | remove | upgrade |update "
	;;
esac

exit 0
Top
Persönliche Werkzeuge