présuppose que vous avez couru avec des privilèges root / administrateur. Quels appels r considèrent-vous nuisibles, à part des Ceci est une question spécifique à la plate-forme, je cours Linux, donc je suis intéressé par des fuites de sécurité spécifiques à Linux. Je comprendrai si vous bloquez des discussions sur R, car ce message peut facilement émerger dans «Comment dégager le système avec R?» P> système () code> et
fichier. * () Code>? P>
8 Réponses :
Tout ce qui appelle un code externe pourrait également effectuer des modifications du système, vous devez donc bloquer certains packages et éléments tels que Il suffit de dire que cela finira par être une tâche pratiquement impossible, et vous feriez mieux de l'exécuter dans un environnement virtualisé, etc. Si vous avez besoin d'un accès racine. P> .call () code>,
.c () code>,
.jcall () code>, etc. p>
vous ne pouvez pas. Vous devriez simplement modifier la question suivante: "Comment exécuter le code R fourni par l'utilisateur afin de ne pas nuire à l'utilisateur ou à d'autres utilisateurs du système?" C'est en fait une question très intéressante et une question qui peut être résolue avec un peu de cloud computing, APPARMOR, CHROOT MAGIC, etc. P>
Vous avez absolument raison - je ne peux pas. J'aurais dû demander "des appels r peuvent être potentiellement nocifs?" Quoi qu'il en soit, merci pour des suggestions ...
Ne pas exécuter R avec Root Prishs. Il n'y a pas de moyen efficace de sécuriser R de cette manière, car la langue comprend l'évaluation et la réflexion, ce qui signifie que je peux construire des invocations au système même si vous ne voulez pas que jeôles. P>
Bien mieux consiste à exécuter R d'une manière qui ne peut pas affecter les données système ou utilisateur, peu importe ce qu'elle essaie de faire. P>
Excellent point sur eval code>, et vous pouvez obfusquer le contenu autant que vous le souhaitez.
eval (parse (texte = pâte (REV (c (")" "," Peu importe "," ("," M "," E "," T "," S "," S " )), sep = "", collapse = ""))) code>
Vous pouvez bloquer eval code> dans ce cas, mais bien sûr, nous arrivons au point que de nombreuses fonctions de base r cesseront de fonctionner correctement.
@Shane Comment pouvez-vous bloquer EVAL? base :: eval est immuable.
@MBQ: Vous pouvez déposer le package code> code>, créer votre propre version, écraser-la avec une autre fonction plus haut dans le chemin de recherche eval <- fonction () Imprimer ("Bonjour") Code >, etc. Il y a beaucoup d'options (dont aucune n'est bonne ...).
@Shane: Toute personne ayant accès racine sera en mesure de changer tout cela, de sorte que ce serait inutile, n'est-ce pas?
@nico c'est tout théorique. Vous devriez créer votre propre version des bibliothèques R. Mais alors une personne avec accès root pourrait simplement sauter sur r-project.org et revenir à la version d'origine, vous devez donc bloquer l'utilisateur racine de l'installation de packages R (chemins de blocage des miroirs Cran).
@Shane: Eh bien, c'était le point de mon commentaire à la question ... Pourquoi laisseriez-vous quelqu'un que vous n'avez pas confiance en exécution r (ou aucun autre logiciel) en tant que root?
@nico je suis d'accord à 100%. Mais c'est une question théorique (j'espère).
Il y a des tonnes de commandes que vous pouvez utiliser pour nuire au système. Une poignée d'exemples: Et si vous avez bloqué les utilisateurs de ces commandes, rien ne les empêche de mettre en œuvre quelque chose dans un paquet que vous ne sauriez pas à bloquer. p> sys.chmod code>,
sys.umask code>,
inlink code>, toute commande em> qui vous permet de lire / écrire à une connexion (il y en a beaucoup),
.Internal code>,
.external code>, etc. p>
Adapter un cliché des droits des armes à feu, "Système () n'est pas nocif - les personnes qui appellent le système () sont nuisibles". P>
aucun appel de fonction n'est intrinsèquement nuisible, mais si vous autorisez les gens à les utiliser librement, ces personnes peuvent causer des dommages. P>
En outre, la définition de préjudice dépendra de ce que vous considérez préjudiciable. p>
Comme indiqué par n'importe quelle réponse à ce fil, supprimer les appels "potentiellement nocifs" dans le langage r serait: p>
Une solution plus sûre qui ne nécessite pas de modification / de réécriture de grandes parties du langage R aurait pour exécuter R à l'intérieur d'une prison en utilisant quelque chose comme Beaucoup de ces solutions permettent au processus emprisonné d'exercer des privilèges ressemblant à des racines, mais restreignez les zones de l'ordinateur que le processus peut fonctionner. P>
Une machine virtuelle jetable est une autre option. Si un utilisateur privilégié se débrouille dans l'environnement virtuel, supprimez-le et démarrez une autre copie. P>
En général, R est si complexe que vous pouvez supposer qu'il existe un moyen de le tromper dans l'exécution de données avec des fonctions apparemment inoffensives, par exemple par le débordement de la mémoire tampon. p>
Un de mes favoris de tous les temps. Vous n'avez même pas besoin d'être R00T.
library(multicore); forkbomb <- function(){ repeat{ parallel(forkbomb()); } } forkbomb();
Quelle est la raison pour courir r comme root? Peut-être que la solution se trouve là-bas, c'est-à-dire que vous devriez vous poser la question suivante: «Comment puis-je permettre à l'utilisateur de faire XYZ sans B> lui donner des privilèges root?". Bien entendu, l'autre point est que quiconque peut exécuter des logiciels avec des privilèges root doit être suffisamment confiant pour ne pas s'inquiéter de lui / elle gâchant le système, sinon il / elle ne doit pas avoir de privilèges root.
Cela a été posé il y a quelques années sur les listes R-Aide ou R-Devel. Je ne me souviens pas des détails, mais ce que vous demandez était effectivement impossible; Une fois que vous avez éteint toutes les possibilités possibles de faire quelque chose en dehors de R, vous avez rendu inutile. Ne courez pas en tant que root.
A (peut-être aussi) une large liste de fonctions potentiellement nocives peut être trouvée dans mon petit paquet: Github.com/daroczig/sandboxr . Ce forfait interdirait beaucoup d'appels R et permettrait uniquement de charger des paquets «whitelisted», afin de ne pas être suffisamment permissive, mais interdit à vos utilisateurs de compromettre tout fichier et vos ressources sur votre système. Bien sûr, cet environnement de sandboxed doit être utilisé dans une application qui gère E.G. Écrit sur le disque - en dehors du code R des utilisateurs.