3. Les aptitudes du système GNU/Linux

Au niveau du système Unix, les propriétés d'un utilisateur particulier sont représentées sous forme de fichiers marqués par un identifiant numérique de propriété appelé UID. Un système Linux gère de la même façon les accès au matériel via un niveau d'abstraction. Il offre ainsi un environnement dans lequel les programmes s'exécutent. Une partie du niveau d'abstraction fait respecter les droits de propriété des données. Pour respecter les droits des propriétaires des données en question, Linux se conforme à des règles spécifiques qui limitent les manipulations faites par les programmes sur les données. Les appels système (system-calls) effectués par les programmes utilisent des attributs tels que l'identifiant du propriétaire (UID).

Pour débuter l'exécution de programmes, un utilisateur passe par une authentification (login, ssh, etc.). À la suite de cette authentification, l'utilisateur dispose d'un contexte de travail pour appeler d'autres programmes et manipuler ses données. Les fonctions apportées par les Linux Capabilities ont justement pour but de modifier ce contexte de travail qui était jusque là figé après l'authentification.

Sans fonction offrant la capacité à modifier le contexte de travail d'un utilisateur, le seul recours possible est l'exécution en mode privilégié (avec l'UID 0) qui passe outre tous les contrôles de permissions du noyau. C'est la façon dont sont exécutés les programmes à l'aide de l'outil sudo.

Plus d'une trentaine d'aptitudes ont été ajoutées au noyau Linux. Ces fonctions interviennent sur presque tous les aspects du contexte de travail de l'utilisateur. Pour la capture de trafic réseau, seules deux fonctions nous intéressent.

CAP_NET_ADMIN

Effectuer différentes opérations réseau comme : obtenir des options privilégiées sur les sockets, activer le multicast, configurer les interfaces, modifier les tables de routage, etc.

Avec Wireshark, on doit modifier l'état de l'interface de capture et la placer en mode promiscuous de façon à traiter toutes les trames vues par cette interface.

CAP_NET_RAW

Utiliser des sockets RAW et PACKET.

Avec Wireshark, on doit capturer le trafic au plus près de l'interface.

Le document Linux Capabilities: making them work donne des informations beaucoup plus détaillées sur les aptitudes du noyau Linux.

Comme tous les outils de ce genre sur les systèmes GNU/Linux, les fonctions sont réparties entre l'espace noyau (kernelspace) et l'espace utilisateur (userspace). On suppose que les Linux Capabilities sont disponibles au niveau du noyau. C'est vrai pour toutes les distributions contemporaines. Pour ce qui est des outils utilisateurs, on doit contrôler leur installation. Ici, il s'agit du paquet libcap2-bin.

$ aptitude search ~ilibcap2-bin
i   libcap2-bin   - basic utility programs for using capabilities