Docker semble prendre en charge à la fois apparmor et seccomp. Docker permet également de supprimer des capacités lors de l'exécution d'un conteneur.
Cependant, je n'ai trouvé aucune documentation ni aucune directive sur le moment d'utiliser l'approche.
Il semble y avoir un chevauchement important dans leur utilisation, je n'ai pas pu trouver de ligne directrice générale sur le moment d'utiliser laquelle de ces options.
Quelqu'un peut-il fournir des directives?
Dans mon cas, je dois exécuter beaucoup de code d'étudiants sur le serveur. Je veux leur permettre d'exécuter Java et les programmes c ++. Autoriser l'accès en écriture à un répertoire (volume de données). Ils n'ont pas besoin d'un accès réseau, ou quoi que ce soit de compliqué.
Veuillez fournir des directives sur la façon de sécuriser.
Vous pouvez tous les utiliser.
Chacune de ces fonctionnalités de sécurité a des objectifs différents et il y a en fait peu de chevauchement. Ils fonctionnent tous pour réduire les dommages qu'un processus peut causer une fois qu'il a été compromis. Ils sont tous très peu coûteux et peuvent être utilisés pour améliorer considérablement la sécurité des logiciels.
Seccomp est une fonctionnalité Linux qui permet à un programme de l'espace utilisateur de configurer des filtres d'appel système. Ces filtres spécifient quels appels système sont autorisés et quels arguments ils peuvent avoir. Il s'agit d'un filtre de très bas niveau qui réduit la surface d'attaque du noyau. Par exemple, un bogue dans keyctl()
qui permet à de simples appels à ce syscall d'élever des privilèges ne serait pas nécessairement utilisable pour privesc dans un programme qui a restreint l'accès à cet appel.
AppArmor est un framework de contrôle d'accès obligatoire qui fonctionne comme un LSM (Linux Security Module). Il est utilisé pour mettre en liste blanche ou mettre sur liste noire l'accès d'un sujet (programme) à un objet (fichier, chemin, etc.). AppArmor peut être utilisé pour permettre à un programme d'avoir un accès en lecture à /etc/passwd
, mais non /etc/shadow
. Les stratégies peuvent également être utilisées pour restreindre les capacités, voire limiter l'accès au réseau.
Capacités et la suppression de capacité est une technique générale par laquelle un processus privilégié révoque un sous-ensemble des privilèges dont il est doté. Un processus racine peut supprimer, par exemple, les capacités requises pour créer des connexions brutes au réseau, ou les capacités requises pour contourner les autorisations de fichier UNIX standard (DAC), même s'il reste racine. Cette technique n'est pas très fine car il n'y a qu'un nombre limité de capacités qui peuvent être abandonnées, mais elle réduit les dommages qu'un programme peut faire s'il est néanmoins compromis.
En général, vous devez savoir que:
Seccomp réduit les chances qu'une vulnérabilité du noyau soit exploitée avec succès.
AppArmor empêche une application d'accéder aux fichiers auxquels elle ne devrait pas accéder.
La suppression des capacités réduit les dommages qu'un processus privilégié compromis peut faire.
Voir aussi Comment le Sandboxing est-il implémenté?
Bien répondu par @ forest , mais j'aimerais ajouter quelques suggestions qui reflètent mon point de vue sur les cadres de sécurité et la conception de la sécurité en général. L'application de la sécurité va de pair avec la connaissance de ce contre quoi vous vous protégez, ou du moins de ce que vous protégez. Mais tout cela doit commencer par une politique de sécurité. Une fois la politique formulée, le choix est plus facile à faire. Examinons quelques cas, qui peuvent ou non refléter vos cas d'utilisation. Mais avant de les considérer, il peut être utile de restreindre les options disponibles aux éléments suivants:
Et maintenant, les cas: