» SelfLinux » Sicherheit » Samhain » Abschnitt 8 SelfLinux-0.12.3
zurück Startseite Kapitelanfang Inhaltsverzeichnis PDF-Download (113 KB) GFDL Linux im Netzwerk

SelfLinux-Logo
Dokument Samhain  Autor
 Formatierung
 GFDL
 

8 Optionen in der Konfigurationsdatei

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.


8.1 Bedingte Anweisungen

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
     

8.2 Überwachte Dateien

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
     

8.3 Dringlichkeitsstufe von Ereignissen

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
     

8.4 Filter für Log-Möglichkeiten

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
     

8.5 Überwachung von Login/Logout-Ereignissen

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
     

8.6 Überprüfung des Kernels

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
     

8.7 Suchen nach SUID/SGID-Dateien

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
     

8.8 Logging zu einer relationalen Datenbank

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
     

8.9 Verschiedenes

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

8.10 Externe Skripte

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

8.11 Clients

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



zurück Seitenanfang Startseite Kapitelanfang Inhaltsverzeichnis PDF-Download (113 KB) GFDL Linux im Netzwerk