GNU/Linux >> Tutoriels Linux >  >> Linux

Comment gérer les capacités des fichiers Linux

Traditionnellement, un processus Linux est soit privilégié (s'exécutant en tant que root), soit non privilégié. Les processus privilégiés ne sont pas soumis aux vérifications des autorisations du noyau et disposent donc de tous les pouvoirs sur un système. Une capacité est un privilège distinct et indépendant qui peut être utilisé par un processus pour contourner certains contrôles d'autorisation. Les fonctionnalités ont été introduites pour la première fois dans Linux 2.2, et plusieurs autres ont été ajoutées dans les versions ultérieures. Ils sont généralement définis sur des fichiers exécutables et sont automatiquement accordés au processus lorsqu'un fichier doté d'une capacité est exécuté. Les capacités divisent essentiellement le pouvoir de l'utilisateur racine en privilèges distincts, ce qui améliore la sécurité en limitant l'accès qu'un attaquant obtiendrait en exploitant ou en abusant d'un service.

Ce guide présentera certaines fonctionnalités couramment utilisées et montrera comment les afficher et les modifier.

Capacités communes

Le noyau Linux implémente une multitude de fonctionnalités. Certains d'entre eux sont :

  • CAP_SYS_ADMIN :permet un large éventail d'opérations. Cette fonctionnalité doit être évitée au profit de fonctionnalités plus spécifiques.
  • CAP_CHOWN :apportez des modifications à l'ID utilisateur et à l'ID de groupe des fichiers 
  • CAP_DAC_READ_SEARCH :contourne la lecture de fichiers et les vérifications de lecture/exécution de répertoires. Un programme avec cette capacité peut être utilisé pour lire n'importe quel fichier sur le système.
  • CAP_DAC_OVERRIDE :remplace le DAC (Contrôle d'accès discrétionnaire), c'est-à-dire contourne les contrôles d'autorisation de lecture/écriture/exécution. Cette capacité accorde à un exécutable la possibilité d'accéder à n'importe quel fichier du système de fichiers et de le modifier.
  • CAP_NET_BIND_SERVICE :permet la liaison aux numéros de port inférieurs à 1024.
  • CAP_KILL :contourne les contrôles d'autorisation pour l'envoi de signaux à des processus tels que SIGHUP et SIGKILL.
  • CAP_SYS_NICE :modifier la valeur de gentillesse et la priorité de planification des processus, entre autres.
  • CAP_SYS_RESOURCE :permet de remplacer diverses limites sur les ressources système, telles que les quotas de disque, les limites de temps CPU, etc.

La liste complète est disponible dans la page de manuel des capacités (7).

Les fichiers peuvent se voir attribuer des capacités dans 3 ensembles différents :autorisés, héritables et effectifs. Les threads ont 2 ensembles supplémentaires :ambiant et englobant. Chaque ensemble peut contenir zéro ou plusieurs capacités, à l'exception de l'ensemble effectif pour les fichiers, qui est en fait un seul bit. Ces ensembles définissent des comportements de noyau complexes qui sortent du cadre de ce guide. Lors de l'attribution de fonctionnalités aux fichiers, nous utiliserons les ensembles autorisés et effectifs dans la plupart des cas.

REMARQUE :SELinux peut interférer avec les fonctionnalités. Sur les systèmes avec SELinux en mode d'application, cela peut empêcher les processus de tirer parti de leurs capacités.

Outils requis

Deux packages différents existent pour la gestion des capacités :libcap et libcap-ng. Ce dernier est conçu pour être plus facile que le premier. Les deux sont couverts dans ce guide.

libcap fournit getcap et setcap pour afficher et définir les fonctionnalités des fichiers, tandis que libcap-ng consolide les deux fonctions dans un seul outil, filecap.

libcap

Installation

Sur Debian, Ubuntu et d'autres distributions basées sur Debian, les utilitaires libcap peuvent être installés avec :

apt update
apt install libcap2-bin

Pour installer sur CentOS, utilisez la commande suivante :

yum install libcap

Pour installer sur Fedora, utilisez la commande suivante :

dnf install libcap

Pour installer sur Arch, utilisez la commande suivante :

pacman -Sy libcap

Utilisation

getcap affiche simplement les capacités attribuées à un fichier, le cas échéant. Utilisez la syntaxe suivante :

getcap /path/to/binary

Par exemple :

Getcap peut également effectuer une recherche récursive avec l'indicateur -r. Par exemple :

REMARQUE :2>/dev/null est utilisé pour éviter d'encombrer la sortie avec des erreurs "Opération non prise en charge", qui se produisent lorsque getcap tente d'obtenir les fonctionnalités des fichiers dans /sys, /proc, etc. Ces systèmes de fichiers virtuels spéciaux ne prennent pas en charge capacités.

Pour définir les capacités du fichier avec setcap, utilisez la syntaxe suivante :

setcap CAP+set filename

Par exemple, pour ajouter CAP_CHOWN et CAP_DAC_OVERRIDE aux ensembles autorisés et effectifs, utilisez :

setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep file1

Pour supprimer des fonctionnalités d'un fichier, utilisez l'indicateur -r :

setcap -r filename

Voici quelques exemples supplémentaires :

libcap-ng

Installation

Pour installer sur Debian, Ubuntu et d'autres distributions basées sur Debian :

apt update
apt install libcap-ng-utils

Pour installer sur CentOS :

yum install libcap-ng-utils

Pour installer sur Fedora :

dnf install libcap-ng-utils

Pour installer sur Arch :

pacman -Sy libcap-ng

Utilisation

  • Le programme filecap fait référence aux capacités sans le préfixe "CAP_" (par exemple, NET_ADMIN au lieu de CAP_NET_ADMIN).
  • filecap ne fonctionne pas avec des chemins relatifs, il attend le chemin complet lors du passage de fichiers ou de répertoires en tant qu'arguments.
  • filecap ne vous permet pas de spécifier des ensembles de capacités, il utilise toujours permis et efficace lors de la définition des capacités.

Pour afficher les fonctionnalités attribuées à un fichier :

filecap /full/path/to/file

Pour rechercher un répertoire de manière récursive, utilisez :

filecap /full/path/to/dir

Pour rechercher tout le système de fichiers avec filecap, utilisez l'une des commandes suivantes :

filecap /
filecap -a

Voici quelques exemples d'utilisation de filecap pour examiner des fichiers et des répertoires :

Pour définir une fonctionnalité sur un fichier, utilisez la syntaxe :

filecap /full/path/to/file cap_name

Par exemple :

filecap /usr/bin/tac dac_override

Pour supprimer des fonctionnalités, utilisez cette syntaxe :

filecap /full/path/to/file none

Voici quelques exemples de définition et de suppression de fonctionnalités à l'aide de filecap :

Conclusion

Les capacités sont une fonctionnalité puissante du noyau avec de nombreuses applications de sécurité. Ils doivent être remplacés par les privilèges complets et le SUID racine dans la mesure du possible.


Linux
  1. Comment gérer le mot de passe du compte sous Linux

  2. Comment trouver un fichier sous Linux

  3. Comment créer un swap sous Linux

  4. Comment renommer un fichier sous Linux ?

  5. Comment monter un fichier iso sous Linux

Comment renommer un ou plusieurs fichiers sous Linux

Comment gérer le système de fichiers Linux sur le serveur Ubuntu

Comment créer un lien symbolique vers un fichier sous Linux

Comment chiffrer un fichier sous Linux

Comment désactiver Swap sous Linux

Comment utiliser gzip sous Linux ?