Um die Sicherheit des ePages-Systems weiter zu erhöhen, kann die Integrität des System jetzt regelmäßig automatisch überprüft werden.
Dabei wird folgendes Verfahren angewendet:
-
Die relevanten Dateien werden signiert und es Vergleichslisten mit bestimmten Dateieigenschaften angelegt (Sollwertlisten).
-
Die Signaturen bzw. die Vergleichsparameter (Sollwertvergleich) werden per Scheduler automatisch geprüft.
-
Bei Feststellung einer Differenz wird eine Warnung per E-Mail ausgelöst.
Dafür werden ab ePages 6.0.7 (Patch oder Vollinstallation) das Script "CheckIntegrity.PL" und die dazugehörige Konfigurationsdatei "CheckIntegrity.conf" installiert.
Im Abschnitt Installation und Ausführung lesen Sie, wie die Integritätsprüfung standardmäßig eingerichtet und genutzt wird.
Im Abschnitt Auswertung und Fehlermeldung lesen Sie, welche Ergebnisse erstehen und wie Sie im Fehlerfall informiert werden.
Im Abschnitt Konfiguration lesen Sie, wie Sie die Integritätsprüfung bei Bedarf Ihren Erfordernissen anpassen können.
Im Abschnitt Einrichten der Scheduler lesen Sie, wie die entsprechenden Scheduler eingerichtet und gestartet werden.
Im Abschnitt Signieren von externen Cartridges lesen Sie, wie Sie die Integritätsprüfung für selbst entwickelte Cartridges einrichten.
Installation und Ausführung
Die Integritätsprüfung wird mit Patch oder Vollinstallation ab ePages-Version 6.0.7 installiert. Sie wird mit Standardparametern konfiguriert, die den meisten Erfordernissen entsprechen.
Die Integritätsprüfung muss manuell gestartet werden. Gehen Sie dabei wie folgt vor:
Patchinstallation
Führen Sie folgenden Befehl im Patch-Verzeichnis aus:
./patch.sh start_sic
Vollinstallation
Führen Sie folgende Befehle aus:
-
/etc/default/epages6 $PERL $EPAGES/bin/CheckIntegrity.PL -add scheduler /etc/init.d/epages6 start_cron
Auswertung und Fehlermeldung
Der Sollwertvergleich wird standardmäßig jede Minute ausgeführt. Die Signaturen werden jede Stunde geprüft. Tritt eine Differenz auf, werden die abweichenden Dateien in einem .tar.gz-Paket gespeichert und eine Fehlermeldung wird per E-Mail versendet. Diese E-Mail wird standardmäßig an die Adresse gesendet, die im TBO als Empfängeradresse für Fehlermeldungen hinterlegt ist.
Tritt beim nächsten Aufruf genau das gleiche Fehlverhalten auf (die gleichen Dateien haben die gleichen Unterschiede zur Norm).erfolgt keine Reaktion.
Alle Dateien, die CheckIntegrity.PL erzeugt, liegen in:
-
bei root: /root/.epages/CheckIntegrity/
-
bei anderen unprivilegierten Nutzern: $HOME/.epages/CheckIntegrity/
*.NOMINAL : Sollzustand
*.ACTUAL : Istzustand
*.ERROR : Dateisystem-Inkonsistenzen
*.tar.gz : Paket mit von der Norm abweichenden Dateien
Konfiguration
Die Integritätsprüfung wird mit Standardeinstellungen installiert und gestartet, die für die meisten Installationen ausreichend sind.
Bei Bedarf können Sie den Integritätstest speziellen Bedürfnissen oder Notwendigkeiten anpassen. Die Konfiguration wird in folgender Datei eingestellt:
$EPAGES_CONFIG/CheckIntegrity.conf
Die wichtigsten Parameter sind die, mit denen Sie festlegen, welche Dateien in welchen Verzeichnisen wie getestet werden:
- Check=
-
Der Parameter beschreibt, was alles getestet werden soll. Neben der Signatur (signature) können alle Datei-Eigenschaften, die perl -e "stat(FILE)" zurückgibt, getestet werden. owner fasst uid (User) und gid (Group) zusammen.
Beispiel: Check=signature,size,mode,owner,inode,ctime,mtime
- CheckFiles=
-
Nur bei jenen Dateien, deren Suffix in der Liste enthalten ist, wird der Status getestet (sofern Check= etwas anderes als signature enthält).
Beispiel: CheckFiles= .pl|.pm
- CheckPath=
-
Es werden nur Dateien aus den angegebenen Pfaden getestet. Ist SignaturePath= gesetzt, darf hier nur ein Verzeichnis stehen.
Beispiel: CheckPath=$ENV{EPAGES_PERL}/bin
Nachfolgend werden die einzelnen Abschnitte der Standard- Konfigurationsdatei beschrieben. Die Nummern am Anfang der Zeilen stehen nicht in der tatsächlichen Konfigurationsdatei. Sie werden nur benutzt, um auf einzelne Zeilen zu verweisen.
:Default:
1 [:Default:]
2 # Each parameter in this section can also be written as
parameter:HOSTNAME.
3 # If parameter:HOSTNAME exists, then host HOSTNAME uses
parameter:HOSTNAME,
4 # otherwise it uses parameter (HOSTNAME is the short name without
dots).
5
6 # Path to CheckIntegrity.PL (parameter must be set)
7 Command=$ENV{EPAGES}/bin/CheckIntegrity.PL
8 # VarDir contains variable data files (default: ~/.epages)
9 VarDir=
10 ### For GPG:
11 # Path to the gpg program (if not in PATH)
12 GpgPath=
13 # list of public keys (files,dirs,URLs) to import separated by ','
14 PublicKeys=$ENV{EPAGES_CONFIG}/pubring.txt
15 #PublicKeys=http://epages.com/security/b1d28320.txt
16 ### For mail:
17 # e-mail address of sender (default: as defined in MailConnection
resp. MailStore)
18 MailSender=
19 # list of recipients separated by [;,] (default: MailSender)
20 MailRecipient=
21 # EITHER use the e-mail connection as defined in store (only with
ePages perl; default: Site):
22 MailStore=
23 # OR define the e-mail connection explicitly (default: localhost):
24 # Format: passwd:user@server or user@server or server
25 MailConnection=
26 ### For UNIX:
27 # Path to wrapScheduler.sh script
(default: $ENV{EPAGES}/bin/wrapScheduler.sh)
28 WrapSchedulerSh=
29 # Path to wrapScheduler.PL script
(default: $ENV{EPAGES}/bin/wrapScheduler.PL)
30 WrapSchedulerPl=
31 # Use '/bin/env perl' or ePages perl? (default: ePages perl)
32 UseBinEnvPerl=
Der :Default:-Abschnitt enthält Parameter-Werte die gesetzt werden, sofern die Parameter in den eigentlichen Abschnitten fehlen.
- Command=
-
Pfad zu CheckIntegrity.PL, muss für Scheduler gesetzt sein.
- VarDir=
-
Enthält variable ePages-Dateien, es entspricht etwa dem UNIX-/var-Verzeichnis.
- GpgPath=
-
Pfad zur gpg-Exe (Version 1.x oder 2.x), sofern die gpg-Exe nicht schon im Pfad enthalten ist oder gpg an einer unüblichen Stelle installiert wurde. Die gpg-exe testet Die Signatur von ePages-Dateien. Ohne installiertes GPG können Patch und Vollversion nicht installiert werden.
- PublicKeys
-
Durch Komma getrennte Liste von gpg-Public-Keys, die zum Signaturtest benutzt werden sollen. Die Public-Keys können in Dateien, Verzeichnissen oder URLs gespeichert sein.
- MailSender=, MailRecipient=, MailStore=, MailConnection=
-
siehe Abschnitt SendProgramOutput
- WrapSchedulerSh=, WrapSchedulerPl=
-
die Pfade zu den Skripten sind variabel, damit CheckIntegrity.PL außerhalb des ePages-Systems aufgerufen werden kann.
- UseBinEnvPerl=
-
Hat die Variable einen positiven Wert, wird nicht ePages-Perl, sondern das vom Betriebssystem bereitgestellte Perl benutzt. damit kann CheckIntegrity.PL außerhalb des ePages-Systems aufgerufen werden.
:Example:
Alle Abschnitte, die sowohl mit : beginnen als auch enden, werden ignoriert (Ausnahme: :Default:). Der Abschnitt :Example: zeigt alle möglichen Einstellungen, die an CheckIntegrity.PL vorgenommen werden können.
Achtung!: Kein Abschnittsname, der wirklich benutzt werden soll (außer :Default:), darf : enthalten.
34 [:Example:]
35 # check what:
36 Check=signature,size,mode,owner,inode,ctime,mtime
37 # check internal signature of files ending in: (separated by |)
38 InternalSignatures=.conf|.PL|.pl|.pm|.t|.sh
39 # check external signature of files ending in: (separated by |)
40 ExternalSignatures=.so|.exe|.dll
41 # check status of files ending in: (separated by |)
42 CheckFiles=.so|.exe
43 # check where (if SignaturePath isn't defined: path list separated
by ',')
44 CheckPath=$ENV{EPAGES_PERL}/bin
45 # check against (if detached signatures):
46 SignaturePath=$ENV{EPAGES_PERL}/.gpg/bin
47 # run? (1 - yes, else - no)
48 IsActive=1
49 # what? (section names separated by ',')
50 SubTasks=DE_EPAGES_Size,Perl_Size,Perl_Signature,Config,Core
51 # where? (separated by ','; unset -> any)
52 Machine=
53 # when? (job wont't run if Cron= (UNIX) or Schtasks= and At= (Win)
is/are unset)
54 # when? (Unix: minute/hour/day of month/month/day of week)
[see 'man crontab']
55 Cron=* * * * *
56 # when? (Windows: schtasks arguments) [see online help of
schtasks]
57 Schtasks=/st 00:00 /sc MINUTE /mo 1
58 # when? (Windows: at args) [if schtasks runs, ignore at; see
online help of at]
59 At=00:00 /every:5,10,15,20,25,30,35,40,45,50,55
60 # how long the cronjob may take without a subsequent instance
reports
61 # an error? (default: until the next instance occurs)
62 # MaxDuration has one of the formats:
63 # <DAYS>-<HOURS>:<MINUTES> (e.g.: MaxDuration=3-12:00)
64 # <HOURS>:<MINUTES> (e.g.: MaxDuration=2:16)
65 # <MINUTES> (e.g.: MaxDuration=18)
66 MaxDuration=4
67 # what command options? (-section SECTION must be set)
68 Options=-section :Example:
- InternalSignatures=
-
Nur bei jenen Dateien, deren Suffix in der Liste enthalten ist, wird die Signatur getestet (sofern Check= signature enthält). Die Signatur steht am Anfang des zu testenden Dateien. Interne Signaturen können nur bei Dateien, die # als Kommentaranfang erkennen, eingesetzt werden.
- ExternalSignatures=
-
Nur bei jenen Dateien, deren Suffix in der Liste enthalten ist, wird die Signatur getestet (sofern Check= signature enthält). Die Signatur steht in einem extra (detached) Signaturdatei.
- SignaturePath=
-
Enthält die Signaturdateien bei externen Signaturen.
- SubTasks=
-
Enthält Abschnittsnamen von zu einer übergeordneten Task zusammengefassten Abschitten. Wird CheckIntegrity.PL mit -section … aufgerufen, wird nur der angegebene Abschnitt (inkl. SubTasks, sofern vorhanden) ausgeführt. Ohne -section … werden alle SubTasks von Abschnitten mit SubTasks ausgeführt.
- IsActive=, Machine=, Cron=, Schtasks=, At=, MaxDuration=, Options=
-
Werden an der Scheduler durchgereicht, Options= muss -section EIGENER_NAME enthalten.
Real World Sections
Hier werden einige Abschnitte der Standard-Konfigurationsdatei erklärt.
- DE_EPAGES_Signature
-
Checkt die interne Signatur aller Dateien in
70 [DE_EPAGES_Signature] 71 Check=signature 72 InternalSignatures=.pl|.pm 73 CheckPath=$ENV{EPAGES_CARTRIDGES}/DE_EPAGES
- DE_EPAGES_Stat
-
Checkt Größe, Eigentümer, Zugriffsrechte und Zeit der letzten Dateiinhaltänderung aller Dateien in
75 [DE_EPAGES_Stat] 76 Check=size,owner,mode,mtime 77 CheckPath=$ENV{EPAGES_CARTRIDGES}/DE_EPAGES
- Perl_Signature
-
Checkt die externe Signatur aller Dateien in
79 [Perl_Signature] 80 IsActive=0 81 Check=signature 82 ExternalSignatures= 83 CheckPath=$ENV{EPAGES_PERL}/bin 84 SignaturePath=$ENV{EPAGES_PERL}/.gpg/bin
- bin_Signature
-
Checkt die interne Signatur aller Dateien in sind nur bei Dateien, die # als Kommentar-Anfang erlauben, möglich; bei .cmd-Dateien geht das nicht.
90 [bin_Signature] 91 Check=signature 92 InternalSignatures=.PL|.pl|.sh 93 CheckPath=$ENV{EPAGES}/bin
- Core_Signature
-
Checkt die interne Signatur aller Dateien in Core oder WebInterface, die auf .pl oder .pm enden:
99 [Core_Signature] 100 Check=signature 101 InternalSignatures=.pl|.pm 102 CheckPath=$ENV{EPAGES_CARTRIDGES} /DE_EPAGES/Core,$ENV{EPAGES_CARTRIDGES}/DE_EPAGES/WebInterface
- Config_Stat
-
Checkt Größe, Eigentümer, Zugriffsrechte und Zeit der letzten Dateinhaltänderung der Dateien Servlet.conf und log4perl.conf in
104 [Config_Stat] 105 Check=size,owner,mode,mtime 106 CheckFiles=Servlet.conf|log4perl.conf 107 CheckPath=$ENV{EPAGES_CONFIG}
- Task_Cartridges_Hourly
-
Führt stündlich CheckIntegrity.PL von DE_EPAGES_Signature auf UNIX-Rechnern (weil kein At oder Schtasks angegeben) aus. Durch die Option -again wird erreicht, dass System-Inkonsistenzen immer wieder zu einer Fehlermail führen und nicht beim zweiten und weiteren Aufrufen ignoriert werden:
109 [Task_Cartridges_Hourly] 110 IsActive=1 111 SubTasks=DE_EPAGES_Signature 112 Machine= 113 Cron=55 * * * * 114 MaxDuration= 115 Options=-section Task_Cartridges_Hourly -again
- Task_Cartridges_UNIX
-
Führt minütlich CheckIntegrity.PL von DE_EPAGES_Stat und Core_Signature auf UNIX-Rechnern aus:
117 [Task_Cartridges_UNIX] 118 IsActive=1 119 SubTasks=DE_EPAGES_Stat,Core_Signature 120 Machine= 121 Cron=* * * * * 122 MaxDuration=4 123 Options=-section Task_Cartridges_UNIX
Einrichten der Scheduler
Voraussetzung: Kenntnis des ePages-Schedulerkonzepts
Bisher gab es nur ePages-Scheduler, jetzt können unter UNIX auch direkt Cronjobs verwaltet werden. Das hat den Vorteil, dass unter UNIX der gesamte Integritäts-Test außerhalb von ePages laufen kann.
Wird der Option -add der Parameter scheduler=epages mitgegeben, wird der ePages-Scheduler benutzt. Der Parameter kann auch scheduler=cron heißen, dann wird ein Standard-UNIX-Cronjob benutzt (Voreinstellung beim Integritätstest).
Durch das erweiterte Scheduler-Konzept werden Scheduler-Tasks neben $EPAGES_CONFIG/Scheduler.conf und $EPAGES_CONFIG/Scheduler.d/.env auch durch $HOME/.epages/cron.d/ definiert. $HOME ist das Homedir eines der Nutzer root, $AMUSER, ep_appl, ep_db oder ep_web.
Die Dateien in $HOME/.epages/cron.d/* werden bei /etc/init.d/epages6 start_cron (bzw. start) nach /etc/cron.d kopiert und umgekehrt bei stop wieder von dort entfernt. Dateien in /etc/cron.d werden als Cronjobs ausgeführt.
Unter UNIX sind folgende Aufrufe gleichwertig:
perl $EPAGES/bin/CheckIntegrity.PL -add scheduler=cron
perl $EPAGES/bin/CheckIntegrity.PL -add scheduler
Diese Aufrufe erzeugen Cronjob-Dateien in $HOME/.epages/cron.d/. /etc/init.d/epages6 start startet die Cronjobs dann.
SendProgramOutput
Der Output der Cronjobs wird von wrapscheduler.PL via SendProgramOutput.pl (für ePages-Perl) bzw. SMTPSendProgramOutput.PL (für beliebiges Perl) versendet.
Die Verbindung zum Mailserver kann in der Scheduler-Konfigurationsdatei (z.B. Scheduler.conf) durch einen der folgenden Parameter definiert werden:
- MailStore=
-
(nur bei ePages Perl möglich) use the e-mail connection as defined in store (default: Site)
- MailConnection=
-
Format: passwd:user@server or user@server or server
Mail-Absender und -Empfänger können ebenfalls in der Konfigurationsdatei definiert werden:
- MailSender=
-
e-mail address of sender (default: as defined in MailConnection resp. MailStore)
- MailRecipient=
-
list of recipients separated by [;,] (default: MailSender)
UNIX-User in Scheduler.conf
Bisher wurden alle in Scheduler.conf definieren Jobs vom UNIX-User ep_appl ausgeführt. Ab sofort kann man den Nutzer durch den Parameter User= wählen:
[ClearTrash]
# run? (1 - yes, else - no)
IsActive=1
# who? (UNIX user)
User=$ENV{EPAGES_APPUSER}
...
Ist kein User angegeben, wird ep_appl angenommen. Als User sind erlaubt:
Natürlich kann nur root oder der Eigentümer die Crontab des Users verändern.
In /etc/init.d/epages6 steht:
[ -z "$EPAGES_IGNORE_CRON" ] && $SU_EXE ep_web -c ". \"$EP_DEFAULT\" ;
LOGNAME=ep_web \"$EPAGES\"/bin/epagesScheduler.sh start" 2>/dev/null
[ -z "$EPAGES_IGNORE_CRON" ] && $SU_EXE ep_db -c ". \"$EP_DEFAULT\" ;
LOGNAME=ep_db \"$EPAGES\"/bin/epagesScheduler.sh start" 2>/dev/null
$SU_EXE ep_appl -c ". \"$EP_DEFAULT\" ; LOGNAME=ep_appl
\"$EPAGES\"/bin/epagesScheduler.sh start" 2>/dev/null
$SU_EXE $EPAGES_APPUSER -c ". \"$EP_DEFAULT\" ; LOGNAME=
$EPAGES_APPUSER \"$EPAGES\"/bin/epagesScheduler.sh start" 2>
/dev/null
Jobs, die mit Sybase beginnen (Jobs aus Database/Data/Scheduler/Scheduler.conf).
Dies gilt auch für Cronjobs, die nicht von ePages kommen! Sollte ein ep_appl benutzen (oder umgekehrt).
Signieren von externen Cartridges
Von ePages wird das Script "SignFiles.PL" wird benutzt, um Dateien mit dem ePages-Key zu signieren. Es kann aber auch von Dritten benutzt werden, um z.B. eigenentwickelte Cartridges mit ihrem eigenen Schlüssel zu unterschreiben.
Daher benötigt man als Dritter zunächst ein Private-/Public-Key-Paar. Mit dem privaten Schlüssel unterschreibt man die Dateien. Den öffentlichen Schlüssel gibt man dem Code- (z.B. Cartridge-) Benutzer. Der Benutzer muss den Pfad zum öffentlichen Schlüssel dem Parameter PublicKeys= in CheckIntegrity.conf hinzufügen.
Die Signaturen werden mit folgendem Script erzeugt:
$EPAGES/bin/SignFiles.PL
Das Script dient hauptsächlich dem Erzeugen von GPG-Signaturen, es kann aber auch GPG-Signaturen überprüfen (wie CheckIntegrity.PL) oder entfernen. SignFiles.PL benutzt im Gegensatz zu CheckIntegrity.PL keine Konfigurationdatei. Alle Parameter werden auf der Kommandozeile angegeben. Folgender Aufruf zeigt die möglichen Parameter und deren Anwendung an:
perl SignFiles.PL -help
Folgende Modi kennt SignFiles.PL:
-verify : verifiziert Files
-unsign : entfernt die Signatur
-resign : entfernt die Signatur und schreib sie neu
(sonst): signiert Files
Die restlichen Optionen entsprechen Parametern in CheckIntegrity.conf:
-files "LIST" : siehe InternalSignatures= bzw. ExternalSignatures=
-dir DIR : siehe CheckPath=
-detach DIR : siehe SignaturePath=