Kapitel 3. Erstellen von Novell AppArmor-Profilen

Inhaltsverzeichnis

3.1. Profilkomponenten und Syntax
3.2. Erstellen und Verwalten von Novell AppArmor-Profilen
3.3. Erstellen von Novell AppArmor-Profilen in der YaST-GUI
3.4. Erstellen von Novell AppArmor-Profilen mit der Befehlszeilenschnittstelle
3.5. Zwei Methoden der Profilerstellung
3.6. Pfadnamen und Platzhalter
3.7. Modi für Dateizugriffsberechtigungen

Dieses Kapitel erläutert, wie Novell® AppArmor-Profile erstellt und verwaltet werden. Die Erstellung von Novell AppArmor-Profilen kann beginnen, sobald die Programme für die Profilerstellung ausgewählt sind. Hilfe dazu erhalten Sie unter Kapitel 2, Auswählen zu immunisierender Programme (↑ Novell AppArmor 2.0-Administrationshandbuch ).

3.1. Profilkomponenten und Syntax

Dieser Abschnitt beschreibt die Syntax oder den Aufbau von Novell AppArmor-Profilen. Unter Abschnitt 3.1.1, „Zerlegen eines Novell AppArmor-Profils in seine Teile“ (↑ Novell AppArmor 2.0-Administrationshandbuch ) wird ein Beispiel für diese Syntax angegeben.

3.1.1. Zerlegen eines Novell AppArmor-Profils in seine Teile

Novell AppArmor-Profilkomponenten werden Novell AppArmor-Regeln genannt. Derzeit gibt es zwei Haupttypen von Novell AppArmor-Regeln: Pfadeinträge und Funktionseinträge. Pfadeinträge geben an, worauf der Prozess im Dateisystem zugreifen kann. Funktionseinträge bieten eine präzisere Kontrolle darüber, welche Aktionen ein eingeschränkter Prozess durch andere Systemaufrufe, die Berechtigungen erfordern, ausführen darf. Inbegriffen sind eine Art Metaregel oder Direktiven, die Pfad- und Funktionseinträge von anderen Dateien abrufen.

Am einfachsten lässt sich anhand eines Beispiels erklären, woraus ein Profil besteht und wie ein Profil erstellt wird. Betrachten Sie das folgende Profil für das Programm /sbin/klogd:

