Chapitre 3. Ouverture des profils Novell AppArmor

Table des matières

3.1. Composants et syntaxe des profils
3.2. Création et gestion de profils Novell AppArmor
3.3. Création de profils Novell AppArmor avec l'interface graphique de YaST
3.4. Création de profils Novell AppArmor en utilisant l'interface de ligne de commande
3.5. Deux méthodes de réalisation de profils
3.6. Noms de chemin et syntaxe générique
3.7. Modes d'autorisation d'accès aux fichiers

Ce chapitre explique comment créer et gérer des profils Novell® AppArmor. Vous êtes prêt à créer des profils Novell AppArmor après avoir sélectionné les programmes à profiler. Pour obtenir de l'aide sur ce sujet, reportez-vous au Chapitre 2, Sélection de programmes à immuniser (↑Guide d'administration de Novell AppArmor 2.0).


3.1. Composants et syntaxe des profils

Cette section décrit en détail la syntaxe ou la constitution des profils Novell AppArmor. Un exemple illustrant cette syntaxe est présenté à la Section 3.1.1, « Décomposition d'un profil Novell AppArmor en ses composants » (↑Guide d'administration de Novell AppArmor 2.0).

3.1.1. Décomposition d'un profil Novell AppArmor en ses composants

Les composants des profils Novell AppArmor sont appelés règles Novell AppArmor. Il existe actuellement deux types principaux de règles Novell AppArmor : les entrées de chemin et les entrées de fonction. Les entrées de chemin spécifient ce à quoi le processus peut accéder dans le système de fichiers. Les entrées de fonction fournissent un contrôle plus fin sur ce qu'un processus confiné est autorisé à faire par l'intermédiaire d'autres appels du système qui nécessitent des privilèges. Les fichiers Include sont des types de méta règle ou de directives. Ils récupèrent des entrées de chemin et de fonction d'autres fichiers.

La manière la plus simple d'expliquer ce en quoi consiste un profil et comment en créer un est d'en montrer un exemple détaillé. Considérons, par exemple, le profil suivant pour le programme /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

Un commentaire pour nommer le programme confiné par ce profil. Faites toujours précéder ce type de commentaire par le signe #.

2

Le chemin absolu du programme confiné.

3

Les accolades {} servent de conteneur pour inclure des instructions d'autres profils ainsi que pour les entrées de chemin et de fonction.

4

Cette directive récupère des composants de profils Novell AppArmor pour simplifier les profils.

5

Les instructions d'entrée de fonction activent chacune des 29 fonctions de projet POSIX.1e.

6

Une entrée de chemin spécifiant les zones du système de fichiers auxquelles le programme peut accéder. La première partie d'une entrée de chemin spécifie le chemin absolu d'un fichier (avec l'expression régulière générique). La seconde partie indique les modes d'accès autorisés (r pour lecture, w pour écriture et x pour exécution). Un espace blanc quel qu'il soit (espaces ou tabulations) peut précéder les noms de chemins ou séparer le nom du chemin des modes d'accès. Un espace blanc entre le mode d'accès et la virgule finale est facultatif.

Lorsqu'un profil est créé pour un programme, ce dernier ne peut accéder qu'aux fichiers, aux modes et aux fonctions POSIX spécifiées dans le profil. Ces restrictions s'ajoutent aux contrôles d'accès natifs de Linux.

Exemple : .  pour récupérer la fonction CAP_CHOWN, le programme doit avoir accès à CAP_CHOWN sous les contrôles d'accès Linux conventionnels (généralement, en tant que processus détenu par root) et avoir la fonction chown dans son profil. De même, pour pouvoir écrire dans le fichier /foo/bar, le programme doit avoir l'ID utilisateur correct et les bits de mode définis dans les attributs de fichiers (reportez-vous aux pages de manuel chmod et chown) et posséder /foo/bar w dans son profil.

Les tentatives de violation des règles Novell AppArmor sont enregistrées dans le journal du système. Dans de nombreux cas, les règles Novell AppArmor empêchent une attaque de fonctionner car les fichiers nécessaires ne sont pas accessibles et, dans tous les cas, le confinement de Novell AppArmor limite les dommages que peut engendrer l'attaquant envers l'ensemble de fichiers autorisé par Novell AppArmor.

3.1.2. #include

Les instructions #include sont des directives qui récupèrent des composants d'autres profils Novell AppArmor pour simplifier les profils. Les fichiers include récupèrent les droits d'accès des programmes. Grâce à l'utilisation d'include, vous pouvez donner l'accès du programme à des chemins de répertoire ou à des fichiers qui sont également requis par d'autres programmes. Include peut également réduire la taille d'un profil.

Par défaut, l'instruction #include ajoute /etc/apparmor.d/, qui indique là où doit se trouver le fichier include, au début du nom du chemin. Contrairement à d'autres instructions de profil (mais de même que les programmes C), les lignes #include ne se terminent pas par une virgule.

Pour vous aider à profiler vos applications, Novell AppArmor fournit deux classes de commandes #include : les abstractions et les blocs de programme.

3.1.2.1. Abstractions

Les abstractions sont des #include groupés par tâches d'application courantes. Ces tâches incluent l'accès à des mécanismes d'authentification, l'accès aux routines de service de nom, la configuration graphique courante et la comptabilité du système. Les fichiers de ces abstractions sont spécifiques à la tâche désignée. Les programmes qui nécessitent l'un de ces fichiers requièrent généralement d'autres fichiers du fichier d'abstraction (en fonction de la configuration locale et des exigences spécifiques du programme). Les abstractions se trouvent dans /etc/apparmor.d/abstractions/.

3.1.2.2. Blocs de programme

Les blocs de programme sont des contrôles d'accès pour des programmes spécifiques qu'un administrateur système peut souhaiter contrôler en fonction de la stratégie d'un site local. Chaque bloc est utilisé par un programme unique. Ils facilitent les modifications du site local et les mises à jour des stratégies fournies par Novell AppArmor. Les administrateurs peuvent modifier la stratégie de ces fichiers en fonction de leurs besoins sans pour autant modifier les profils de programme. La tâche de fusion des mises à jour de stratégie de Novell AppArmor est ainsi simplifiée dans la stratégie imposée sur chaque site.

Les restrictions d'accès des blocs de programme sont généralement très peu contraignantes. Elles sont conçues pour permettre à vos utilisateurs d'accéder à leurs fichiers de la façon la moins intrusive possible tout en assurant la protection des ressources du système. La série de blocs de programme postfix* constitue une exception à cette règle. Ces profils permettent d'abstraire l'emplacement des binaires postfix. Il est probable que vous ne souhaiterez pas réduire les autorisations dans la série postfix*. Les blocs de programme se trouvent dans /etc/apparmor.d/program-chunks/.

3.1.3. Entrées de fonction (POSIX.1e)

Les instructions de fonctions sont simplement le mot « capability » suivi du nom de la fonction POSIX.1e défini dans la page de manuel capabilities(7).