Integritätsprüfung im ePages-System 6.14.0
Created: 6.0.8; Updated: 6.0.8

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:

  1. Die relevanten Dateien werden signiert und es Vergleichslisten mit bestimmten Dateieigenschaften angelegt (Sollwertlisten).
  2. Die Signaturen bzw. die Vergleichsparameter (Sollwertvergleich) werden per Scheduler automatisch geprüft.
  3. 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.

Inhaltsverzeichnis

1 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:

1.1 Patchinstallation

Führen Sie folgenden Befehl im Patch-Verzeichnis aus:

  perl patch.pl start_sic

1.2 Vollinstallation

Führen Sie folgende Befehle aus:

Bei UNIX:

  perl $EPAGES/bin/CheckIntegrity.PL -add scheduler
  /etc/init.d/epages6 start_cron

Bei Windows:

  perl %EPAGES%\bin\CheckIntegrity.PL -add scheduler
  %EPAGES%\bin\epagesScheduler.cmd restart

2 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:

.epages/CheckIntegrity/ enthält folgende Dateien:

  *.NOMINAL : Sollzustand
  *.ACTUAL  : Istzustand
  *.ERROR   : Dateisystem-Inkonsistenzen
  *.tar.gz  : Paket mit von der Norm abweichenden Dateien
  *.txt     : (nur bei Windows) Liste aller in *.tar.gz
               enthaltenen Dateien, durch NULL (\0) getrennt

3 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. Die Standard- Konfigurationsdatei ist so gebaut, dass bei Windows standardmäßig keine Signatur getestet wird, weil die Windowsprozesse instabil laufen. 'Crypt::GPG' kann, muss aber nicht untern Windows funktionieren. Spätere Patches werden das Problem beheben.
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.

3.1 :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 (bei Windows) gpg an einer unüblichen Stelle installiert wurde. Die gpg-exe testet Die Signatur von ePages-Dateien. Ohne installiertes GPG können Patch und Linux-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.

3.2 :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. Windows kann Dateien mit ':' im Namen nicht schreiben.

  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.

3.3 Real World Sections

Hier werden einige Abschnitte der Standard-Konfigurationsdatei erklärt.

DE_EPAGES_Signature
Checkt die interne Signatur aller Dateien in $ENV{EPAGES_CARTRIDGES}/DE_EPAGES, die auf .pl oder .pm enden:
  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 $ENV{EPAGES_CARTRIDGES}/DE_EPAGES:
  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 $ENV{EPAGES_PERL}/bin. Die externen Signaturen liegen in $ENV{EPAGES_PERL}/.gpg/bin. Der Abschnitt wird allerdings standardmäßig nicht ausgeführt, da sich $ENV{EPAGES_PERL}/bin ändern kann:
  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 $ENV{EPAGES}/bin, die auf .PL, .pl oder .sh enden. Interne Signaturen 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 $ENV{EPAGES_CONFIG}:
 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

Task_Cartridges_Win32
Führt alle 5 Minuten CheckIntegrity.PL von DE_EPAGES_Stat auf Windows-Rechnern aus:
 125  [Task_Cartridges_Win32]
 126  IsActive=1
 127  SubTasks=DE_EPAGES_Stat
 128  Machine=
 129  Schtasks=/st 00:00 /sc MINUTE /mo 1
 130  At=00:00 /every:5,10,15,20,25,30,35,40,45,50,55
 131  MaxDuration=4
 132  Options=-section Task_Cartridges_Win32

4 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 (Voreinstellung bei Windows). Bei UNIX kann der Parameter auch scheduler=cron heißen, dann wird ein Standard-UNIX- Cronjob benutzt (Voreinstellung beim UNIX-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.

4.1 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)

4.2 UNIX-User in Scheduler.conf

Dieser Abschnitt ist nicht für Windows relevant.

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

Das Patch setzt für alle Jobs 'User=$ENV{EPAGES_APPUSER}' außer für 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 Cronjob nicht laufen, dann statt 'User=$ENV{EPAGES_APPUSER}' 'User= ep_appl' benutzen (oder umgekehrt).

5 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=


Copyright ePages Software GmbH 2012