doc/de_DE.ISO8859-1/books/handbook/mac/chapter.sgml
2012-09-14 17:47:48 +00:00

2192 lines
97 KiB
XML

<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<!--
The FreeBSD Documentation Project
The FreeBSD German Documentation Project
$FreeBSD$
$FreeBSDde: de-docproj/books/handbook/mac/chapter.sgml,v 1.8 2010/12/18 09:58:33 jkois Exp $
basiert auf: 1.80
-->
<chapter id="mac">
<chapterinfo>
<authorgroup>
<author>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
<contrib>Written by </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Benjamin</firstname>
<surname>Lukas</surname>
<contrib>Übersetzt von </contrib>
</author>
</authorgroup>
</chapterinfo>
<title>Verbindliche Zugriffskontrolle</title>
<sect1 id="mac-synopsis">
<title>Übersicht</title>
<indexterm><primary>MAC</primary></indexterm>
<indexterm>
<primary>Mandatory Access Control</primary>
<see>MAC</see>
</indexterm>
<para> In &os;&nbsp;5.X wurden neue Sicherheits-Erweiterungen
verfügbar, die aus dem TrustedBSD-Projekt übernommen wurden
und auf dem Entwurf &posix;.1e basieren. Die beiden
bedeutendsten neuen Sicherheits-Mechanismen sind Berechtigungslisten
(Access Control Lists, <acronym>ACL</acronym>) und die verbindliche
Zugriffskontrolle (Mandatory Access Control, <acronym>MAC</acronym>).
Durch die MAC können Module geladen werden, die neue
Sicherheitsrichtlinien bereitstellen. Mit Hilfe einiger Module kann
beispielsweise ein eng umgrenzter Bereich des Betriebssystems gesichert
werden, indem die Sicherheitsfunktionen spezieller Dienste
unterstützt bzw. verstärkt werden. Andere Module wiederum
betreffen in ihrer Funktion das gesamte System - alle vorhandenen
Subjekte und Objekte. Das "Verbindliche" in der Namensgebung
erwächst aus dem Fakt, dass die Kontrolle allein Administratoren
und dem System obliegt und nicht dem Ermessen der Nutzer, wie es mit
Hilfe der benutzerbestimmbaren Zugriffskontrolle (Discrectionary Access
Control / <acronym>DAC</acronym>), dem Zugriffstandard für Dateien,
gar der System V <acronym>IPC</acronym> in &os;, normalerweise umgesetzt
wird.</para>
<para>Dieses Kapitel wird sich auf die Grundstruktur der Verbindlichen
Zugriffskontrolle und eine Auswahl der Module, die verschiedenste
Sicherheitsfunktionen zur Verfügung stellen, konzentrieren.</para>
<para>Beim Durcharbeiten dieses Kapitels erfahren Sie:</para>
<itemizedlist>
<listitem>
<para>Welche <acronym>MAC</acronym> Module für
Sicherheitsrichtlinien derzeit in &os; eingebettet sind und wie die
entsprechenden Mechanismen funktionieren.</para>
</listitem>
<listitem>
<para>Was die einzelnen <acronym>MAC</acronym> Module an Funktionen
realisieren und auch, was der Unterschied zwischen einer Richtlinie,
die <emphasis>mit</emphasis> Labels arbeitet, und einer, die
<emphasis>ohne</emphasis> Labels arbeitet, ist.</para>
</listitem>
<listitem>
<para>Wie Sie die <acronym>MAC</acronym> in ein System einbetten und
effizient einrichten.</para>
</listitem>
<listitem>
<para>Wie die verschiedenen Richtlinienmodule einer MAC konfiguriert
werden.</para>
</listitem>
<listitem>
<para>Wie mit einer <acronym>MAC</acronym> und den gezeigten Beispielen
eine sicherere Umgebung erstellt werden kann.</para>
</listitem>
<listitem>
<para>Wie die Konfiguration einer <acronym>MAC</acronym> auf korrekte
Einrichtung getestet wird.</para>
</listitem>
</itemizedlist>
<para>Vor dem Lesen dieses Kapitels sollten Sie bereits:</para>
<itemizedlist>
<listitem>
<para>Grundzüge von &unix; und &os; verstanden haben.
(<xref linkend="basics"/>).</para>
</listitem>
<listitem>
<para>Mit den Grundzügen der Kernelkonfiguration und -kompilierung
vertraut sein (<xref linkend="kernelconfig"/>).</para>
</listitem>
<listitem>
<para>Einige Vorkenntnisse über Sicherheitskonzepte im Allgemeinen
und deren Umsetzung in &os; im Besonderen mitbringen (<xref
linkend="security"/>).</para>
</listitem>
</itemizedlist>
<warning>
<para>Der unsachgemäße Gebrauch der in diesem Kapitel
enthaltenen Informationen kann den Verlust des Systemzugriffs,
Ärger mit Nutzern oder die Unfähigkeit, grundlegende
Funktionen des X-Windows-Systems zu nutzen, verursachen. Wichtiger
noch ist, dass man sich nicht allein auf die <acronym>MAC</acronym>
verlassen sollte, um ein System zu sichern. Die <acronym>MAC</acronym>
verbessert und ergänzt lediglich die schon existierenden
Sicherheits-Richtlinien - ohne eine gründliche und fundierte
Sicherheitspraxis und regelmäßige Sicherheitsprüfungen
wird Ihr System nie vollständig sicher sein.</para>
<para>Außerdem sollte angemerkt werden, dass die Beispiele
in diesem Kapitel auch genau dasselbe sein sollen, nämlich
Beispiele. Es wird nicht empfohlen, diese bestimmten Beispiele
auf einem Arbeitssystem umzusetzen. Das Einarbeiten der
verschiedenen Sicherheitsmodule erfordert eine Menge Denkarbeit
und viele Tests. Jemand, der nicht versteht, wie diese Module
funktionieren, kann sich schnell darin wiederfinden, dass er
(oder sie) das ganze System durchforsten und viele Dateien und
Verzeichnisse neu konfigurieren muß.</para>
</warning>
<sect2>
<title>Was in diesem Kapitel nicht behandelt wird</title>
<para>Dieses Kapitel behandelt einen großen Teil
sicherheitsrelevanter Themen, bezogen auf die Verbindliche
Zugriffskontrolle (<acronym>MAC</acronym>). Die gegenwärtige
Entwicklung neuer <acronym>MAC</acronym> Module ist nicht
abgedeckt. Einige weitere Module, die im MAC Framework enthalten sind,
haben besondere Charakteristika, die zum Testen und Entwickeln neuer
Module gedacht sind. Dies sind unter anderem &man.mac.test.4;,
&man.mac.stub.4; und &man.mac.none.4;. Für weitere Informationen
zu diesen Modulen und den entsprechend angebotenen Funktionen lesen Sie
bitte die Manpages.</para>
</sect2>
</sect1>
<sect1 id="mac-inline-glossary">
<title>Schlüsselbegriffe</title>
<para>Bevor Sie weiterlesen, müssen noch einige Schlüsselbegriffe
geklärt werden. Dadurch soll jegliche auftretende Verwirrung von
vornherein beseitigt und die plötzliche Einführung neuer
Begriffe und Informationen vermieden werden.</para>
<itemizedlist>
<listitem>
<para><emphasis>Verbund</emphasis>: Ein Verbund ist ist ein Satz von
Programmen und Daten, die speziell und zusammen abgeschottet wurden,
um Nutzern Zugriff auf diese ausgewiesenen Systembereiche zu
gewähren. Man kann sagen, ein solcher Verbund ist eine
Gruppierung, ähnlich einer Arbeitsgruppe, einer Abteilung, einem
Projekt oder einem Thema. Durch die Nutzung von Verbünden
(<emphasis>compartments</emphasis>) kann man Sicherheitsrichtlinien
erstellen, die alles notwendige Wissen und alle Werkzeuge
zusammenfassen.</para>
</listitem>
<listitem>
<para><emphasis>Hochwassermarkierung</emphasis>: Eine solche Richtlinie
erlaubt die Erhöhung der Sicherheitsstufe in Abhängigkeit
der Klassifikation der gesuchten bzw. bereitzustellenden Information.
Normalerweise wird nach Abschluss des Prozesses die
ursprüngliche Sicherheitsstufe wieder hergestellt. Derzeit
enthält die <acronym>MAC</acronym> Grundstruktur keine
Möglichkeit, eine solche Richtlinie umzusetzen, der
Vollständigkeit halber ist die Definition hier jedoch
aufgeführt.</para>
</listitem>
<listitem>
<para><emphasis>Integrität</emphasis>: Das Schlüsselkonzept
zur Klassifizierung der Vertraulichkeit von Daten nennt man
Integrität. Je weiter die Integrität erhöht wird, umso
mehr kann man den entsprechenden Daten vertrauen.</para>
</listitem>
<listitem>
<para><emphasis>Label</emphasis>: Ein Label ist ein Sicherheitsmerkmal,
welches mit Dateien, Verzeichnissen oder anderen Elementen im System
verbunden wird. Man sollte es wie einen Vertraulichkeitsstempel
auffassen, der Dateien angehört wie beispielsweise die
Zugriffszeit, das Erstellungsdatum oder auch der Name; sobald Dateien
derart gekennzeichnet werden, bezeichnen diese Label die
sicherheitsrelevanten Eigenschaften. Zugriff ist nur noch dann
möglich, wenn das zugreifende Subjekt eine korrespondierende
Kennzeichnung trägt. Die Bedeutung und Verarbeitung der
Label-Werte ist von der Einrichtung der Richtlinie abhängig:
Während einige Richtlinien das Label zum Kennzeichnen der
Vertraulichkeit oder Geheimhaltungsstufe eines Objekts nutzen,
können andere Richtlinien an derselben Stelle Zugriffsregeln
festschreiben.</para>
</listitem>
<listitem>
<para><emphasis>Level</emphasis>: Eine erhöhte oder verminderte
Einstellung eines Sicherheitsmerkmals. Wenn das Level erhöht
wird, wird auch die ensprechende Sicherheitsstufe angehoben.</para>
</listitem>
<listitem>
<para><emphasis>Niedrigwassermarkierung</emphasis>: Eine solche
Richtlinie erlaubt das Herabstufen des Sicherheitslevels, um weniger
sensible Daten verfügbar zu machen. In die meisten Fällen
wird das ursprüngliche Sicherheitslevel des Nutzers
wiederhergestellt, sobald der Vorgang abgeschlossen ist. Das einzige
Modul in &os;, welches von dieser Richtlinie Gebrauch macht, ist
&man.mac.lomac.4;.</para>
</listitem>
<listitem>
<para><emphasis>Multilabel</emphasis>: Die Eigenschaft
<option>multilabel</option> ist eine Dateisystemoption, die entweder
im Einzelbenutzermodus mit Hilfe des Werkzeugs &man.tunefs.8;,
während des Bootvorgangs in der Datei &man.fstab.5; oder aber
beim Erstellen einen neues Dateisystems aktiviert werden kann. Diese
Option erlaubt einem Administrator, verschiedenen Objekten
unterschiedliche Labels zuzuordnen - kann jedoch nur zusammen mit
Modulen angewendet werden, die auch tatsächlich mit Labels
arbeiten.</para>
</listitem>
<listitem>
<para><emphasis>Objekt</emphasis>: Ein Objekt oder auch Systemobjekt
ist theoretisch eine Einheit, durch welche Information fließt,
und zwar unter der Lenkung eines <emphasis>Subjektes</emphasis>.
Praktisch schliesst diese Definition Verzeichnisse, Dateien, Felder,
Bildschirme, Tastaturen, Speicher, Bandlaufwerke, Drucker und
jegliche anderen Datenspeicher- oder -verarbeitungsgeräte ein.
Im Prinzip ist ein Objekt ein Datenkontainer oder eine
Systemressource - Zugriff auf ein <emphasis>Objekt</emphasis>
bedeutet, auf Daten zuzugreifen.</para>
</listitem>
<listitem>
<para><emphasis>Richtlinie</emphasis>: Eine Sammlung von Regeln, die
definiert, wie Zielvorgaben umgesetzt werden, nennt man Richtlinie.
Eine <emphasis>Richtlinie</emphasis> dokumentiert normalerweise, wie
mit bestimmten Elementen umgegangen wird. Dieses Kapitel faßt
den Begriff in diesem Kontext als
<emphasis>Sicherheitsrichtlinie</emphasis> auf; als eine Sammlung von
Regeln, die den Fluß von Daten und Informationen kontrolliert
und die gleichzeitig definiert, wer auf diese Daten und Informationen
zugreifen darf.</para>
</listitem>
<listitem>
<para><emphasis>Anfälligkeit</emphasis>: Dieser Begriff wird
normalerweise verwendet, wenn man über <acronym>MLS</acronym>
(Multi Level Security) spricht. Das Anfälligkeits-Level
beschreibt, wie wichtig oder geheim die Daten sein sollen. Um so
höher das Anfälligkeits-Level, um so wichtiger die
Geheimhaltung bzw. Vertraulichkeit der Daten.</para>
</listitem>
<listitem>
<para><emphasis>Einzel-Label</emphasis>: Von einem Einzel-Label spricht
man, wenn für ein ganzes Dateisystem lediglich ein einziges
Label verwendet wird, um Zugriffskontrolle über den gesamten
Datenfluss zu erzwingen. Sobald diese Option verwendet wird - und das
ist zu jeder Zeit, wenn die Option <option>multilabel</option>
nicht explizit gesetzt wurde - sind alle Dateien und Verzeichnisse
mit dem gleichen Label gekennzeichnet.</para>
</listitem>
<listitem>
<para><emphasis>Subjekt</emphasis>: Ein Subjekt ist jedwede Einheit,
die Information in Fluss zwischen Objekten bringt: Zum Beispiel ein
Nutzer, ein Nutzerprozessor, ein Systemprozeß usw. In &os;
handelt es sich meistens um einen Thread, der als Prozeß im
Namen eines Nutzers arbeitet.</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="mac-initial">
<title>Erläuterung</title>
<para>Mit all diesen neuen Begriffen im Kopf können wir nun
überlegen, wie die Möglichkeiten der verbindlichen
Zugriffskontrolle (<acronym>MAC</acronym>) die Sicherheit eines
Betriebssystems als Ganzes erweitern. Die verschiedenen Module, die
durch die <acronym>MAC</acronym> bereitgestellt werden, können
verwendet werden, um das Netzwerk oder Dateisysteme zu schützen,
Nutzern den Zugang zu bestimmten Ports oder Sockets zu verbieten und
vieles mehr. Die vielleicht beste Weise, die Module zu verwenden, ist,
sie miteinander zu kombinieren, indem mehrere
Sicherheitsrichtlinienmodule gleichzeitig eine mehrschichtige
Sicherheitsumgebung schaffen. Das ist etwas anderes als singuläre
Richtlinien wie zum Beispiel die Firewall, die typischerweise Elemente
eines Systems stabilisiert, das nur für einen speziellen Zweck
verwendet wird. Der Verwaltungsmehraufwand ist jedoch von Nachteil, zum
Beispiel durch die Verwendung von mehreren Labels oder dem
eigenhändigen Erlauben von Netzwerkzugriffen für jeden
einzelnen Nutzer.</para>
<para>Solche Nachteile sind allerdings gering im Vergleich zum bleibenden
Effekt der erstellten Struktur. Die Möglichkeit zum Beispiel,
für konkrete Anwendungen genau die passenden Richtlinien
auszuwählen und einzurichten, senkt gleichzeitig die Arbeitskosten.
Wenn man unnötige Richtlinien aussortiert, kann man die
Gesamtleistung des Systems genauso steigern wie auch eine höhere
Anpassungsfähigkeit gewährleisten. Eine gute Umsetzung der
<acronym>MAC</acronym> beinhaltet eine Prüfung der gesamten
Sicherheitsanforderungen und einen wirksamen Einsatz der verschiedenen
Module.</para>
<para>Ein System, auf dem eine <acronym>MAC</acronym> verwendet wird,
muß zumindest garantieren, dass einem Nutzer nicht gestattet wird,
Sicherheitsmerkmale nach eigenem Ermessen zu verändern; dass
Arbeitswerkzeuge, Programme und Skripte, innerhalb der
Beschränkungen arbeiten können, welche die Zugriffsregeln der
ausgewählten Module dem System auferlegen; und dass die volle
Kontrolle über die Regeln der <acronym>MAC</acronym> beim
Administrator ist und bleibt.</para>
<para>Es ist die einsame Pflicht des zuständigen Administrators, die
richtigen Module sorgfältig auszuwählen. Einige Umgebungen
könnten eine Beschränkung der Zugriffe über die
Netzwerkschnittstellen benötigen - hier wären die Module
&man.mac.portacl.4;, &man.mac.ifoff.4; und sogar &man.mac.biba.4; ein
guter Anfang. In anderen Fällen muß man sehr strenge
Vertraulichkeit von Dateisystemobjekten gewährleisten - dafür
könnte man &man.mac.bsdextended.4; oder &man.mac.mls.4;
einsetzen.</para>
<para>Die Entscheidung, welche Richtlinien angewandt werden, kann auch
anhand der Netzwerk-Konfiguration getroffen werden. Nur bestimmten
Benutzern soll erlaubt werden, via &man.ssh.1; auf das Netzwerk oder
Internet zuzugreifen - &man.mac.portacl.4; wäre eine gute Wahl.
Aber für was entscheidet man sich im Falle eines Dateisystems?
Soll der Zugriff auf bestimmte Verzeichnisse von spezifischen Nutzern
oder Nutzergruppen separiert werden? Oder wollen wir den Zugriff durch
Nutzer oder Programme auf spezielle Dateien einschränken, indem wir
gewisse Objekte als geheim einstufen?</para>
<para>Der Zugriff auf Objekte kann einigen vertraulichen Nutzern gestattet
werden, anderen wiederum verwehrt. Als Beispiel sei hierzu ein
großes Entwicklerteam angeführt, das in kleine Gruppen von
Mitarbeitern aufgeteilt wurde. Die Entwickler von Projekt A dürfen
nicht auf Objekte zugreifen, die von den Entwicklern von Projekt B
geschrieben wurden. Sie müssen aber trotzdem auf Objekte
zugreifen können, die von einem dritten Entwicklerteam geschaffen
wurden - alles in allem eine verzwickte Situation. Wenn man die
verschiedenen Module der <acronym>MAC</acronym> richtig verwendet,
können Anwender in solche Gruppen getrennt und ihnen der Zugriff zu
den gewünschten Systemobjekten gestattet werden - ohne Angst haben
zu müssen, dass Informationen in die falschen Hände
geraten.</para>
<para>So hat jedes Modul, das eine Sicherheitsrichtlinie verfügbar
macht, einen eigenen Weg, die Sicherheit des Systems zu verstärken.
Die Auswahl der Module sollte auf einem gut durchdachten
Sicherheitskonzept gründen. In vielen Fällen muß das
gesamte Konzept eines Systems überarbeitet und neu eingepflegt
werden. Ein guter Überblick über die Möglichkeiten der
verschiedenen von der <acronym>MAC</acronym> angebotenen Module
hilft einem Administrator, die besten Richtlinien für seine
spezielle Situation auszuwählen.</para>
<para>Im &os;-Standardkernel ist die Option zur Verwendung der
<acronym>MAC</acronym> nicht enthalten. Daher muß die
Zeile</para>
<programlisting>options MAC</programlisting>
<para>der Kernelkonfiguration hinzugefügt und der Kernel neu
übersetzt und installiert werden.</para>
<caution>
<para>Verschiedenen Anleitungen für die <acronym>MAC</acronym>
empfehlen, die einzelnen Module direkt in den Kernel einzuarbeiten.
Dabei ist es jedoch möglich, das System aus dem Netzwerk
auszusperren oder gar schlimmeres. Die Arbeit mit der
<acronym>MAC</acronym> ist ähnlich der Arbeit mit einer Firewall -
man muß, wenn man sich nicht selbst aus dem System aussperren
will, genau aufpassen. Man sollte sich eine Möglichkeit
zurechtlegen, wie man eine Implementation einer <acronym>MAC</acronym>
rückgängig machen kann - genauso wie eine Ferninstallation
über das Netzwerk nur mit äußerster Vorsicht
vorgenommen werden sollte. Es wird daher empfohlen,
die Module nicht in den Kernel einzubinden, sondern sie beim
Systemstart via <filename>/boot/loader.conf</filename> zu
laden.</para>
</caution>
</sect1>
<sect1 id="mac-understandlabel">
<title>MAC Labels verstehen</title>
<para>MAC Label sind Sicherheitsmerkmale, die, wenn sie zum Einsatz kommen,
allen Subjekten und Objekten im System zugeordnet werden.</para>
<para>Wenn ein Administrator ein solches Merkmal bzw. Attribut setzen will,
muß er/sie verstehen können, was da genau passiert. Die
Attribute, die im speziellen Fall zu vergeben sind, hängen vom
geladenen Modul und den darin jeweils implementierten Richtlinien ab.
Jedes dieser Richtlinienmodule setzt die Arbeit mit seinen entsprechenden
Attributen in individueller Weise um. Falls der Nutzer nicht versteht,
was er da konfiguriert, oder auch, was seine Konfiguration für
Begleiterscheinungen mit sich bringt, ergibt sich meist als Resultat ein
unerwartetes, ja sogar unerwünschtes Verhalten des gesamten
Systems.</para>
<para>Ein Label, einem Objekt verliehen, wird verwendet, um anhand einer
Richtlinie eine sicherheitsrelevante Entscheidung über
Zugriffsrechte zu fällen. In einigen Richtlinien enthält
bereits das Label selbst alle dafür nötigen Informationen.
Andere Richtlinien verwenden diese Informationen, um zunächst ein
komplexes Regelwerk abzuarbeiten.</para>
<para>Wenn man zum Beispiel einer Datei das Attribut
<literal>biba/low</literal> zuordnet, wird dieses durch das Biba
Sicherheitsrichtlinienmodul, und zwar mit dem Wert <quote>low</quote>,
verarbeitet.</para>
<para>Einige der Richtlinienmodule, die die Möglichkeit zum Vergeben
von Labels unter &os; unterstützen, bieten drei vordefinierte
Labels an. Dieses nennen sich <quote>high</quote>, <quote>low</quote>
und <quote>equal</quote>. Obwohl die verschiedenen Module die
Zugriffskontrolle auf verschiedene Weisen regeln, kann man sich sicher
sein, das das <quote>low</quote>-Label der untersten, unsichersten
Einstellung entspricht, das <quote>equal</quote>-Label die Verwendung des
Moduls für das jeweilige Objekt oder Subjekt deaktiviert - und das
<quote>high</quote>-Label die höchstmögliche Einstellung
erzwingt. Im Speziellen gilt diese Aussage für die
Richtlinien(-module) <acronym>MLS</acronym> und Biba.</para>
<para>In den meisten Umgebungen, sogenannten Single Label Environments,
wird Objekten nur ein einzelnes Label zugewiesen. Dadurch wird nur ein
Regelsatz für die Zugriffskontrolle auf das gesamte System verwendet
- und das ist meistens auch tatsächlich ausreichend. Es gibt wenige
Fälle, in denen mehrere Labels auf Dateisystemobjekte oder -subjekte
verwendet werden. In einem solchen Fall muß das Dateisystem mit
der &man.tunefs.8;-Option <option>multilabel</option> angepaßt
werden, da <option>single label</option> die Standardeinstellung
ist.</para>
<para>Bei der Verwendung von Biba oder <acronym>MLS</acronym> kann man
numerische Labels vergeben, die genau das Level angeben, an welcher
Stelle in der Hierarchie das Subjekt oder Objekt einzuordnen ist. Dieses
numerische Level wird verwendet, um Informationen in verschiedene Gruppen
aufzuteilen oder zu sortieren - damit zum Beispiel nur Subjekte, die zu
einer gewissen Vertraulichkeitsstufe gehören, Zugang zu einer Gruppe
von Objekten erhalten.</para>
<para>In den meisten Fällen wird ein Administrator nur ein einzelnes
Label für das gesamte Dateisystem verwenden.</para>
<para><emphasis>Moment mal, dass ist doch dasselbe wie
<acronym>DAC</acronym>! Ich dachte, <acronym>MAC</acronym> würde die
Kontrolle strengstens an den Administrator binden!</emphasis> Diese
Aussage hält immer noch stand&nbsp; - <username>root</username> ist
derjenige, der die Kontrolle ausübt und die Richtlinie konfiguriert,
so dass Nutzer in die entsprechenden, angemessenen Kategorien /
Zugriffsklassen eingeordnet werden. Nunja, einige Module schränken
<username>root</username> selbst ein. Die Kontrolle über Objekte
wird dann einer Gruppe zugewiesen, jedoch hat <username>root</username>
die Möglichkeit, die Einstellungen jederzeit zu widerrufen oder zu
ändern. Dies ist das Hierarchie/Freigabe-Modell, das durch
Richtlinien wie MLS oder Biba bereitgestellt wird.</para>
<sect2>
<title>Konfigurieren der Labels</title>
<para>Gewissermaßen alle Aspekte der Labelkonfiguration
werden durch Werkzeuge das Basissystems umgesetzt. Die entsprechenden
Kommandos bieten eine einfache Schnittstelle zum Konfigurieren,
Manipulieren und auch Verifizieren der gekennzeichneten Objekte.</para>
<para>Mit den beiden Kommandos &man.setfmac.8; und &man.setpmac.8; kann
man eigentlich schon alles machen. Das Kommando
<command>setfmac</command> wird verwendet, um ein MAC-Label auf einem
Systemobjekt zu setzen, <command>setpmac</command> hingegen zum Setzen
von Labels auf Systemsubjekte. Als Beispiel soll hier dienen:</para>
<screen>&prompt.root; <userinput>setfmac biba/high test</userinput></screen>
<para>Wenn bei der Ausführung dieses Kommandos keine Fehler
aufgetreten sind, gelangt man zur Eingabeaufforderung zurück. Nur
wenn ein Fehler auftritt, verhalten sich diese Kommandos nicht still,
ganz wie auch die Kommandos &man.chmod.1; und &man.chown.8;. In
einigen Fällen wird dieser Fehler <errorname>Permission
denied</errorname> lauten und gewöhnlich dann auftreten, wenn ein
Label an einem Objekt angebracht oder verändert werden soll, das
bereits (Zugriffs-)Beschränkungen
unterliegt.<footnote><para>Andere Vorbedingungen führen
natürlich zu anderen Fehlern. Zum Beispiel wenn das Objekt nicht
dem Nutzer gehört, der das Label ändern möchte, das
Objekt vielleicht gar nicht existiert oder es sich um ein nur lesbares
Objekt handelt. Oder eine verbindliche Richtlinie erlaubt dem
Prozeß die Veränderung des Labels nicht, weil die
Eigenschaften der Datei, die Eigenschaften des Prozesses oder der
Inhalt des neuen Labels nicht akzeptiert werden. Beispiel: Ein
Anwender mit geringer Vertraulichkeit versucht, das Label einer Datei
mit hoher Vertraulichkeit zu ändern. Oder er versucht, eine Datei
mit geringer Vertraulichkeit zu einer Datei mit hoher Vertraulichkeit
zu machen.</para></footnote> Der Systemadministrator kann so eine
Situation mit Hilfe der folgenden Kommandos überwinden:</para>
<screen>&prompt.root; <userinput>setfmac biba/high test</userinput>
<errorname>Permission denied</errorname>
&prompt.root; <userinput>setpmac biba/low setfmac biba/high test</userinput>
&prompt.root; <userinput>getfmac test</userinput>
test: biba/high</screen>
<para>Wie wir hier sehen, kann <command>setpmac</command> verwendet
werden, um die vorhandene Einstellungen zu umgehen, indem dem
gestarteten Prozeß ein anderes, valides Label zugeordnet wird.
Das Werkzeug <command>getpmac</command> wird normalerweise auf gerade
laufende Prozesse angewendet. Ähnlich
<application>sendmail</application>: Als Argument wird statt eines
Kommandos eine eine Prozeß-ID übergeben, es verbirgt sich
doch dieselbe Logik dahinter. Wenn ein Nutzer versucht, eine Datei zu
verändern, auf die er keinen Zugriff hat, entsprechend der Regeln
eines geladenen Richtlinienmoduls, wird der Fehler <errorname>Operation
not permitted</errorname> durch die Funktion
<function>mac_set_link</function> angezeigt.</para>
<sect3>
<title>Übliche Typen von Labeln</title>
<para>Wenn man die Module &man.mac.biba.4;, &man.mac.mls.4; und
&man.mac.lomac.4; verwendet, hat man die Möglichkeit, einfache
Label zu vergeben. Diese nennen sich <literal>high</literal>,
<literal>low</literal> und <literal>equal</literal>. Es folgt eine
kurze Beschreibung, was diese Labels bedeuten:</para>
<itemizedlist>
<listitem>
<para>Das Label <literal>low</literal> ist
definitionsgemäß das niedrigeste Label, das einem
Objekt oder Subjekt verliehen werden kann. Wird es gesetzt, kann
die entsprechende Entität nicht mehr auf Entitäten
zugreifen, die das Label <literal>high</literal> tragen.</para>
</listitem>
<listitem>
<para>Das Label <literal>equal</literal> wird Entitäten
verliehen, die von der Richtlinie ausgenommen sein sollen.</para>
</listitem>
<listitem>
<para>Das Label <literal>high</literal> verleiht einer Entität
die höchstmögliche Einstellung.</para>
</listitem>
</itemizedlist>
<para>Unter Beachtung jedes einzelnen Richtlinienmoduls moduliert und
beschränkt jede dieser Einstellungen den Informationsfluß
unterschiedlich. Genaue Erklärungen zu den Charakteristika der
einfachen Labels in den verschiedenen Modulen finden sich im
entsprechenden Unterabschnitt dieses Kapitels oder in den
Manpages.</para>
<sect4>
<title>Fortgeschrittene Label-Konfiguration</title>
<para>Numerische klassifizierte Labels werden verwendet in der Form
<literal>Klasse:Verbund+Verbund</literal>. Demnach ist das
Label</para>
<programlisting>biba/10:2+3+6(5:2+3-15:2+3+4+5+6)</programlisting>
<para>folgendermaßen zu lesen:</para>
<para><quote>Biba Policy Label</quote>/<quote>effektive Klasse
10</quote>
:<quote>Verbund 2,3 und 6</quote>:
(<quote>Low-Klasse 5:...</quote>-
<quote>High-Klasse 15:...</quote>)</para>
<para>In diesem Beispiel ist die erstgenannte Klasse als
<quote>effektive Klasse</quote> zu bezeichnen. Ihr werden die
<quote>effektiven Verbünde</quote> zugeordnet. Die zweite
Klasse ist die <quote>Low</quote>-Klasse und die letzte die
<quote>high</quote>-Klasse. Die allermeisten Konfigurationen kommen
ohne die Verwendungen von solchen Klassen aus, nichtsdestotrotz kann
man sie für erweiterte Konfigurationen verwenden.</para>
<para>Sobald sie auf <emphasis>Systemsubjekte</emphasis> angewendet
werden, haben diese eine gegenwärtige Klasse/Verbund-
Konfiguration und diese muß im definierten Rahmen
gegebenenfalls angepaßt (erhöht oder gesenkt) werden. Im
Gegensatz dazu haben <emphasis>Systemobjekte</emphasis> alle
eingestellten (effektive, High- und Low-Klasse) gleichzeitig. Dies
ist notwendig, damit auf Sie von den
<emphasis>Systemsubjekten</emphasis> in den verschiedenen Klassen
gleichzeitig zugegriffen werden kann.</para>
<para>Die Klasse und und die Verbünde in einem Subjekt-Objekt-Paar
werden zum Erstellen einer sogenannten Dominanz-Relation verwendet,
in welcher entweder das Subjekt das Objekt, das Objekt das Subjekt,
keines das andere dominiert oder sich beide gegenseitig dominieren.
Der Fall, dass sich beide dominieren, tritt dann ein, wenn die beiden
Labels gleich sind. Wegen der Natur des Informationsflusses in Biba
kann man einem Nutzer Rechte für einen Reihe von Abteilungen
zuordnen, die zum Beispiel mit entsprechenden Projekten
korrespondieren. Genauso können aber auch Objekten mehrere
Abteilungen zugeordnet sein. Die Nutzer müssen eventuell ihre
gegenwärtigen Rechte mithilfe von <command>su</command> or
<command>setpmac</command> anpassen um auf Objekte in einer Abteilung
zuzugreifen, zu der sie laut ihrer effektiven Klasse nicht berechtigt
sind.</para>
</sect4>
</sect3>
<sect3>
<title>Nutzer- und Label-Einstellungen</title>
<para>Nutzer selbst brauchen Labels damit ihre Dateien und Prozesse
korrekt mit der Sicherheitsrichtlinie zusammenarbeitet, die für
das System definiert wurde. Diese werden in der Datei
<filename>login.conf</filename> durch die Verwendung von Login-
Klassen zugeordnet. Jedes Richtlinienmodul, das Label verwendet,
arbeitet mit diesen Login-Klassen.</para>
<para>Beispielhaft wird der folgende Eintrag, der für jede
Richtlinie eine Einstellung enthält, gezeigt:</para>
<programlisting>default:\
:copyright=/etc/COPYRIGHT:\
:welcome=/etc/motd:\
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
:path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:\
:manpath=/usr/share/man /usr/local/man:\
:nologin=/usr/sbin/nologin:\
:cputime=1h30m:\
:datasize=8M:\
:vmemoryuse=100M:\
:stacksize=2M:\
:memorylocked=4M:\
:memoryuse=8M:\
:filesize=8M:\
:coredumpsize=8M:\
:openfiles=24:\
:maxproc=32:\
:priority=0:\
:requirehome:\
:passwordtime=91d:\
:umask=022:\
:ignoretime@:\
:label=partition/13,mls/5,biba/10(5-15),lomac/10[2]:</programlisting>
<para>Die Label-Option in der letzten Zeile legt fest, welches
Standard-Label für einen Nutzer erzwungen wird. Nutzern darf
niemals gestattet werden, diese Werte selbst zu verändern,
demnach haben Nutzer in dieser Beziehung auch keine Wahlfreiheit. In
einer richtigen Konfiguration jedoch wird kein Administrator alle
Richtlinienmodule aktivieren wollen. Es wird an dieser Stelle
ausdrücklich empfohlen, dieses Kapitel zu Ende zu lesen, bevor
irgendein Teil dieser Konfiguration ausprobiert wird.</para>
<note>
<para>Nutzer können ihr eigenes Label nach dem Loginvorgang
durchaus ändern. Jedoch kann diese Änderung nur unter den
Auflagen der gerade gültigen Richtlinie geschehen. Im
Beispiel oben wird für die Biba-Richtlinie eine minimale
Prozeßintegrität von 5, eine maximale von 15 angegeben,
aber die Voreinstellung des tatsächlichen Labels ist 10. Der
Nutzerprozeß läuft also mit einer Integrität von 10
bis das Label verändert wird, zum Beispiel durch eine
Anwendung des Kommandos <command>setpmac</command>, welches jedoch
auf den Bereich eingeschränkt wird, der zum Zeitpunkt des
Logins angegeben wurde, in diesem Fall von 5 bis 15.</para>
</note>
<para>Nach einer Änderung der Datei
<filename>login.conf</filename> muß in jedem Fall die
Befähigungsdatenbank mit dem Kommando
<command>cap_mkdb</command> neu erstellt werden&nbsp;- und das gilt
für alle im weiteren Verlauf gezeigten Beispiele und
Diskussionspunkte.</para>
<para>Es ist nützlich anzumerken, dass viele Einsatzorte eine
große Anzahl von Nutzern haben, die wiederum viele
verschiedenen Nutzerklassen angehören sollen. Hier ist eine
Menge Planungsarbeit notwendig, da die Verwaltung sehr
unübersichtlich und schwierig ist.</para>
</sect3>
<sect3>
<title>Netzwerkschnittstellen und die zugehörigen Label</title>
<para>Labels können auch, wenn man sie an Netzwerkschittstellen
vergibt, helfen, den Datenfluß durch das Netzwerk zu
kontrollieren. Das funktioniert in allen Fällen genau so wie mit
Objekten. Nutzer, die in der Biba-Richtlinie das Label
<literal>high</literal> tragen, dürfen nicht auf Schnittstellen
zugreifen, die <literal>low</literal> markiert sind usw.</para>
<para>Die Option <option>maclabel</option> wird via
<command>ifconfig</command> übergeben. Zum Beispiel</para>
<screen>&prompt.root; <userinput>ifconfig bge0 maclabel biba/equal</userinput></screen>
<para>belegt die Schnittstelle &man.bge.4; mit dem
<acronym>MAC</acronym> Label <literal>biba/equal</literal>. Wenn eine
komplexe Einstellung wie <literal>biba/high(low-high)</literal>
verwendet wird, muß das gesamte Label in Anführungszeichen
geschrieben werden, da sonst eine Fehlermeldung zurückgegeben
wird.</para>
<para>Jedes Richtlinienmodul, das die Vergabe von Labels
unterstützt, stellt einen Parameter bereit, mit dem das
<acronym>MAC</acronym> Label für Netzwerkschnittstellen
deaktiviert werden kann. Das Label der Netzwerkschnittstelle auf
<literal>equal</literal> zu setzen, führt zum selben Ergebnis.
Beachten Sie die Ausgabe von <command>sysctl</command>, die Manpages
der verschiedenen Richtlinien oder eben die Informationen, die im
weiteren Verlauf dieses Kapitels angeboten werden, um mehr zu diesen
Parametern zu erfahren.</para>
</sect3>
</sect2>
<sect2>
<title>Single- oder Multilabel?</title>
<para>Als Standardeinstellung verwendet das System die Option
<option>single label</option>. Was bedeutet das für den
Administrator? Es gibt einige Unterschiede zwischen <option>single
label</option> und <option>multilabel</option>. In ihrer ureigenen
Weise bieten beide Vor- und Nachteile bezogen auf die Flexibilität
bei der Modellierung der Systemsicherheit.</para>
<para>Die Option <option>single label</option> gibt jedem Subjekt oder
Objekt genau ein einziges Label, zum Beispiel
<literal>biba/high</literal>. Mit dieser Option hat man einen
geringeren Verwaltungsaufwand, aber die Flexibilität beim
Einsatzes von Richtlinien ist ebenso gering. Viele Administratoren
wählen daher auch die Option <option>multilabel</option> im
Sicherheitsmodell, wenn die Umstände es erfordern.</para>
<para>Die Option <option>multilabel</option> gestattet, jedem einzelnen
Subjekt oder Objekt seine eigenen unabhängigen Label zu
zuzuordnen. Die Optionen <option>multilabel</option> und <option>
singlelabel</option> betreffen jedoch nur die Richtlinien, die Labels
als Leistungsmerkmal verwenden, einschließlich der Richtlinien
Biba, Lomac, <acronym>MLS</acronym> und
<acronym>SEBSD</acronym>.</para>
<!-- ================================================================================== --
-- ================================================================================== --
-- ================================================================================== --
-- Das folgende Beispiel weigere ich mich zu uebersetzen. Der Autor selbst schreibt --
-- schreibt ja, dass es only a quick example ist. --
-- <para>In many cases, the <option>multilabel</ option> may not need --
-- to be set at all. Consider the following situation and --
-- security model:</para> --
-- <itemizedlist> --
-- <listitem> --
-- <para>&os; web-server using the <acronym>MAC</acronym> --
-- framework and a mix of the various policies.</para> --
-- </listitem> --
-- <listitem> --
-- <para>This machine only requires one label, --
-- <literal>biba/high</literal>, for everything in the system. --
-- Here the file system would not require the --
-- <option>multilabel</ option> option as a single label --
-- will always be in effect.</para> --
-- </listitem> --
-- <listitem> --
-- <para>But, this machine will be a web server and should have --
-- the web server run at <literal>biba/low</literal> to prevent --
-- write up capabilities. The Biba policy and how it works --
-- will be discussed later, so if the previous comment was --
-- difficult to interpret just continue reading and return. --
-- The server could use a separate partition set at --
-- <literal>biba/low</literal> for most if not all of its --
-- runtime state. Much is lacking from this example, for --
-- instance the restrictions on data, configuration and user --
-- settings; however, this is just a quick example to prove the --
-- aforementioned point.</para> --
-- </listitem> --
-- </itemizedlist> --
-- end of quick example --
-- ================================================================================== --
-- ================================================================================== --
-- ================================================================================== -->
<para>Wenn Richtlinien benutzt werden sollen, die ohne Labels auskommen,
wird die Option <option>multilabel</option> nicht benötigt. Dies
betrifft die Richtlinien <literal>seeotheruids</literal>,
<literal>portacl</literal> und <literal>partition</literal>.</para>
<para>Man sollte sich dessen bewußt sein, dass die Verwendung der
Option <option>multilabel</option> auf einer Partition und die
Erstellung eines Sicherheitsmodells auf der Basis der &os;
<option>multilevel</option> Funktionalität einen hohen
Verwaltungsaufwand bedeutet, da alles im Dateisystem ein Label bekommt.
Jedes Verzeichnis, jede Datei und genauso jede Schnittstelle.</para>
<para>Das folgende Kommando aktiviert <option>multilabel</option>
für ein Dateisystem. Dies funktioniert nur im
Einzelbenutzermodus:</para>
<screen>&prompt.root; <userinput>tunefs -l enable /</userinput></screen>
<para>In einer Swap-Partition wird dies nicht benötigt.</para>
<note>
<para>Falls Sie Probleme beim Setzen der Option
<option>multilabel</option> auf der Root-Partition bemerken, lesen
Sie bitte <xref linkend="mac-troubleshoot"/> dieses Kapitels.</para>
</note>
</sect2>
</sect1>
<sect1 id="mac-planning">
<title>Planung eines Sicherheitsmodells</title>
<para>Wann immer eine neue Technologie eingepflegt werden soll, ist es
wichtig, vorher einen Plan zu erstellen. In den verschiedenen Etappen
der Planung sollte der Administrator nie das
<quote>Große Ganze</quote> aus den Augen verlieren und mindestens
die folgenden Punkte beachten:</para>
<itemizedlist>
<listitem>
<para>Die Anforderungen</para>
</listitem>
<listitem>
<para>Die Ziele</para>
</listitem>
</itemizedlist>
<para>Wenn Sie <acronym>MAC</acronym> verwenden möchten, sind das im
Besonderen folgende Punkte:</para>
<itemizedlist>
<listitem>
<para>Wie werden Informationen und Ressourcen auf den Zielsystemen
klassifiziert?</para>
</listitem>
<listitem>
<para>Welche Arten von Informationen bzw. Ressourcen sollen im Zugang
beschränkt sein und welche Art Einschränkung soll
verwendet werden?</para>
</listitem>
<listitem>
<para>Welche(s) <acronym>MAC</acronym> Modul(e) wählt man, um sein
Ziel zu erreichen?</para>
</listitem>
</itemizedlist>
<para>Es ist immer möglich, die Einstellungen des Systems und der
Systemressourcen im Nachhinein zu <quote>optimieren</quote>. Es ist aber
wirklich lästig, das gesamte Dateisystem zu durchsuchen, um Dateien
oder Benutzerkonten zu reparieren. Eine gute Planung hilft dem
Administrator, sich einer sorgenfreien und effizienten Umsetzung eines
Sicherheitsmodells zu versichern. Testlauf des Sicherheitsmodells
<emphasis>vor</emphasis> dem Einsatz in seiner richtigen Arbeitsumgebung
ist auf jeden Fall empfehlenswert. Die Idee, ein System mit einer
<acronym>MAC</acronym> einfach loslaufen zu lassen, ist wie direkt auf
einen Fehlschlag hinzuarbeiten.</para>
<para>Jede Umgebung hat ihre eigenen Anforderungen. Ein tiefgreifendes und
vollständiges Sicherheitsprofil zu erstellen spart weitere
Änderungen, nachdem das System in Betrieb genommen wurde. Also
werden die folgenden Abschnitte die verschiedenen Module vorstellen, die
den Administratoren zur Verfügung gestellt werden, die Nutzung und
Konfiguration der einzelnen Module beschreiben; und in einigen
Fällen Einblicke gewähren, für welche Situationen welche
Module besonders geeignet sind. Zum Beispiel ein Webserver kann von der
Verwendung der &man.mac.biba.4; oder der &man.mac.bsdextended.4;
Richtlinie profitieren. In anderen Fällen, an einem Rechner mit nur
wenigen lokalen Benutzern, ist die &man.mac.partition.4; die Richtlinie
der Wahl.</para>
</sect1>
<sect1 id="mac-modules">
<title>Modulkonfiguration</title>
<para>Jedes Modul, das in der <acronym>MAC</acronym> enthalten ist, kann
entweder direkt in den Kernel eingefügt werden oder als Kernelmodul
in der Laufzeit des Systems geladen werden. Empfohlen wird, den
Modulnamen in der Datei <filename>/boot/loader.conf</filename>
anzufügen, so dass das Modul am Anfang des Bootvorgangs eingebunden
wird.</para>
<para>Die folgenden Abschnitte werden verschiedene <acronym>MAC</acronym>
Module und ihre jeweiligen Vor- und Nachteile vorstellen. Außerdem
wird erklärt, wie sie in bestimmte Umgebungen eingearbeitet werden
können. Einige Module unterstützen die Verwendung von
<literal>Labels</literal>, das heißt Zugriffskontrolle durch
hinzufügen einer Kennzeichnung in der Art von <quote>dieses ist
erlaubt, jenes aber nicht</quote>. Eine Label-Konfigurationdatei
kontrolliert unter anderem, wie auf Dateien zugegriffen oder wie
über das Netzwerk kommuniziert werden darf. Im vorangehenden
Abschnitt wurde bereits erläutert, wie die Option
<option>multilabel</option> auf Dateisysteme angewendet wird, um eine
Zugriffskontrolle auf einzelne Dateien oder ganze Dateisysteme zu
konfigurieren.</para>
<para>Eine <option>single label</option> Konfiguration erzwingt ein
einzelnes Label für das gesamte System. Daher wird die
<command>tunefs</command>-Option <option>multilabel</option> genannt.
</para>
</sect1>
<sect1 id="mac-seeotheruids">
<title>Das MAC Modul seeotheruids</title>
<indexterm>
<primary>MAC See Other UIDs Policy</primary>
</indexterm>
<para>Modulename: <filename>mac_seeotheruids.ko</filename></para>
<para>Parameter in der Kernelkonfiguration:
<literal>options MAC_SEEOTHERUIDS</literal></para>
<para>Bootparameter:
<literal>mac_seeotheruids_load="YES"</literal></para>
<para>Das Modul &man.mac.seeotheruids.4; erweitert die
<command>sysctl</command>-Variablen
<literal>security.bsd.see_other_uids</literal> und
<literal>security.bsd.see_other_gids</literal>. Diese Optionen
benötigen keine im Vorhinein zu setzenden Labels und können
leicht durchschaubar mit den anderen MAC-Modulen zusammenarbeiten.</para>
<para>Nachdem das Modul geladen wurde, können die folgenden
<command>sysctl</command> Variablen verwendet werden.</para>
<itemizedlist>
<listitem>
<para><literal>security.mac.seeotheruids.enabled</literal> dient zur
Aktivierung des Moduls, zunächst mit den Standardeinstellungen.
Diese verhindern, dass Nutzer Prozesse und Sockets sehen können,
die ihnen nicht selbst gehöen.</para>
</listitem>
<listitem>
<para>
<literal>security.mac.seeotheruids.specificgid_enabled</literal> kann
eine spezifizierte Nutzergruppe von dieser Richtlinie ausnehmen. Die
entsprechende Gruppe muß an den Parameter
<literal>security.mac.seeotheruids.specificgid=<replaceable>XXX</replaceable></literal>
übergeben werden, wobei <replaceable>XXX</replaceable> die ID
der Gruppe ist, die von der Richtlinie ausgenommen werden
soll.</para>
</listitem>
<listitem>
<para>
<literal>security.mac.seeotheruids.primarygroup_enabled</literal>
kann verwendet werden, um eine spezifische,
<emphasis>primäre</emphasis> Nutzergruppe von der Richtlinie
auszuschliessen. Dieser Parameter und
<literal>security.mac.seeotheruids.specificgid_enabled</literal>
schließen einander aus.</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="mac-bsdextended">
<title>Das MAC Modul bsdextended</title>
<indexterm>
<primary>MAC</primary>
<secondary>File System Firewall Policy</secondary>
</indexterm>
<para>Modulname: <filename>mac_bsdextended.ko</filename></para>
<para>Parameter in der Kernelkonfiguration:
<literal>options MAC_BSDEXTENDED</literal></para>
<para>Bootparameter: <literal>mac_bsdextended_load="YES"</literal></para>
<para>Das Modul &man.mac.bsdextended.4; erstellt eine Firewall für
das Dateisystem und ist eine Erweiterung des sonst üblichen
Rechtemodells. Es erlaubt einem Administrator einen Regelsatz zum
Schutz von Dateien, Werkzeugen und Verzeichnissen in der
Dateisystemhierarchie zu erstellen, der einer Firewall ähnelt.
Sobald auf ein Objekt im Dateisystem zugegriffen werden soll, wird eine
Liste von Regel abgearbeitet, bis eine passende Regel gefunden wird
oder die Liste zu Ende ist. Das Verhalten kann durch die Änderung
des &man.sysctl.8; Parameters
<literal>security.mac.bsdextended.firstmatch_enabled</literal>
eingestellt werden. Ähnlich wie bei den anderen Firewallmodulen
in &os; wird eine Datei erstellt, welche die Zugriffsregeln
enthält. Diese wird beim Systemstart durch eine Variable in
&man.rc.conf.5; eingebunden.</para>
<para>Der Regelsatz kann mit dem Programm &man.ugidfw.8; eingepflegt
werden, welches eine Syntax bereitstellt, die der von &man.ipfw.8;
gleicht. Weitere Werkzeuge können auch selbst erstellt werden,
indem die Funktionen der Bibliothek &man.libugidfw.3; verwendet
werden.</para>
<para>Bei der Arbeit mit diesem Modul ist äußerste Vorsicht
geboten - falscher Gebrauch kann den Zugriff auf Teile des Dateisystems
komplett unterbinden.</para>
<sect2>
<title>Beispiele</title>
<para>Nachdem das Modul &man.mac.bsdextended.4; erfolgreich geladen
wurde, zeigt das folgende Kommando die gegenwärtig aktiven Regeln
an:</para>
<screen>&prompt.root; <userinput>ugidfw list</userinput> 0 slots, 0 rules</screen>
<para>Wie erwartet, sind keine Regeln definiert. Das bedeutet, das auf
alle Teile des Dateisystems zugegriffen werden kann. Um eine Regel zu
definieren, die jeden Zugriff durch Nutzer blockiert und nur die Rechte
von <username>root</username> unangetastet läßt, muß
lediglich dieses Kommando ausgeführt werden:</para>
<screen>&prompt.root; <userinput>ugidfw add subject not uid root new object not uid root mode n</userinput></screen>
<para>Das ist allerdings keine gute Idee, da nun allen Nutzern der
Zugriff auf selbst die einfachsten Programme wie <command>ls</command>
untersagt wird. Angemessener wäre etwas wie:</para>
<screen>&prompt.root; <userinput>ugidfw set 2 subject uid <replaceable>user1</replaceable> object uid <replaceable>user2</replaceable> mode n</userinput>
&prompt.root; <userinput>ugidfw set 3 subject uid <replaceable>user1</replaceable> object gid <replaceable>user2</replaceable> mode n</userinput></screen>
<para>Diese Befehle bewirken, dass <username>user1</username> keinen
Zugriff mehr auf Dateien und Programme hat, die
<username><replaceable>user2</replaceable></username> gehören.
Dies schließt das Auslesen von Verzeichniseinträgen ein.
</para>
<para>Anstelle <option>uid</option> <username>user1</username>
könnte auch <option>not uid
<replaceable>user2</replaceable></option> als Parameter übergeben
werden. Dies würde diesselben Einschränkungen für alle
Nutzer bewirken anstatt nur einen einzigen.</para>
<note>
<para><username>root</username> ist von diesen Einstellungen nicht
betroffen.</para>
</note>
<para>Dies sollte als Überblick ausreichen, um zu verstehen, wie das
Modul &man.mac.bsdextended.4; helfen kann, das Dateisystem
abzuschotten. Weitere Informationen bieten die Manpages
&man.mac.bsdextended.4; und &man.ugidfw.8;.</para>
</sect2>
</sect1>
<sect1 id="mac-ifoff">
<title>Das MAC Modul ifoff</title>
<indexterm>
<primary>MAC Interface Silencing Policy</primary>
</indexterm>
<para>Modulname: <filename>mac_ifoff.ko</filename></para>
<para>Parameter für die Kernelkonfiguration:
<literal>options MAC_IFOFF</literal>
</para>
<para>Bootparameter: <literal>mac_ifoff_load="YES"</literal></para>
<para>Das Modul &man.mac.ifoff.4; ist einzig dazu da,
Netzwerkschnittstellen im laufenden Betrieb zu deaktivieren oder zu
verhindern, das Netzwerkschnittstellen während der Bootphase
gestartet werden. Dieses Modul benötigt für seinen Betrieb
weder Labels, die auf dem System eingerichtet werden müssen, noch
hat es Abhängigkeiten zu anderen MAC Modulen.</para>
<para>Der größte Teil der Kontrolle geschieht über die im
folgenden aufgelisteten <command>sysctl</command>-Parameter:</para>
<itemizedlist>
<listitem>
<para><literal>security.mac.ifoff.lo_enabled</literal> schaltet den
gesamten Netzwerkverkehr auf der Loopback-Schnittstelle &man.lo.4; an
bzw. aus.</para>
</listitem>
<listitem>
<para><literal>security.mac.ifoff.bpfrecv_enabled</literal> macht das
Gleiche für den Berkeley Paket Filter &man.bpf.4;.</para>
</listitem>
<listitem>
<para><literal>security.mac.ifoff.other_enabled</literal>
schaltet den Verkehr für alle anderen
Netzwerkschnittstellen.</para>
</listitem>
</itemizedlist>
<para>Die wahrscheinlich häufigste Nutzung von &man.mac.ifoff.4; ist
die Überwachung des Netzwerks in einer Umgebung, in der kein
Netzwerkverkehr während des Bootvorgangs erlaubt werden soll. Eine
andere mögliche Anwendung wäre ein Script, das mit Hilfe von
<filename role="package">security/aide</filename> automatisch alle
Schnittstellen blockiert, sobald Dateien in geschützten
Verzeichnissen angelegt oder verändert werden.</para>
</sect1>
<sect1 id="mac-portacl">
<title>Das MAC Modul portacl</title>
<indexterm>
<primary>MAC Port Access Control List Policy</primary>
</indexterm>
<para>Modulname: <filename>mac_portacl.ko</filename></para>
<para>Parameter für die Kernelkonfiguration:
<literal>options MAC_PORTACL</literal></para>
<para>Bootparameter: <literal>mac_portacl_load="YES"</literal></para>
<para>Mit Hilfe des Moduls &man.mac.portacl.4; können die Anbindungen
an die lokalen <acronym>TCP</acronym> und <acronym>UDP</acronym> Ports
durch eine Vielzahl von <command>sysctl</command> Variablen
beschränkt werden. Genauer gesagt ermöglicht
&man.mac.portacl.4; Nutzern ohne <username>root</username>-Rechten den
Zugriff auf zu bestimmende privilegierte Ports, also denen innerhalb der
ersten 1024.</para>
<para>Sobald das Modul geladen wurde, ist die Richtlinie für alle
Sockets verfügbar. Die folgenden Variablen können für die
Konfiguration verwendet werden:</para>
<itemizedlist>
<listitem>
<para><literal>security.mac.portacl.enabled</literal> schaltet die
Anwendung der Richtlinie ein oder aus.</para>
</listitem>
<listitem>
<para><literal>security.mac.portacl.port_high</literal> gibt den
höchsten Port an, der von der Richtlinie &man.mac.portacl.4;
betroffen sein soll.</para>
</listitem>
<listitem>
<para><literal>security.mac.portacl.suser_exempt</literal> nimmt, wenn
es einen Wert ungleich Null zugewiesen bekommt,
<username>root</username> von der Richtlinie aus.</para>
</listitem>
<listitem>
<para><literal>security.mac.portacl.rules</literal> enthält als
Wert die eigentliche <literal>mac_portacl</literal>
Richtlinie.</para>
</listitem>
</itemizedlist>
<para>Die eigentliche Konfiguration der <literal>mac_portacl</literal>
Richtlinie wird der <command>sysctl</command>-Variablen
<literal>security.mac.portacl.rules</literal> als Zeichenkette der Form
<literal>rule[,rule,...]</literal> übergeben. Jede einzelne Regel
hat die Form <literal>idtype:id:protocol:port</literal>. Der Parameter
<parameter>idtype</parameter> ist entweder <literal>uid</literal> oder
<literal>gid</literal> und wird verwendet, um den Parameter
<parameter>id</parameter> als Nutzer-ID oder Gruppen-ID zu kennzeichnen.
Der Parameter <parameter>protocol</parameter> gibt an, ob die Regel
ür <acronym>TCP</acronym> oder <acronym>UDP</acronym> gelten soll
(indem man den Wert auf <literal>tcp</literal> oder
<literal>udp</literal> setzt). Und der letzte Parameter,
<parameter>port</parameter>, enthält die Nummer des Ports, auf den
der angegebene Nutzer bzw. die angegebene Gruppe Zugriff erhalten
soll.</para>
<note>
<para>Da der Regelsatz direkt vom Kernel ausgewertet wird, können
nur Zahlenwerte übergeben werden. Das heißt, Namen von
Nutzern, Gruppen oder Dienstnamen aus der Datei
<filename>/etc/services</filename> funktionieren nicht.</para>
</note>
<para>Auf &unix;-artigen Betriebssystemen sind die Ports kleiner 1024
privilegierten Prozessen vorbehalten, müssen also mit als/von
<username>root</username> gestartet werden und weiterhin laufen. Damit
&man.mac.portacl.4; die Vergabe von Ports kleiner als 1024 an nicht
privilegierte Prozesse übernehmen kann, muß die &unix;
Standardeinstellung deaktiviert werden. Dazu ändert man die
&man.sysctl.8; Variablen
<literal>net.inet.ip.portrange.reservedlow</literal> und
<literal>net.inet.ip.portrange.reservedhigh</literal> auf den Wert
<quote>0</quote>.</para>
<para>Weiterführende Informationen entnehmen Sie bitte den unten aufgeführten Beispielen oder der Man-Page &man.mac.portacl.4;!</para>
<sect2>
<title>Beispiele</title>
<para>Die folgenden Beispiele sollten ein wenig Licht in die obige
Diskussion bringen:</para>
<screen>&prompt.root; <userinput>sysctl security.mac.portacl.port_high=1023</userinput>
&prompt.root; <userinput>sysctl net.inet.ip.portrange.reservedlow=0 net.inet.ip.portrange.reservedhigh=0</userinput></screen>
<para>Zunächst bestimmen wir, dass &man.mac.portacl.4; für alle
privilegierten Ports gelten soll und deaktivieren die normale
&unix;-Beschränkung.</para>
<screen>&prompt.root; <userinput>sysctl security.mac.portacl.suser_exempt=1</userinput></screen>
<para> Da <username>root</username> von dieser Richtlinie nicht
beeinträchtigt werden soll, setzen wir hier
<literal>security.mac.portacl.suser_exempt</literal> auf einen Wert
ungleich Null. Das Modul &man.mac.portacl.4; ist nun so eingerichtet,
wie es &unix;-artige Betriebssysteme normal ebenfalls tun.</para>
<screen>&prompt.root; <userinput>sysctl security.mac.portacl.rules=uid:80:tcp:80</userinput></screen>
<para>Nun erlauben wir dem Nutzer mit der <acronym>UID</acronym> 80,
normalerweise dem Nutzer <username>www</username>, den Port 80 zu verwenden. Dadurch kann der Nutzer <username>www</username> einen Webserver
betreiben, ohne dafür mit <username>root</username>-Privilegien
ausgestattet zu sein.</para>
<screen>&prompt.root; <userinput>sysctl security.mac.portacl.rules=uid:1001:tcp:110,uid:1001:tcp:995</userinput></screen>
<para>Hier wird dem Nutzer mit der <acronym>UID</acronym> 1001 erlaubt,
die <acronym>TCP</acronym> Ports 110 (<quote>pop3</quote>) und 995
(<quote>pop3s</quote>) zu verwenden. Dadurch kann dieser Nutzer einen
Server starten, der Verbindungen an diesen beiden Ports annehmen
kann.</para>
</sect2>
</sect1>
<sect1 id="mac-partition">
<title>Das MAC Modul partition</title>
<indexterm>
<primary>MAC Process Partition Policy</primary>
</indexterm>
<para>Modulname: <filename>mac_partition.ko</filename></para>
<para>Parameter für die Kernelkonfiguration:
<literal>options MAC_PARTITION</literal>
</para>
<para>Bootparameter <literal>mac_partition_load="YES"</literal></para>
<para>Die Richtlinie &man.mac.partition.4; setzt Prozesse in spezielle
<quote>Partitionen</quote>, entsprechend dem zugewiesenen
<acronym>MAC</acronym> Label. Man kann sich das vorstellen wie eine
spezielle Art &man.jail.8;, auch wenn das noch kein wirklich guter
Vergleich ist.</para>
<para>Es wird empfohlen, dieses Modul durch einen Eintrag in
&man.loader.conf.5; zu aktivieren, so dass die Richtlinie während
des Bootvorganges eingebunden wird.</para>
<para>Der Großteil der Konfiguration geschieht mit dem Kommando
&man.setpmac.8;, wie gleich erklärt wird. Außerdem gibt es folgenden <command>sysctl</command> Parameter für diese Richtlinie.</para>
<itemizedlist>
<listitem>
<para><literal>security.mac.partition.enabled</literal> erzwingt die
Verwendung von <acronym>MAC</acronym>
Prozeß-Partitionen.</para>
</listitem>
</itemizedlist>
<para>Sobald diese Richtlinie aktiv ist, sehen Nutzer nur noch ihre eigenen
Prozesse, und alle anderen Prozesse, die ebenfalls derselben
Prozeß-Partition zugeordnet sind. Sie können jedoch nicht auf
Prozesse oder Werkzeuge außerhalb des Anwendungsbereich dieser
Partition zugreifen. Das bedeutet unter anderem, das ein Nutzer, der
einer Klasse <literal>insecure</literal> zugeordnet ist, nicht auf das
Kommando <command>top</command> zugreifen kann - wie auch auf viele
anderen Befehle, die einen eigenen Prozeß erzeugen.</para>
<para>Um einen Befehl einer Prozeß-Partition zuzuordnen, muß
dieser durch das Kommando <command>setpmac</command> mit einem Label
versehen werden:</para>
<screen>&prompt.root; <userinput>setpmac partition/13 top</userinput></screen>
<para>Diese Zeile fügt das Kommando <command>top</command> dem
Labelsatz für Nutzer der Klasse <literal>insecure</literal> hinzu,
sofern die Partition 13 mit der Klasse <literal>insecure</literal>
übereinstimmt. Beachten Sie, dass alle Prozesse, die von Nutzern
dieser Klasse erzeugt werden, das Label <literal>partition/13</literal>
erhalten, und dieses auch nicht durch den Nutzer geändert werden
kann.</para>
<sect2>
<title>Beispiele</title>
<para>Der folgende Befehl listet die vergebenen Label für
Prozeß-Partitionen und die laufenden Prozesse auf.</para>
<screen>&prompt.root; <userinput>ps Zax</userinput></screen>
<para>Das nächste Kommando liefert das Label der
Prozeß-Partition eines anderen Nutzers
<username>trhodes</username> und dessen gegenwärtig laufenden
Prozesse zurück.</para>
<screen>&prompt.root; <userinput>ps -ZU trhodes</userinput></screen>
<note>
<para>Jeder Nutzer kann die Prozesse in der Prozeß-Partition von
<username>root</username> betrachten, solange nicht die Richtlinie
&man.mac.seeotheruids.4; geladen wurde.</para>
</note>
<para>Eine ausgefeilte Umsetzung dieser Richtlinie deaktiviert alle
Dienste in <filename>/etc/rc.conf</filename> und startet diese dann
später durch ein Skript, das jedem Dienst das passende Label
zuordnet.</para>
<note>
<para>Die folgenden Richtlinien verwenden Zahlenwerte anstatt der drei
Standardlabels. Diese Optionen, und ihre Grenzen, werden in den
zugehörigen Manpages genauer erklärt.</para>
</note>
</sect2>
</sect1>
<sect1 id="mac-mls">
<title>Das MAC Modul Multi-Level Security</title>
<indexterm>
<primary>MAC Multi-Level Security Policy</primary>
</indexterm>
<para>Modulname: <filename>mac_mls.ko</filename></para>
<para>Parameter für die Kernelkonfiguration: <literal>options
MAC_MLS</literal></para>
<para>Bootparameter: <literal>mac_mls_load="YES"</literal></para>
<para>Die Richtlinie &man.mac.mls.4; kontrolliert die Zugriffe zwischen
Subjekten und Objekten, indem sie den Informationsfluß strengen
Regeln unterwirft.</para>
<para>In <acronym>MLS</acronym> Umgebungen wird jedem Subjekt oder Objekt
ein <quote>Freigabe</quote>-Level zugeordnet, und diese werden wiederum
zu einzelnen Verbünden zusammengefaßt. Da diese Freigabe-
oder Anfälligkeits-Level Zahlen größer 6000 erreichen
können, ist es für jeden Systemadministrator eine undankbare
Aufgabe, jede Entität von Grund auf zu konfigurieren. Zum
Glück gibt es 3 <quote>instant</quote> Labels, die in der Richtlinie
zur Anwendung bereit stehen.</para>
<para>Diese drei Labels heißen <literal>mls/low</literal>,
<literal>mls/equal</literal> und <literal>mls/high</literal>. Da sie in
den Manpages &man.mac.mls.4; ausführlich beschrieben werden, gibt
es hier nur einen kurzen Abriß:</para>
<itemizedlist>
<listitem>
<para>Das Label <literal>mls/low</literal> ist eine niedrige
Einstellung, die von allen anderen dominiert werden darf. Alles, was
mit <literal>mls/low</literal> versehen wird, hat ein niedriges
Freigabe-Level und darf auf keine Informationen zugreifen, denen ein
höheres Freigabe-Level zugeordnet wurde. Einem Objekt mit
diesem Label kann außerdem keine Information durch ein Objekt
höherer Freigabe übergeben werden, es kann also auch nicht
durch solche Objekte editiert oder überschrieben werden.</para>
</listitem>
<listitem>
<para>Das Label <literal>mls/equal</literal> wird an Objekte vergeben,
die von dieser Richtlinie ausgenommen werden sollen.</para>
</listitem>
<listitem>
<para>Das Label <literal>mls/high</literal> verkörpert das
höchstmögliche Freigabe-Level. Objekte, denen dieses Label
zugeordnet wird, dominieren alle anderen Objekte des Systems.
Trotzdem können sie Objekten mit einem niedrigeren
Freigabe-Level keine Informationen zuspielen.</para>
</listitem>
</itemizedlist>
<para><acronym>MLS</acronym> bietet:</para>
<itemizedlist>
<listitem>
<para>Eine hierarchische Sicherheitsschicht und Zuordnung
nichthierarchischer Kategorien;</para>
</listitem>
<listitem>
<para>Feste Regeln: kein <quote>Read-Up</quote>, kein
<quote>Write-Down</quote> (ein Subjekt kann nur Objekte gleicher oder
<emphasis>niedrigerer</emphasis> Stufe lesen, und es kann nur Objekte
gleicher oder <emphasis>höherer</emphasis> Stufe
schreiben);</para>
</listitem>
<listitem>
<para>Geheimhaltung (indem unangemessene Offenlegung von Daten
verhindert wird);</para>
</listitem>
<listitem>
<para>Eine Basis zum Entwerfen von Systemen, die Daten verschiedener
Vertraulichkeitsebenen gleichzeitig handhaben sollen (ohne das
geheime und vertrauliche Informationen untereinander ausgetauscht
werden können).</para>
</listitem>
</itemizedlist>
<para>Nachfolgend werden die <command>sysctl</command>-Variablen
vorgestellt, die für die Einrichtung spezieller Dienste und
Schnittstellen vorhanden sind.</para>
<itemizedlist>
<listitem>
<para><literal>security.mac.mls.enabled</literal> schaltet die
Richtlinie <acronym>MLS</acronym> ein (oder aus).</para>
</listitem>
<listitem>
<para><literal>security.mac.mls.ptys_equal</literal> sorgt dafür,
dass während der Initialisierung alle &man.pty.4;-Geräte
als <literal>mls/equal</literal> gekennzeichnet werden.</para>
</listitem>
<listitem>
<para><literal>security.mac.mls.revocation_enabled</literal> sorgt
dafür, dass die Zugriffsrechte von Objekten wieder
zurückgesetzt werden, nachdem deren Label vorübergehend auf
ein niedrigeres Freigabe-Level geändert wurde.</para>
</listitem>
<listitem>
<para><literal>security.mac.mls.max_compartments</literal> gibt die
maximale Anzahl von Verbünden an. Im Prinzip ist es die
höchste Nummer eines Verbundes auf dem System.</para>
</listitem>
</itemizedlist>
<para>Um die Labels der <acronym>MLS</acronym> Richtlinie zu bearbeiten
verwendet man &man.setfmac.8;. Um ein Objekt zu kennzeichnen, benutzen
Sie folgendes Kommando:</para>
<screen>&prompt.root; <userinput>setfmac mls/5 test</userinput></screen>
<para>Um das <acronym>MLS</acronym>-Label der Datei
<filename>test</filename> auszulesen, verwenden Sie dieses
Kommando:</para>
<screen>&prompt.root; <userinput>getfmac test</userinput></screen>
<para>Dies ist eine Zusammenstellung der Merkmale von
<filename>test</filename>. Ein anderer Ansatz ist, für diese
Richtlinie eine Konfigurationsdatei in <filename
class="directory">/etc</filename> abzulegen, die alle Informationen
enthält und mit der dann das Kommando <command>setfmac</command>
gefüttert wird. Diese Vorgehensweise wird erklärt, nachdem
alle Richtlinien vorgestellt wurden.</para>
<sect2>
<title>Verbindlicher Vertraulichkeit in der Planungsphase</title>
<para>Mit dem Richtlinienmodul <literal> Multi-Level Security</literal>
bereitet sich ein Administrator darauf vor, den Fluß
vertraulicher Informationen zu kontrollieren. Beim Starten der
Richtlinie ist immer <literal>mls/low</literal> voreingestellt&nbsp;-
alles kann auf alles zugreifen. Der Administrator ändert dies
während der eigentlichen Konfiguration, indem er die
Vertraulichkeit bestimmter Objekte erhöht.</para>
<para>Jenseits der drei Grundeinstellungen des Labels kann der
Administrator einzelne Nutzer oder Nutzergruppen nach Bedarf
zusammenschließen und den Informationsaustausch zwischen diesen
gestatten oder unterbinden. Es ist sicher eine Vereinfachung, die
Freigabe-Level mit Begriffen wie <literal>vertraulich</literal>,
<literal>geheim</literal> oder <literal>streng geheim</literal> zu
bezeichnen. Einige Administratoren erstellen einfach verschiedene
Gruppen auf der Ebene von gegenwärtigen Projekten. Ungeachtet der
Herangehensweise bei der Klassifizierung muß ein gut durchdachter
Plan existieren, bevor eine derart einengende Richtlinie umgesetzt
wird.</para>
<para>Exemplarisch für die Anwendung dieses Moduls bzw. dieser
Richtlinie seien angeführt:</para>
<itemizedlist>
<listitem>
<para>Ein E-Commerce Webserver</para>
</listitem>
<listitem>
<para>Ein Dateiserver, der vertrauliche Informationen einer Firma
oder eines Konzerns speichert</para>
</listitem>
<listitem>
<para>Umgebungen in Finanzeinrichtungen</para>
</listitem>
</itemizedlist>
<para>Der unsinnigste Einsatzort für diese Richtlinie wäre ein
Arbeitsplatzrechner mit nur zwei oder drei Benutzern.</para>
</sect2>
</sect1>
<sect1 id="mac-biba">
<title>Das MAC Modul Biba</title>
<indexterm>
<primary>MAC Biba Integrity Policy</primary>
</indexterm>
<para>Modulname: <filename>mac_biba.ko</filename></para>
<para>Parameter für die Kernelkonfiguration:
<literal>options MAC_BIBA</literal></para>
<para>Bootparameter: <literal>mac_biba_load="YES"</literal></para>
<para>Das Modul &man.mac.biba.4; lädt die <acronym>MAC</acronym> Biba
Richtlinie. Diese ähnelt stark der <acronym>MLS</acronym>
Richtlinie, nur das die Regeln für den Informationsfluß ein
wenig vertauscht sind. Es wird in diesem Fall der absteigende Fluß
sicherheitskritischer Information geregelt, während die
<acronym>MLS</acronym> Richtlinie den aufsteigenden Fluß regelt.
In gewissen Sinne treffen dieses und das vorangegangene Unterkapitel also
auf beide Richtlinien zu.</para>
<para>In einer Biba-Umgebung wird jedem Subjekt und jedem Objekt ein
<quote>Integritäts</quote>-Label zugeordnet. Diese Labels sind in
hierarchischen Klassen und nicht-hierarchischen Komponenten geordnet. Je
höher die Klasse, um so höher die Integrität.</para>
<para>Die unterstützten Labels heißen
<literal>biba/low</literal>, <literal>biba/equal</literal> und
<literal>biba/high</literal>. Sie werden im Folgenden
erklärt:</para>
<itemizedlist>
<listitem>
<para><literal>biba/low</literal> ist die niedrigste Stufe der
Integrität, die einem Objekt verliehen werden kann. Wenn sie
einem Objekt oder Subjekt zugeordnet wird, kann dieses auf Objekte
oder Subjekte, die biba/high markiert wurden, zwar lesend zugreifen,
nicht jedoch schreibend.</para>
</listitem>
<listitem>
<para>Das Label <literal>biba/equal</literal> ist, wie der aufmerksame
Leser sicherlich schon ahnt, für die Ausnahmen dieser Richtlinie
gedacht und sollte nur diesen Ausnahmen entsprechenden Objekten
verliehen werden.</para>
</listitem>
<listitem>
<para><literal>biba/high</literal> markierte Subjekte und Objekte
können Objekte niedrigerer Stufe schreiben , nicht jedoch lesen.
Es wird empfohlen, dass dieses Label an Objekte vergeben wird, die
sich auf Integrität des gesamten Systems auswirken.</para>
</listitem>
</itemizedlist>
<para>Biba stellt bereit:</para>
<itemizedlist>
<listitem>
<para>Hierarchische Integritätsstufen mit einem Satz
nichthierarchischer Integritätskategorien;</para>
</listitem>
<listitem>
<para>Festgeschriebene Regeln: kein <quote>Write-Up</quote>, kein
<quote>Read-Down</quote> (der Gegensatz zu MLS - ein Subjekt
erhält schreibenden Zugriff auf Objekte gleicher oder geringerer
Stufe, aber nicht bei höherer, und lesenden Zugriff bei gleicher
Stufe oder höerer, aber nicht bei niedrigerer);</para>
</listitem>
<listitem>
<para>Integrität (es wird die Echtheit der Daten
gewährleistet, indem unangemessene Veränderungen verhindert
werden);</para>
</listitem>
<listitem>
<para>Eine Abstufung der Gewährleistung (im Gegensatz zu MLS, bei
der eine Abstufung der Vertraulichkeit vorgenommen wird).</para>
</listitem>
</itemizedlist>
<para>Folgende <command>sysctl</command> Parameter werden zur Nutzung der
Biba-Richtlinie angeboten:</para>
<itemizedlist>
<listitem>
<para><literal>security.mac.biba.enabled</literal> zum
Aktivieren/Deaktivieren der Richtlinie auf dem Zielsystem.</para>
</listitem>
<listitem>
<para><literal>security.mac.biba.ptys_equal</literal> wird verwendet,
um die Biba-Richtlinie auf der &man.pty.4;-Schnittstelle zu
deaktivieren.</para>
</listitem>
<listitem>
<para><literal>security.mac.biba.revocation_enabled</literal>
erzwingt das Zurücksetzen des Labels, falls dieses zeitweise
geändert wurde um ein Subjekt zu dominieren.</para>
</listitem>
</itemizedlist>
<para>Um Einstellungen der Biba Richtlinie für Systemobjekte zu
verändern werden die Befehle <command>setfmac</command> und
<command>getfmac</command> verwendet:</para>
<screen>&prompt.root; <userinput>setfmac biba/low test</userinput>
&prompt.root; <userinput>getfmac test</userinput>
test: biba/low</screen>
<sect2>
<title>Verbindliche Integrität in der Planungsphase</title>
<para>Integrität garantiert, im Unterschied zu Sensitivität,
dass Informationen nur durch vertraute Parteien verändert werden
können. Dies schließt Informationen ein, die zwischen
Subjekten ausgetauscht werden, zwischen Objekt, oder auch zwischen den
beiden. Durch Integrität wird gesichert, das Nutzer nur
Informationen verändern, oder gar nur lesen können, die sie
explizit benötigen.</para>
<para>Das Modul &man.mac.biba.4; eröffnet einem Administrator die
Möglichkeit zu bestimmen, welche Dateien oder Programme ein Nutzer
oder eine Nutzergruppe sehen bzw. aufrufen darf. Gleichzeitig kann er
zusichern, dass dieselben Programme und Dateien frei von Bedrohungen
sind und das System die Echtheit gewährleistet - für diesen
Nutzer oder die Nutzergruppe.</para>
<para>Während der anfänglichen Phase der Planung muß der
Administrator vorbereitet sein, Nutzer in Klassen, Stufen und Bereiche
einzuteilen. Der Zugriff auf Dateien und insbesondere auch Programme
wird verhindert sowohl vor als auch nachdem sie gestartet wurden. Das
System selbst erhält als Voreinstellung das Label
<literal>biba/high</literal> sobald das Modul aktiviert wird&nbsp;- und
es liegt allein am Administrator, die verschiedenen Klassen und Stufen
für die einzelnen Nutzer zu konfigurieren. Anstatt mit Freigaben
zu arbeiten, wie weiter oben gezeigt wurde, könnte man auch
Überbegriffe für Projekte oder Systemkomponenten entwerfen.
Zum Beispiel, ausschließlich Entwicklern den Vollzugriff auf
Quellcode, Compiler und Entwicklungswerkzeuge gewähren,
während man andere Nutzer in Kategorien wie Tester, Designer oder
einfach nur <quote>allgemeiner Nutzer</quote> zusammenfaßt, die
für diese Bereiche lediglich lesenden Zugriff erhalten
sollen.</para>
<para>Mit seinem ursprünglichen Sicherheits-Standpunkt ist ein
Subjekt niedrigerer Integrität unfähig, ein Subjekt
höherer Integrität zu verändern. Ein Subjekt
höherer Integrität kann ein Subjekt niedrigerer
Integrität weder beobachten noch lesen. Wenn man ein Label
für die niedrigstmögliche Klasse erstellt, kann man diese
allen Subjekten verwehren. Einige weitsichtig eingerichtete
Umgebungen, die diese Richtlinie verwenden, sind eingeschränkte
Webserver, Entwicklungs- oder Test-Rechner oder Quellcode-Sammlungen.
Wenig sinnvoll ist diese Richtlinie auf einer Arbeitsstation, oder auf
Rechnern die als Router oder Firewall verwendet werden.</para>
</sect2>
</sect1>
<sect1 id="mac-lomac">
<title>Das MAC Modul LOMAC</title>
<indexterm>
<primary>MAC LOMAC</primary>
</indexterm>
<para>Modulname: <filename>mac_lomac.ko</filename></para>
<para>Parameter für die Kernelkonfiguration:
<literal>options MAC_LOMAC</literal></para>
<para>Bootparameter: <literal>mac_lomac_load="YES"</literal></para>
<para>Anders als die Biba Richtlinie erlaubt die &man.mac.lomac.4;
Richtlinie den Zugriff auf Objekte niedrigerer Integrität nur,
nachdem das Integritätslevel gesenkt wurde. Dadurch wird eine
Störung derIntegritätsregeln verhindert.</para>
<para>Die <acronym>MAC</acronym> Version der <quote>Low-Watermark</quote>
Richtlinie, die nicht mit der älteren &man.lomac.4;-Implementierung
verwechselt werden darf, arbeitet fast genauso wie Biba. Anders ist,
dass hier <quote>schwebende</quote> Label verwendet werden, die ein
Herunterstufen von Subjekten durch Hilfsverbünde ermöglichen.
Dieser zweite Verbund wird in der Form <literal>[auxgrade]</literal>
angegeben und sollte in etwa aussehen wie <literal>lomac/10[2]</literal>,
wobei die Ziffer zwei (2) hier den Hilfsverbund abbildet.</para>
<para>Die <acronym>MAC</acronym> Richtlinie <literal> LOMAC</literal>
beruht auf einer durchgängigen Etikettierung aller Systemobjekte mit
Integritätslabeln, die Subjekten das Lesen von Objekten niedriger
Integrität gestatten und dann das Label des Subjektes herunterstufen
- um zukünftige Schreibvorgänge auf Objekte hoher
Integrität zu unterbinden. Dies ist die Funktion der Option
<literal>[auxgrade]</literal>, die eben vorgestellt wurde. Durch sie
erhält diese Richtlinie eine bessere Kompatibilität und die
Initialisierung ist weniger aufwändig als bei der Richtlinie
Biba.</para>
<sect2>
<title>Beispiele</title>
<para>Wie schon bei den Richtlinien Biba und <acronym>MLS</acronym>
werden die Befehle <command>setfmac</command> und
<command>setpmac</command> verwendet, um die Labels an den
Systemobjekten zu setzen:</para>
<screen>&prompt.root; <userinput>setfmac /usr/home/trhodes lomac/high[low]</userinput>
&prompt.root; <userinput>getfmac /usr/home/trhodes</userinput> lomac/high[low]</screen>
<para>Beachten Sie, dass hier der Hilfswert auf <literal>low</literal>
gesetzt wurde - dieses Leistungsmerkmal ist nur in der
<acronym>MAC</acronym> <literal>LOMAC</literal> Richtlinie
enthalten.</para>
</sect2>
</sect1>
<sect1 id="mac-implementing">
<title>Beispiel 1: Nagios in einer MAC Jail</title>
<indexterm>
<primary>Nagios in a MAC Jail</primary>
</indexterm>
<para>Die folgende Demonstration setzt eine sichere Umgebung mithilfe
verschiedener <acronym>MAC</acronym> Module und sorgfältig
konfigurierter Richtlinien um. Es handelt sich jedoch nur um einen Test
und sollte nicht als Antwort auf jedes Problem in Fragen Sicherheit
gesehen werden. Eine Richtlinie nur umzusetzen und dann einfach laufen
zu lassen, funktioniert nie und kann eine echte Arbeitsumgebung in eine
Katastrophe stürzen.</para>
<para>Bevor es losgeht, muß jedes Dateisystem mit der Option
<option>multilabel</option>, wie weiter oben beschrieben, markiert
werden. Dies nicht zu tun, führt zu Fehlern. Außerdem
müssen die Ports <filename
role="package">net-mngt/nagios-plugins</filename>, <filename
role="package">net-mngt/nagios</filename> und <filename
role="package">www/apache13</filename> installiert und konfiguriert sein,
so dass sie ordentlich laufen.</para>
<sect2>
<title>Erstellen einer Nutzerklasse <literal>insecure</literal></title>
<para>Beginnen wir die Prozedur mit dem Hinzufügen einer
Nutzerklasse in der Datei <filename>/etc/login.conf</filename>:</para>
<programlisting>insecure:\
:copyright=/etc/COPYRIGHT:\
:welcome=/etc/motd:\
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
:path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin--
:manpath=/usr/share/man /usr/local/man:\
:nologin=/usr/sbin/nologin:\
:cputime=1h30m:\
:datasize=8M:\
:vmemoryuse=100M:\
:stacksize=2M:\
:memorylocked=4M:\
:memoryuse=8M:\
:filesize=8M:\
:coredumpsize=8M:\
:openfiles=24:\
:maxproc=32:\
:priority=0:\
:requirehome:\
:passwordtime=91d:\
:umask=022:\
:ignoretime@:\
:label=biba/10(10-10):</programlisting>
<para>Zusätzlich fügen wir beim Standardnutzer folgende Zeile
hinzu:</para>
<programlisting>:label=biba/high:</programlisting>
<para>Anschließend muß die Datenbank neu erstellt
werden:</para>
<screen>&prompt.root; <userinput>cap_mkdb /etc/login.conf</userinput></screen>
</sect2>
<sect2>
<title>Boot-Konfiguration</title>
<para>Starten Sie den Rechner noch nicht neu. Fügen Sie
zunächst noch die folgenden Zeilen in die Datei
<filename>/boot/loader.conf</filename> ein, damit die benötigten
Module während des Systemstarts geladen werden:</para>
<programlisting>mac_biba_load="YES"
mac_seeotheruids_load="YES"</programlisting>
</sect2>
<sect2>
<title>Nutzer einrichten</title>
<para>Ordnen Sie den Superuser <username>root</username> der Klasse
<literal>default</literal> zu:</para>
<screen>&prompt.root; <userinput>pw usermod root -L default</userinput></screen>
<para>Alle Nutzerkonten, die weder <username>root</username> noch
Systemkonten sind, brauchen nun eine Loginklasse, da sie sonst keinen
Zugriff auf sonst übliche Befehle erhalten, wie bspw. &man.vi.1;.
Das folgende <command>sh</command> Skript wird diese Aufgabe
erledigen:</para>
<screen>&prompt.root; <userinput>for x in `awk -F: '($3 &gt;= 1001) &amp;&amp; ($3 != 65534) { print $1 }' \</userinput>
<userinput>/etc/passwd`; do pw usermod $x -L default; done;</userinput></screen>
<para>Verschieben Sie die Nutzer <username>nagios</username> und
<username>www</username> in die <literal>insecure</literal>
Klasse:</para>
<screen>&prompt.root; <userinput>pw usermod nagios -L insecure</userinput></screen>
<screen>&prompt.root; <userinput>pw usermod www -L insecure</userinput></screen>
</sect2>
<sect2>
<title>Die Kontextdatei erstellen</title>
<para>Nun muß eine Kontextdatei erstellt werden. Die folgende
Beispieldatei soll dazu in <filename>/etc/policy.contexts</filename>
gespeichert werden:</para>
<programlisting># This is the default BIBA policy for this system.
# System:
/var/run biba/equal
/var/run/* biba/equal
/dev biba/equal
/dev/* biba/equal
/var biba/equal
/var/spool biba/equal
/var/spool/* biba/equal
/var/log biba/equal
/var/log/* biba/equal
/tmp biba/equal
/tmp/* biba/equal
/var/tmp biba/equal
/var/tmp/* biba/equal
/var/spool/mqueue biba/equal
/var/spool/clientmqueue biba/equal
# For Nagios:
/usr/local/etc/nagios
/usr/local/etc/nagios/* biba/10
/var/spool/nagios biba/10
/var/spool/nagios/* biba/10
# For apache
/usr/local/etc/apache biba/10
/usr/local/etc/apache/* biba/10
</programlisting>
<para>Die Richtlinie erzwingt Sicherheit, indem der
Informationsfluß Einschränkungen unterworfen wird. In der
vorliegenden Konfiguration kann kein Nutzer, weder
<username>root</username> noch andere, auf
<application>Nagios</application> zugreifen. Konfigurationsdateien und
die Prozesse, die Teil von <application>Nagios</application> sind,
werden durch unsere <acronym>MAC</acronym> vollständig
abgegrenzt.</para>
<para>Die Kontextdatei kann nun vom System eingelesen werden, indem
folgender Befehl ausgeführt wird:</para>
<screen>&prompt.root; <userinput>setfmac -ef /etc/policy.contexts /</userinput>
&prompt.root; <userinput>setfmac -ef /etc/policy.contexts /</userinput></screen>
<note>
<para>Das obenstehende Dateisystem-Layout kann, je nach Umgebung, sehr
unterschiedlich aussehen. Außerdem muß es auf jedem
einzelnen Dateisystem ausgeführt werden.</para>
</note>
<para>In die Datei <filename>/etc/mac.conf</filename> müssen nun
noch diese Änderungen eingetragen werden:</para>
<programlisting>default_labels file ?biba
default_labels ifnet ?biba
default_labels process ?biba
default_labels socket ?biba
</programlisting>
</sect2>
<sect2>
<title>Netzwerke einbinden</title>
<para>Tragen Sie die folgende Zeile in die Datei
<filename>/boot/loader.conf</filename> ein:</para>
<programlisting>security.mac.biba.trust_all_interfaces=1</programlisting>
<para>Und das Folgende gehört in Datei <filename>rc.conf</filename>
zu den Optionen für die Netzwerkkarte. Falls die
Netzwerkverbindung(-en) via <acronym>DHCP</acronym>
konfiguriert werden, muß man dies nach jedem Systemstart
eigenhändig nachtragen:</para>
<programlisting>maclabel biba/equal</programlisting>
</sect2>
<sect2>
<title>Testen der Konfiguration</title>
<indexterm>
<primary>MAC Configuration Testing</primary>
</indexterm>
<para>Versichern Sie sich, dass der Webserver und
<application>Nagios</application> nicht automatisch geladen werden und
starten Sie den Rechner neu. Prüfen Sie nun, ob
<username>root</username> wirklich keinen Zugriff auf die Dateien im
Konfigurationsverzeichnis von <application>Nagios</application> hat.
Wenn <username>root</username> den Befehl &man.ls.1; auf
<filename>/var/spool/nagios</filename> ausführen kann, ist
irgendwas schief gelaufen. Es sollte ein <errorname>permission
denied</errorname> Fehler ausgegeben werden.</para>
<para>Wenn alles gut aussieht, können
<application>Nagios</application>,
<application>Apache</application> und
<application>Sendmail</application> gestartet werden - allerdings auf
eine Weise, die unserer Richtlinie gerecht wird. Zum Beispiel durch die
folgenden Kommandos:</para>
<screen>&prompt.root; <userinput>cd /etc/mail &amp;&amp; make stop &amp;&amp; \
setpmac biba/equal make start &amp;&amp; setpmac biba/10\(10-10\) apachectl start &amp;&amp; \
setpmac biba/10\(10-10\) /usr/local/etc/rc.d/nagios.sh forcestart</userinput></screen>
<para>Versichern Sie sich lieber doppelt, dass alles ordentlich
läuft. Wenn nicht, prüfen Sie die Logs und Fehlermeldungen.
Verwenden Sie das &man.sysctl.8; Werkzeug um die Sicherheitsrichtlinie
&man.sysctl.8; zu deaktivieren und versuchen Sie dann alles noch einmal
zu starten.</para>
<note>
<para>Der Superuser kann den Vollzug der Richtlinie schalten und die
Konfiguration ohne Furcht verändern. Folgender Befehl stuft
eine neu gestartete Shell herunter:</para>
<screen>&prompt.root; <userinput>setpmac biba/10 csh</userinput></screen>
<para>Um dies zu vermeiden, werden die Nutzer durch &man.login.conf.5;
eingeschränkt. Wenn &man.setpmac.8; einen Befehl
außerhalb der definierten Schranken ausführen soll, wird
ein Fehler zurückgeliefert. In so einem Fall muß
<username>root</username> auf <literal>biba/high(high-high)</literal>
gesetzt werden.</para>
</note>
</sect2>
</sect1>
<sect1 id="mac-userlocked">
<title>Beispiel 2: User Lock Down</title>
<para>Grundlage dieses Beispiels ist ein relativ kleines System zur
Datenspeicherung mit weniger als 50 Benutzern. Diese haben die
Möglichkeit, sich einzuloggen und dürfen nicht nur Daten
speichern, sondern auch auf andere Ressourcen zugreifen.</para>
<para>Die Richtlinien &man.mac.bsdextended.4; und &man.mac.seeotheruids.4;
können gleichzeitig eingesetzt werden. Zusammen kann man mit ihnen
nicht nur den Zugriff auf Systemobjekte einschränken, sondern auch
Nutzerprozesse verstecken.</para>
<para>Beginnen Sie, indem Sie die folgende Zeile in die Datei
<filename>/boot/loader.conf</filename> eintragen:</para>
<programlisting>mac_seeotheruids_load="YES"</programlisting>
<para>Die Richtlinie &man.mac.bsdextended.4; wird durch den
anschließenden Eintrag in <filename>/etc/rc.conf</filename>
hinzugefügt:</para>
<programlisting>ugidfw_enable="YES"</programlisting>
<para>Die Standardregeln, welche in
<filename>/etc/rc.bsdextended</filename> gespeichert sind, werden zum
Systemstart geladen. Sie müssen aber noch angepaßt werden.
Da dieser Computer nur Nutzern dienen soll und weitere Dienste gestartet
werden, kann alles bis auf die beiden letzten Zeilen auskommentiert
werden. Das sorgt dafür dass jeder Nutzer seine eigenen
Systemobjekte erhält.</para>
<para>Nun fügen wir alle benötigten Nutzer auf der Maschine hinzu
und starten neu. Zum Testen der Einstellungen loggen Sie sich parallel
zwei mal mit unterschiedlichen Nutzernamen ein und starten Sie das
Kommando <command>ps aux</command>. Dort sehen Sie, dass Sie die
Prozesse des anderen Nutzers nicht sehen können. Versuchen Sie,
&man.ls.1; auf das Heimatverzeichnis eines anderen Nutzers
auszuführen. Auch dieser Versuch wird fehlschlagen.</para>
<para>Solange nicht die speziellen <command>sysctl</command>-Variablen
geändert wurden, hat der Superuser noch vollen Zugriff. Sobald auch
diese Einstellungen angepaßt wurden, führen Sie ruhig auch
den obigen Test als <username>root</username> aus.</para>
<note>
<para>Wenn ein neuer Benutzer hinzugefügt wird, ist für diesen
zunächst keine &man.mac.bsdextended.4; Regel im Regelsatz
vorhanden. Schnelle Abhilfe schafft hier, einfach das Kernelmodul mit
&man.kldunload.8; zu entladen und mit &man.kldload.8; erneut
einzubinden.</para>
</note>
</sect1>
<sect1 id="mac-troubleshoot">
<title>Fehler im MAC beheben</title>
<indexterm>
<primary>MAC Troubleshooting</primary>
</indexterm>
<para>Während der Entwicklung des Frameworks haben einige Nutzer auf
Probleme hingewiesen. Einige davon werden hier aufgeführt:</para>
<sect2>
<title>Die Option <option>multilabel</option> greift nicht auf der
<filename>/</filename>-Partition</title>
<para>Es scheint, dass etwa jedem fünfzigsten Nutzer dieses Problem
widerfährt. Und in der Tat - auch wir kennen es aus der
Entwicklung. Genauere Untersuchungen dieses <quote>Bugs</quote>
machten uns glauben, dass es sich entweder um einen Fehler in oder eine
fehlerhafte Interpretation der Dokumentation handelt. Warum auch immer
dieser Fehler auftritt - er kann mit folgender Prozedur behoben
werden:</para>
<procedure>
<step>
<para>Öffnen Sie die Datei <filename>/etc/fstab</filename> und
setzen Sie die Rootpartition auf <option>ro</option> wie
<quote>read-only</quote>.</para>
</step>
<step>
<para>Starten Sie in den Einzelnutzermodus.</para>
</step>
<step>
<para>Rufen Sie <command>tunefs</command> <option>-l enable</option>
für <filename>/</filename> auf.</para>
</step>
<step>
<para>Starten Sie in den Mehrbenutzermodus.</para>
</step>
<step>
<para>Führen Sie <command>mount</command>
<option>-urw</option> <filename>/</filename> aus und ändern
Sie anschließend in der Datei <filename>/etc/fstab</filename>
die Option <option>ro</option> zurück in <option>rw</option>.
Starten Sie das System noch einmal neu.</para>
</step>
<step>
<para>Achten Sie besonders auf die Ausgabe von
<command>mount</command> um sich zu versichern, dass die
<option>multilabel</option> korrekt für das root-Dateisystem
gesetzt wurde.</para>
</step>
</procedure>
</sect2>
<sect2>
<title>Mit der aktivierten MAC kann ich keinen X11 Server starten</title>
<para>Dies kann durch die Richtlinie <literal>partition</literal>
oder einer fehlerhaften Verwendung einer Richtlinie, die mit Labels
arbeitet, auftreten. Zum debuggen versuchen Sie folgendes:</para>
<procedure>
<step>
<para>Schauen Sie sich die Fehlermeldungen genau an. Wenn der Nutzer
einer <literal>insecure</literal> Klasse angehört, ist
wahrscheinlich die Richtlinie <literal>partition</literal> die
Ursache. Versuchen Sie, die Nutzerklasse auf
<literal>default</literal> zu stellen und danach die Datenbank mit
<command>cap_mkdb</command> zu erneuern. Wenn das Problem dadurch
nicht gelöst wird, gehen Sie weiter zu Schritt 2.</para>
</step>
<step>
<para>Gehen Sie die Label-Richtlinien Schritt für Schritt
nocheinmal durch. Achten Sie darauf, dass für den Nutzer, bei
dem das Problem auftritt, für X11 und das Verzeichnis
<filename class="directory">/dev</filename> alle Einstellungen
korrekt sind.</para>
</step>
<step>
<para>Falls all dies nicht helfen sollte, senden Sie die
Fehlermeldung und eine Beschreibung ihrer Arbeitsumgebung an die
(englisch-sprachige) TrustedBSD Diskussionsliste auf der <ulink
url="http://www.TrustedBSD.org">TrustedBSD</ulink> Webseite oder an
die &a.questions; Mailingliste.</para>
</step>
</procedure>
</sect2>
<sect2>
<title>Error: &man..secure.path.3; cannot stat
<filename>.login_conf</filename></title>
<para>Wenn ich versuche, von <username>root</username> zu einem anderen
Nutzer des Systems zu wechseln, erhalte ich die Fehlermeldung
<errorname>_secure_path: unable to state .login_conf</errorname>.
</para>
<para>Diese Meldung wird gewöhnlich ausgegeben, wenn der Nutzer ein
höhere Label-Einstellung hat als der, dessen Identität man
annehmen möchte. Ausführlich: Wenn ein Nutzer
<username>joe</username> als <option>biba/low</option> gelabelt wurde,
kann <username>root</username>, der <option>biba/high</option> als
Voreinstellung trägt, das Heimatverzeichnis von
<username>joe</username> nicht einsehen. Das passiert unabhänig
davon, ob <username>root</username> vorher mit <command>su</command>
die Identität von <username>joe</username> angenommen hat oder
nicht, da das Label sich nicht ändert. Hier haben wir also einen
Fall, in dem das Gewährleistungsmodell von Biba verhindert, das
der Superuser Objekte einer niedrigeren Integrität betrachten
kann.</para>
</sect2>
<sect2>
<title>Der Nutzer <username>root</username> ist kaputt!</title>
<para>Im normalen oder sogar im Einzelbenutzermodus wird
<username>root</username> nicht anerkannt. Das Kommando
<command>whoami</command> liefert 0 (null) und <command>su</command>
liefert <errorname>who are you?</errorname> zurück. Was geht da
vor?</para>
<para>Das kann passieren, wenn eine Label-Richtlinie ausgeschaltet wird -
entweder durch &man.sysctl.8; oder wenn das Richtlinienmodul entladen
wurde. Wenn eine Richtlinie deaktiviert oder auch nur
vorübergehen deaktiviert wird, muß die
Befähigungsdatenbank neu konfiguriert werden, d.h. die
<option>label</option> Option muß entfernt werden.
Überprüfen Sie, ob alle <option>label</option> Einträge
aus der Datei <filename>/etc/login.conf</filename> entfernt wurden und
bauen Sie die Datenbank mit <command>cap_mkdb</command> neu.</para>
<para>Dieser Fehler kann auch auftreten, wenn eine Richtlinie den Zugriff
auf die Datei <filename>master.passwd</filename> einschränkt.
Normalerweise passiert das nur, wenn ein Administrator ein Label an
diese Datei vergibt, das mit der allgemeingültigen Richtlinie, die
das System verwendet, in Konflikt steht. In solchen Fällen werden
die Nutzerinformationen vom System ausgelesen und jeder weitere Zugriff
wird blockiert, sobald das neue Label greift. Wenn man die Richtlinie
via &man.sysctl.8; ausschaltet, sollte es erstmal wieder gehen.</para>
</sect2>
</sect1>
</chapter>