# profile to confine klogd1
/sbin/klogd 2
{3
#include <abstractions/base>4
  capability sys_admin,5
  /boot/* r6,
  /proc/kmsg r,
  /sbin/klogd r,
  /var/run/klogd.pid lw,
}
1

Ein Kommentar, der das Programm angibt, das durch dieses Profil eingeschränkt wird. Kommentaren wird immer das #-Zeichen vorangestellt.

2

Der absolute Pfad zu dem Programm, das eingeschränkt ist.

3

Die geschweiften Klammern {} dienen als Behälter für Include-Anweisungen von anderen Profilen sowie für Pfad- und Funktionseinträge.

4

Diese Direktive ruft Komponenten von Novell AppArmor-Profilen ab, um Profile zu vereinfachen.

5

Funktionseintragsanweisungen aktivieren jede der 29 Funktionen im POSIX.1e-Entwurf.

6

Ein Pfadeintrag, der angibt, auf welche Bereiche des Dateisystems das Programm zugreifen kann. Der erste Pfad eines Pfadeintrags gibt den absoluten Pfad einer Datei an (einschließlich der Verwendung von Platzhaltern in regulären Ausdrücken) und der zweite Teil die zulässigen Zugriffsmodi (r für Lesen, w für Schreiben und x für Ausführen). Ein beliebiger Abstand (Leerzeichen oder Tabulatoren) kann Pfadnamen vorangehen oder den Pfadnamen von den Zu­griffsmodi trennen. Ein Abstand zwischen dem Zugriffsmodus und dem nachgestellten Komma ist optional.

Wenn ein Profil für ein Programm erstellt wird, kann das Programm nur auf die Dateien, Modi und POSIX-Funktionen zugreifen, die im Profil festgelegt sind. Diese Beschränkungen gelten zusätzlich zu den nativen Linux-Zugriffskontrollen.

Beispiel: .  Um die Funktion CAP_CHOWN zu erhalten, muss das Programm auf CAP_CHOWN unter konventionellen Linux-Zugriffskontrollen zugreifen können (typischerweise ein root-eigener Prozess sein) und gleichzeitig die Funktion chown in seinem Profil haben. Ebenso muss das Programm für das Schreiben in die Datei /foo/bar die korrekte Benutzer-ID und Modusbits in den Datei-Attributen eingestellt haben (siehe die Manualpages chmod und chown) sowie /foo/bar w in seinem Profil haben.

Versuche, die Novell AppArmor-Regeln zu verletzen, werden im Syslog aufgezeichnet. In vielen Fällen verhindern Novell AppArmor-Regeln einen erfolgreichen Angriff, da erforderliche Dateien nicht verfügbar sind und Novell AppArmor-Ein­schränkungen in allen Fällen den Schaden begrenzen, den der Angreifer an dem von Novell AppArmor zugelassenen Satz an Dateien anrichten kann.

3.1.2. #include

#include-Anweisungen sind Direktiven, die Komponenten von anderen Novell AppArmor-Profilen abrufen, um Profile zu vereinfachen. Include-Dateien rufen Zu­griffsberechtigungen für Programme ab. Durch Verwenden einer include-Anweisung können Sie dem Programm Zugriff auf Verzeichnispfade oder Dateien geben, die auch von anderen Programmen benötigt werden. Mithilfe von include-Anweisungen lässt sich die Größe eines Profils verringern.

Standardmäßig wird die /etc/apparmor.d/ von der #include-Anweisung am Anfang des Pfadnamens hinzugefügt, da davon ausgegangen wird, dass sich die include-Datei an dieser Stelle befindet. Im Unterschied zu anderen Profilanweisungen (aber ähnlich wie C-Programme) enden #include-Zeilen nicht auf ein Komma.

Zur Unterstützung bei der Profilerstellung für Ihre Anwendung bietet Novell AppArmor zwei #include-Klassen: Abstraktionen und Programmfragmente.

3.1.2.1. Abstraktionen

Abstraktionen sind #include-Dateien, die nach gemeinsamen Anwendungsaufgaben gruppiert werden. Diese Aufgaben umfassen Zugriff auf Authentifizierungsmechanismen, auf Namensdienstroutinen, gängige Grafikanforderungen und Systemkonten. Dateien, die in diesen Abstraktionen aufgelistet sind, sind spezifisch für die angegebene Aufgabe. Programme, die eine dieser Dateien benötigen, brauchen gewöhnlich einige der anderen Dateien, die in der Abstraktionsdatei aufgelistet sind (abhängig von der lokalen Konfiguration sowie den spezifischen Anforderungen des Programms). Abstraktionen befinden sich in /etc/apparmor.d/abstractions/.

3.1.2.2. Programmfragmente

Programmfragmente sind Zugriffskontrollen für bestimmte Programme, die ein Systemadministrator auf der Basis einer lokalen Standortrichtlinie steuern sollte. Jedes Fragment wird von einem einzelnen Programm benutzt. Fragmente dienen der einfacheren lokalen Modifizierung und Aktualisierung der Novell AppArmor-Richtlinien. Administratoren können die Richtlinien in diesen Dateien gemäß ihren Anforderungen modifizieren und die Programmprofile unverändert belassen. Dadurch vereinfacht sich das Zusammenführen von Novell AppArmor-Richtlinienaktualisierungen mit den geltenden Richtlinien an jedem Standort.

Die Zugriffsbeschränkungen in den Programmfragmenten sind typischerweise sehr großzügig und sollen Ihren Benutzern auf möglichst unaufdringliche Weise Zugriff auf ihre Dateien ermöglichen und gleichzeitig den Schutz der Systemressourcen gestatten. Eine Ausnahme zu dieser Regel stellt die postfix*-Serie von Programmfragmenten dar. Diese Profile werden als Hilfe dafür benutzt, den Speicherort der postfix-Binär­dateien zu abstrahieren. Wahrscheinlich möchten Sie die Berechtigungen in der postfix*-Serie nicht reduzieren. Programmfragmente befinden sich in /etc/apparmor.d/program-chunks/.

3.1.3. Funktionseinträge (POSIX.1e)

Funktionsanweisungen bestehen einfach aus dem Wort „capability“, gefolgt vom Namen der POSIX.1e-Funktion, wie auf der Manualpage capabilities(7) definiert.