Standardmäßig heißt die Konfigurationsdatei /etc/samhainrc
(Samhain) bzw. /etc/yulerc (Yule).
Die Konfigurationsdatei besteht aus einzelnen Sektionen, die jeweils mit einer
Überschrift in der Form [Sektionsname] eingeleitet werden.
Zeilen, die mit # beginnen, sind Kommentare und werden
ignoriert.
Optionen haben die Form Optionsname = Wert; dabei sind
Leerzeichen vor und nach dem Gleichheitszeichen optional.
Alles, was vor der ersten Sektion und nach einem [EOF] steht,
wird ignoriert. Es ist nicht generell notwendig, die Datei mit
[EOF] abzuschließen, aber empfehlenswert, wenn am Ende der
Datei Dinge stehen, die nicht als Optionen interpretiert werden sollen (z. B.
eine GnuPG-Signatur, siehe Abschnitt
Signierte Datenbank- und Konfigurationsdateien).
Manche Optionen sind nur relevant, wenn Samhain bzw. Yule mit Unterstützung für
entsprechende Möglichkeiten übersetzt wurde. Falls eine solche Option dennoch
benutzt wird, erfolgt eine Warnung beim Lesen der Konfigurationsdatei.
Bedingte Anweisungen ermöglichen es, in die Konfigurationsdatei Optionen zu
schreiben, die nur auf bestimmten Rechnern interpretiert (und sonst ignoriert)
werden.
Die Bedingung kann entweder der Name des Rechners sein, oder das Tripel
Betriebssystem:Version:Hardware, das man mit
uname -srm erhält. Durch Voranstellen eines Ausrufezeichens
kann die Bedingung invertiert werden.
/etc/samhainrc
|
@abc.example.com
# Wird nur gelesen wenn 'abc.example.com' der Name dieses Rechners ist
@end
!@abc.example.com
# Wird nicht gelesen wenn 'abc.example.com' der Name dieses Rechners ist
@end
$Linux:2.4.26:i686
# Wird nur auf Rechnern gelesen, auf denen
# 'uname -srm' "Linux 2.4.26 i686" ausgibt
$end
!$Linux:2.4.26:i686
# Wird nicht auf Rechnern gelesen, auf denen
# 'uname -srm' "Linux 2.4.26 i686" ausgibt
$end
|
|
Die möglichen Sektionsnamen sind hier: [Attributes], [LogFiles],
[GrowingLogFiles], [IgnoreAll], [IgnoreNone], [ReadOnly], [User0], [User1],
und [Prelink].
Jede dieser Sektionen entspricht einer gleichnamigen
Policy zur Überwachung der Dateien in
der betreffenden Sektion.
Jede dieser Sektionen kann beliebig viele Einträge der Form
file = /absoluter/pfad/zur/datei und
dir = optionale_rekursionstiefe/absoluter/pfad/zum/verzeichnis
haben; dabei ist optionale_rekursionstiefe die
Rekursionstiefe
für das betreffende Verzeichnis (maximal 99).
/etc/samhainrc
|
[ReadOnly]
dir = /bin
dir = /sbin
dir = /usr/bin
dir = /usr/sbin
dir = 2/boot
file = /etc/motd
[GrowingLogFiles]
file = /var/log/messages
file = /var/log/mail
|
|
In einer Sektion, die mit [EventSeverity] eingeleitet wird, ist
es möglich, die Dringlichkeitsstufe mancher Ereignisse anzupassen. Mögliche
Dringlichkeitsstufen sind: none (nichts loggen), debug (niedrigste Stufe),
info, notice, warn, mark, err, crit, alert (höchste Stufe).
Mögliche Ereignisse sind hier:
-
Veränderungen von überwachten Dateien unter den verschiedenen Policys
(Optionen SeverityReadOnly, SeverityLogFiles, SeverityGrowingLogs,
SeverityIgnoreNone, SeverityIgnoreAll, SeverityUser0, SeverityUser1,
SeverityPrelink)
-
Zugriffsfehler bei Dateien (Option SeverityFiles)
-
Zugriffsfehler bei Verzeichnissen (Option SeverityDirs)
-
Seltsame Dateinamen, verwaiste Dateien (Option SeverityNames)
/etc/samhainrc>
|
[EventSeverity]
#
# Überwachte Dateien (für die Bedeutung von 'ReadOnly',
# 'LogFiles', usw. siehe Abschnitt Konfiguration der Integritätseigenschaften innerhalb des Dateisystems).
#
SeverityReadOnly=crit
SeverityLogFiles=crit
SeverityGrowingLogs=warn
SeverityIgnoreNone=crit
SeverityIgnoreAll=info
#
# Zugriffsfehler für Dateien (Files) und Directories (Dirs)
#
SeverityFiles=err
SeverityDirs=err
#
# Dateinamen, ungültige UIDS/GIDs
#
SeverityNames=info
|
|
In einer Sektion, die mit [Log] eingeleitet wird, wird
definiert, was zu welcher Log-Möglichkeiten geloggt werden soll. D. h., es
werden die gewünschten
Dringlichkeitsstufen
und eventuell Ereignisklassen eingestellt.
Mögliche Optionen für Dringlichkeitsstufen sind: MailSeverity (Email),
PrintSeverity (Konsole), LogSeverity (Logdatei), SyslogSeverity (Syslog),
PreludeSeverity (Prelude), ExportSeverity (logging zu Yule), ExternalSeverity
(externe Skripte), DatabaseSeverity (logging zu relationaler Datenbank).
Die zuweisbaren Dringlichkeitsstufen sind: none (kein Logging), debug
(niedrigste Stufe), info, notice, warn, mark, err, crit, alert (höchste Stufe).
Mögliche Optionen für Ereignisklassen (Standard ist alle) sind: MailClass
(Email), PrintClass (Konsole), LogClass (Logdatei), SyslogClass (Syslog),
PreludeClass (Prelude), ExportClass (logging zu Yule), ExternalClass
(externe Skripte), DatabaseClass (logging zu relationaler Datenbank).
Das Argument ist eine Liste (mit Komma oder Leerzeichen getrennt) von
zugelassenen Ereignisklassen:
EVENT
|
Überwachte Ereignisse (z.B. Änderungen einer Datei)
|
START
|
Start/Stopp-Meldungen
|
STAMP
|
Zeitmarken
|
LOGKEY
|
Der Schlüssel zur Verifikation der Log-Datei (siehe Abschnitt
Verifikation der lokalen Log-Datei)
|
ERROR
|
Fehlermeldungen
|
OTHER
|
Alles andere (z.B. detaillierte Informationen)
|
AUD
|
System-Aufrufe (für Fehlersuche)
|
/etc/samhainrc
|
[Log]
MailSeverity = alert
PrintSeverity = mark
LogSeverity = notice
LogClass = EVENT, START, STAMP, ERROR
SyslogSeverity = err
|
|
In der Sektion [Utmp] werden Optionen für die Überwachung von
Login/Logout-Ereignissen gesetzt.
LoginCheckActive = yes|no
|
yes zum Einschalten, no zum Ausschalten
|
LoginCheckInterval = Sekunden
|
Intervall zwischen Überprüfungen
|
SeverityLogin = Level
|
Level/Dringlichkeitsstufe für Login-Ereignis
|
SeverityLoginMulti = Level
|
Level/Dringlichkeitsstufe für mehrfaches Login
|
SeverityLogout = Level
|
Level/Dringlichkeitsstufe für Logout-Ereignis
|
/etc/samhainrc
|
[Utmp]
#
LoginCheckActive = yes
LoginCheckInterval = 10
SeverityLogin = crit
SeverityLoginMulti = crit
SeverityLogout = notice
|
|
In der Sektion [Kernel] werden Optionen zur Überprüfung des
Kernels gesetzt. Die folgenden Optionen stehen zur Verfügung:
KernelCheckActive = yes|no
|
yes zum Einschalten, no zum Ausschalten
|
KernelCheckInterval = Sekunden
|
Intervall zwischen Überprüfungen
|
KernelCheckIDT = yes|no
|
Auch Kernel Interrupt Descriptor Table prüfen ? Standard ist ja (yes).
|
SeverityKernel = Level
|
Level/Dringlichkeitsstufe für Ereignis
|
Die folgenden Optionen sind nur notwendig, wenn der Kernel neu übersetzt wurde
(auch wenn die Version gleich geblieben ist !). Das Argument
Adresse ist eine hexadezimale Zahl, mit der die Zeile beginnt,
die der jeweils angegebene grep-Befehl ausgibt. Die Zahl
sollte mit dem Präfix 0x versehen werden.
KernelSystemCall = Adresse
|
Adresse der system_call Funktion (grep system_call System.map)
|
KernelSyscallTable = Adresse
|
Adresse der sys_call_table Tabelle (grep sys_call_table System.map)
|
KernelProcRoot = Adresse
|
Adresse der proc_root Funktion (grep proc_root$ System.map)
|
KernelProcRootIops = Adresse
|
Adresse der proc_root_inode_operations Funktion (grep proc_root_inode_operations System.map)
|
KernelProcRootLookup = Adresse
|
Adresse der proc_root_lookup Funktion (grep proc_root_lookup System.map)
|
/etc/samhainrc
|
[Kernel]
KernelCheckActive=yes
KernelCheckInterval=20
KernelCheckIDT=yes
SeverityKernel=crit
#
KernelSystemCall = 0xc0106cf8
KernelSyscallTable = 0xc01efb98
KernelProcRoot = 0xc01efb98
KernelProcRootIops = 0xc01efb98
KernelProcRootLookup = 0xc01efb98
|
|
Die Suche nach SUID/SGID-Dateien wird konfiguriert in einer Sektion, die mit
[SuidCheck] eingeleitet wird. Die Optionen sind:
SuidCheckActive = yes|no
|
yes zum Einschalten, no zum Ausschalten
|
SeveritySuidCheck= Level
|
Level/Dringlichkeitsstufe für Ereignis
|
SuidCheckInterval = Sekunden
|
Intervall zwischen Überprüfungen
|
SuidCheckSchedule = Zeitplan
|
Zeitplan im crontab-Stil
|
SuidCheckExclude = /path
|
Optional ein Verzeichnis, das ausgelassen werden soll
|
SuidCheckFps = Anzahl
|
Optional die maximale Anzahl Dateien/Sekunde, die überprüft werden sollen
|
Es kann entweder SuidCheckInterval oder SuidCheckSchedule angegeben werden, aber
beides gleichzeitig ist sinnlos.
/etc/samhainrc
|
[SuidCheck]
SuidCheckActive = yes
SuidCheckSchedule=0 * * * *
SeveritySuidCheck=crit
|
|
Sofern man zu einer Datenbank loggen möchte, z.B. zu einer
MySQL- oder
PostgreSQL- - Datenbank, muss der Zugriff auf
die Datenbank konfiguriert werden. Dies erfolgt in der
[Database]-Sektion. Die Optionen sind:
SetDBHost = Rechner-Name
|
Name des Datenbank-Servers. Für PostgreSQL muss dies die numerische IP-Adresse sein.
|
SetDBName = Datenbank
|
Name der Datenbank (Standard: samhain)
|
SetDBTable = Tabelle
|
Name der Tabelle (Standard: log)
|
SetDBUser = Benutzer
|
Als Benutzer anmelden (Standard: samhain)
|
SetDBPassword = Passwort
|
Beim Anmelden Passwort benutzen
|
UsePersistent = yes|no
|
yes für dauerhafte Verbindung zur Datenbank
|
SetDBServerTstamp = yes|no
|
(nur Yule) Diese Option sagt dem Server, ob er eigene Zeitstempel für
Nachrichten von Samhain loggen soll (yes) oder nicht (no)
|
/etc/samhainrc
|
[Database]
SetDBHost = mysql.example.com
SetDBName = samhain
SetDBTable = log
SetDBUser = samhain
SetDBPassword = jsabfkej
UsePersistent = no
|
|
In der Sektion [Misc] finden sich verschiedene weitere Optionen:
Daemon = yes|no
|
Als Dämon laufen (yes = ja)
|
ChecksumTest = none|init|update|check
|
Die Standard-Handlung, wenn nicht auf der Kommandozeile angegeben
(keine|Datenbank initialisieren|Datenbank aktualisieren|mit Datenbank vergleichen).
Standard ist none
|
VersionString = Zeichenkette
|
In der Datenbank Zeichenkette zum Markieren der Version
einsetzen (zusammen mit Rechner-Name und Zeitstempel)
|
SetNiceLevel = -19..19
|
Priorität des Prozesses für Dateiprüfung setzen (-19 = höchste, 19 = niedrigste)
|
SetIOLimit = kbps
|
Datenrate (Kilobytes pro Sekunde) begrenzen.
|
SetLoopTime = Sekunden
|
Intervall zwischen geloggten Zeitstempeln
|
SetFilecheckTime = Sekunden
|
Intervall zwischen Dateiprüfungen (Standard: 600)
|
FileCheckScheduleOne = Plan
|
Zeitplan im crontab-Stil für Dateiprüfungen (alternativ zu SetFilecheckTime)
|
UseHardlinkCheck = yes|no
|
Anzahl Hardlinks für Verzeichnisse prüfen (yes = ja, no = nein)
|
HardlinkOffset=N:/Pfad
|
Ausnahme für Hardlink-Prüfung. N ist der Unterschied (tatsächliche - erwartet)
für /Pfad.
|
AddOKChars = N1, N2, ..
|
Liste der akzeptablen Zeichen (Byte-Werte) für den Test auf seltsame Dateinamen.
Nn muß entweder hexadezimal (führendes 0x: 0xNN), oktal
(führende Null: 0NNN), oder dezimal sein. Mit all als Argument
wird der Test ausgeschaltet.
|
IgnoreAdded = /regex
|
Ignorieren, wenn die Datei /regex neu erzeugt wird.
/regex kann ein regulärer Ausdruck sein, und muss einen absoluten
Pfad bezeichnen.
|
IgnoreMissing = /regex
|
Ignorieren, wenn die Datei /regex gelöscht wird.
/regex kann ein regulärer Ausdruck sein, und muss einen absoluten
Pfad bezeichnen.
|
ReportOnlyOnce = yes|no
|
Jede Dateiveränderung nur einmal berichten (Standard: yes = ja)
|
ReportFullDetail = yes|no
|
Alle Details zu einer veränderten Datei berichten (Standard: no = nein)
|
UseLocalTime = yes|no
|
Zeitstempel für Dateien in lokaler Zeit statt GMT berichten. Diese Option sollte
nicht benutzt werden, wenn Beltane eingesetzt wird.
|
SetConsole = Gerät
|
Das Konsolen-Gerät bestimmen (Standard: /dev/console).
|
MessageQueueActive = yes|no
|
Die System V IPC message queue benutzen (Standard: no = nein).
|
SetMailTime = Sekunden
|
Maximale Zeitspanne zwischen Email-Nachrichten (Standard: 86400).
|
SetMailNum = 0..127
|
Maximale Anzahl wartender Emails in interner Warteschlange.
|
SetMailAddress = Empfänger
|
Einen Email-Empfänger hinzufügen (maximal 8).
|
SetMailRelay = IP-Adresse
|
Einen Relay-Rechner für Email festlegen.
|
MailSubject = Zeichenkette
|
Eigenes Format für die Betreff-Zeile definieren.
|
SamhainPath = /Pfad
|
Pfad des Programmes. Falls diese Option benutzt wird, wird die Prüfsumme beim
Programmende mit derjenigen zum Programmstart verglichen.
|
SetBindAddress = IP-Adresse
|
IP-Adresse (Netzwerk-Karte) für ausgehende Verbindungen (auf Maschinen mit
mehreren IP-Adressen).
|
SetTimeServer = IP-Adresse
|
Optionaler Zeitdienst. Es wird das einfache time-Protokoll
(37/tcp) benutzt.
|
MessageHeader="\%S \%T \%F \%L \%C"
|
Benutzerdefiniertes Format für den Mail-Header
|
SyslogFacility = LOG_xxx
|
Welche syslog-Facility soll benutzt werden (Standard: LOG_AUTHPRIV)
|
HideSetup = yes|no
|
Beim Start keine Namen von Datenbank und Konfigurations-Dateien loggen
|
TrustedUser = user1, ...
|
Liste zusätzlicher vertrauenswürdiger Benutzer
|
SetDatabasePath = AUTO|/Pfad
|
Pfad zur Datenbank (AUTO um Rechner-Namen an Standard-Pfad anzuhängen)
|
SetLogfilePath = AUTO|/Pfad
|
Pfad zur Log-Datei (AUTO um Rechner-Namen an Standard-Pfad anzuhängen)
|
SetLockfilePath = AUTO|/Pfad
|
Pfad zur Lock-Datei, die den Zugriff zur Log-Datei blockiert (AUTO um
Rechner-Namen an Standard-Pfad anzuhängen)
|
DigestAlgo = SHA1|MD5
|
SHA1 oder MD5 anstelle von TIGER192 als Prüfsummenalgorithmus benutzen
(Standard: TIGER192)
|
RedefReadOnly = +XXX|-XXX
|
Den Test XXX zur Policy ReadOnly hinzufügen bzw. von dieser
wegnehmen (Liste möglich).
|
RedefAttributes= +XXX|-XXX
|
Den Test XXX zur Policy Attributes hinzufügen bzw. von dieser
wegnehmen (Liste möglich).
|
RedefLogFiles= +XXX|-XXX
|
Den Test XXX zur Policy LogFiles hinzufügen bzw. von dieser
wegnehmen (Liste möglich).
|
RedefGrowingLogFiles = +XXX|-XXX
|
Den Test XXX zur Policy GrowingLogFiles hinzufügen bzw. von
dieser wegnehmen (Liste möglich).
|
RedefIgnoreAll = +XXX|-XXX
|
Den Test XXX zur Policy IgnoreAll hinzufügen bzw. von dieser
wegnehmen (Liste möglich).
|
RedefIgnoreNone= +XXX|-XXX
|
Den Test XXX zur Policy IgnoreNone hinzufügen bzw. von dieser
wegnehmen (Liste möglich).
|
RedefUser0 = +XXX|-XXX
|
Den Test XXX zur Policy User0 hinzufügen bzw. von dieser
wegnehmen (Liste möglich).
|
RedefUser1 = +XXX|-XXX
|
Den Test XXX zur Policy User1 hinzufügen bzw. von dieser
wegnehmen (Liste möglich).
|
SetLogServer = IP-Adresse
|
Adresse des Log-Servers
|
MACType=HASH-TIGER|HMAC-TIGER
|
Die Art der Authentifizierungs-Codes wählen. Falls diese Option benutzt wird,
muss für Yule und Samhain derselbe Wert gesetzt sein. Standard ist HMAC-TIGER.
|
SetReverseLookup = yes|no
|
Wenn nein (no), dann keinen reverse DNS-Lookup durchführen, wenn Verbindung zu
einem Rechner hergestellt wird, der mit Namen statt IP-Adresse angegeben ist.
|
Die folgenden Optionen sind nur relevant für den Log-Server (Yule).
SetClientFromAccept = yes|no
|
Wenn ja (yes), dann die Adresse des Clients benutzen, wie sie dem Kernel bekannt
ist (kann falsch sein, wenn z. B. NAT-Router en route). Sonst (Standard) den
Namen benutzen, den der Client bekanntgibt, gegen die IP-Adresse prüfen, und
immer akzeptieren (mit einer Warnung, wenn die Prüfung fehlschlägt).
|
SeverityLookup = Level
|
Level/Dringlichkeitsstufe für Meldung, wenn die oen erwähnte Prüfung fehlschlägt.
|
UseClientSeverity = yes|no
|
Wenn ja (yes), Nachrichten von Samhain nicht mit spezieller Dringlichkeitsstufe
loggen.
|
UseClientClass = yes|no
|
Wenn ja (yes), Nachrichten von Samhain nicht mit spezieller Ereignisklasse loggen.
|
UseSeparateLogs = yes|no
|
Wenn ja (yes), Nachrichten von unterschiedlichen Clients nach unterschiedlichen
Log-Dateien loggen (Name des Clients wird an Standard-Pfad angehängt).
|
SetClientTimeLimit = Sekunden
|
Maximale Zeit bis zur nächsten Meldung eines Clients (bei Überschreitung Alarm).
|
SetUseSocket = yes|no
|
Wenn ja (yes), ein Unix Domain Socket öffnen, um Yule Kommandos zu übergeben,
die an Clients weitergeleitet werden sollen (wenn diese Kontakt zu Yule
aufnehmen).
|
SetSocketAllowUid = UID
|
Der Benutzer, der Kommandos über o. g. Socket absetzen kann (Standard: 0 = root)
|
SetChrootDir = /Pfad
|
Falls diese Option gesetzt ist, macht der Server nach dem Start ein
chroot /Pfad
|
SetStripDomain = yes|no
|
Wenn ja (yes), wird der Name des Clients ohne die Domäne geloggt (Standard: ja)
|
SetUDPActive = yes|no
|
Auch auf 514/udp (syslog port) auf Nachrichten von syslog-Dämonen warten
|
|
In der Sektion [External] ist es möglich, externe Skripte oder
Programme zu definieren, die zum Loggen benutzt werden können. Das
Skript/Programm erhält jeweils eine Zeile mit Informationen, gefolgt von einer
weiteren Zeile mit [EOF]. Die Optionen sind:
OpenCommand=/Pfad/zum/Skript
|
Beginnt einen Definitions-Block
|
SetType = log|srv
|
Mit log wird das Programm als Log-Möglichkeit definiert; mit
srv (nur Yule) wird es aufgerufen, wenn sich der Status eines
Clients ändert.
|
SetCommandline = Liste
|
Die Kommandozeile (also Argumente für das Skript)
|
SetEnviron = Variable=Wert
|
Umgebungsvariable (kann mehrfach benutzt werden)
|
SetChecksum = TIGER Prüfsumme
|
Tiger/192-Prüfsumme des Skripts (optional)
|
SetCredentials = Benutzer
|
Der Benutzer, als der das Skript ausgeführt werden soll.
|
SetFilterNot = Liste
|
Worte, die in der geloggten Nachricht nicht vorkommen sollen
|
SetFilterAnd = Liste
|
Worte, die alle in der geloggten Nachricht vorkommen müssen
|
SetFilterOr = Liste
|
Worte, von denen mindestens eines in der geloggten Nachricht vorkommen muss
|
SetDeadtime = Sekunden
|
Minimale Zeit zwischen zwei Aufrufen des Skripts
|
SetDefault = yes|no
|
Standard-Umgebung setzen (yes = ja) Die Standard-Umgebung ist: HOME aus
/etc/passwd, SHELL=/bin/sh, PATH=/sbin:/usr/sbin:/bin:/usr/bin
|
|
In der [Clients]-Sektion, die nur für den Server (Yule)
relevant ist, hat jeder Samhain-Client einen Eintrag der Form:
Client = Rechnername@abc@xyz
|
Rechnername ist dabei der volle Name (üblicherweise keine
IP-Adresse), unter dem Yule den Client kennt. Falls Rechnername
falsch ist, wird Yule folgende Fehlermeldung ausgeben: Invalid
connection attempt: Not in client list, und wird in dieser
Fehlermeldung auch sagen, welchen Namen es für den Client ermittelt hat:
client="client.example.com".
|
|