J'ai utilisé Systrace pour mettre en bac à sable les programmes non fiables, à la fois de manière interactive et en mode automatique. Il dispose d'un ptrace()
-based backend qui permet son utilisation sur un système Linux sans privilèges spéciaux, ainsi qu'un backend beaucoup plus rapide et puissant qui nécessite Parcheando le noyau.
Il est également possible de créer une sandbox sur les systèmes Unix-like en utilisant chroot(1)
bien que cela ne soit pas aussi facile ou sûr. Conteneurs Linux y Les prisons FreeBSD sont une meilleure alternative à chroot. Une autre alternative sous Linux est d'utiliser un framework de sécurité comme SELinux o AppArmor C'est ce que je propose pour les systèmes de production.
Nous pourrions vous aider davantage si vous nous disiez exactement ce que vous voulez faire.
EDITAR:
Systrace fonctionnerait pour votre cas, mais je pense que quelque chose basé sur la Modèle de sécurité Linux comme AppArmor ou SELinux est une alternative plus standard, et donc préférée, en fonction de votre distribution.
EDIT 2 :
Alors que chroot(1)
est disponible sur la plupart (tous ?) des systèmes de type Unix, il présente quelques problèmes :
-
On peut s'en défaire. Si vous compilez ou exécutez des programmes C non fiables sur votre système, vous êtes particulièrement vulnérable à ce problème. Et si vos étudiants sont comme les miens, quelqu'un va essayer de s'échapper de la prison.
-
Vous devez créer une hiérarchie complète de systèmes de fichiers indépendants avec tout ce qui est nécessaire à votre tâche. Il n'est pas nécessaire d'avoir un compilateur dans le chroot, mais tout ce qui est nécessaire pour exécuter les programmes compilés doit être inclus. Bien qu'il y ait des utilitaires qui aident à cela, ce n'est toujours pas trivial.
-
Vous devez maintenir le chroot. Comme il est indépendant, les fichiers du chroot ne seront pas mis à jour en même temps que votre distribution. Vous devrez soit recréer le chroot régulièrement, soit y inclure les outils de mise à jour nécessaires, ce qui exigerait essentiellement qu'il s'agisse d'une distribution Linux à part entière. Vous devrez également maintenir les données système et utilisateur (mots de passe, fichiers d'entrée, etc.) synchronisées avec le système hôte.
-
chroot()
ne protège que le système de fichiers. Il n'empêche pas un programme malveillant d'ouvrir des sockets réseau ou un programme mal écrit d'absorber toutes les ressources disponibles.
Le problème de l'utilisation des ressources est commun à toutes les alternatives. Quotas de systèmes de fichiers empêchera les programmes de remplir le disque. Correctement ulimit
( setrlimit()
en C) peuvent protéger contre la surutilisation de la mémoire et les bombes à bifurcation, ainsi que mettre un terme aux monopolisations du processeur. nice(1)
peut diminuer la priorité de ces programmes afin que l'ordinateur puisse être utilisé sans problème pour toute tâche jugée plus importante.
0 votes
S'agit-il d'un programme C unique que vous devez exécuter une fois pendant 5 minutes, ou de quelque chose que vous devez exécuter constamment ?
0 votes
Il s'agirait d'un petit programme qui serait téléchargé et sur lequel des tests unitaires seraient exécutés. Le programme serait donc de courte durée.
0 votes
Quelle distribution le système utilise-t-il ? Certaines distributions ont des outils prêts à l'emploi pour le sandboxing. Votre système est-il doté d'un modèle de sécurité tel que SELinux ou AppArmor ?
0 votes
J'utilise Fedora 13 et j'étudie la politique SELinux Sandbox. Je me demande quelles autres options existent.
0 votes
Si un modèle de sécurité est déjà activé sur votre système (puisqu'il s'agit de Fedora, il s'agit probablement de SELinux), il est recommandé d'utiliser ce modèle. Je n'ai pas essayé la politique de Fedora Sandbox, mais j'ai l'impression qu'elle est plutôt bien faite.
6 votes
Questions similaires sur les processus de sandboxing/jailing dans Linux ou Unix : * unix.stackexchange.com/q/6433/4319 * stackoverflow.com/q/3859710/94687 * stackoverflow.com/q/4410447/94687 * stackoverflow.com/q/1019707/94687