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".
|
|