Nehmen wir an, dass R mit root / admin-Rechten ausgeführt wird. Was für R-Aufrufe halten Sie für schädlich, abgesehen von system()
und file.*()
?
Das ist eine plattformspezifische Frage, ich betreibe Linux, deshalb bin ich an Linux-spezifischen Sicherheitslecks interessiert. Ich werde verstehen, wenn Sie Diskussionen über R blockieren, da dieser Beitrag leicht in "Wie vermasselt man das System mit R?" Erscheinen kann.
Führe R nicht mit Root-Rechten aus. Es gibt keinen effektiven Weg, R auf diese Weise zu sichern, da die Sprache eval und reflection beinhaltet, was bedeutet, dass ich Aufrufe an das System konstruieren kann, selbst wenn Sie das nicht wollen.
Es ist viel besser, R auf eine Weise auszuführen, die die System- oder Benutzerdaten nicht beeinflussen kann, egal was es versucht.
Alles, was externen Code aufruft, könnte auch Systemänderungen vornehmen, also müssten Sie bestimmte Pakete und Dinge wie .Call()
, .C()
, .jcall()
usw. sperren.
Es genügt zu sagen, dass es am Ende eine praktisch unmögliche Aufgabe ist, und Sie sollten es besser in einer virtualisierten Umgebung ausführen, wenn Sie Root-Zugriff benötigen.
Sie können nicht. Sie sollten nur die Frage ändern: "Wie führe ich vom Benutzer bereitgestellten R-Code, um den Benutzer oder andere Benutzer des Systems nicht zu schaden?" Das ist eigentlich eine sehr interessante Frage und eine, die mit ein wenig Cloud Computing, Apparmor, Chroot Magic etc gelöst werden kann.
Es gibt Unmengen von Befehlen, die Sie verwenden könnten, um das System zu beschädigen. Eine Handvoll Beispiele: Sys.chmod
, Sys.umask
, unlink
, jeder -Befehl, mit dem Sie eine Verbindung lesen / schreiben können (es gibt viele), .Internal
, .External
, usw.
Und wenn Sie Benutzer an diesen Befehlen gehindert haben, hindert sie nichts daran, etwas in einem Paket zu implementieren, das Sie nicht blockieren könnten.
Wie bei fast jeder Antwort auf diesen Thread bemerkt, würde das Entfernen der "potentiell schädlichen" Aufrufe in der Sprache R:
Eine sicherere Lösung, die das Ändern / Umschreiben großer Teile der R-Sprache nicht erfordert, wäre R in einem Gefängnis zu laufen, indem man etwas wie BSD Jails , Jailkit oder Solaris Zones .
Viele dieser Lösungen ermöglichen es dem inhaftierten Prozess, Root-ähnliche Rechte auszuüben, aber die Bereiche des Computers einzuschränken, auf denen der Prozess ausgeführt werden kann.
Eine virtuelle Wegwerfmaschine ist eine weitere Option. Wenn ein privilegierter Benutzer die virtuelle Umgebung plattmacht, löschen Sie sie einfach und starten Sie eine weitere Kopie.
Um ein Klischee von Waffenrechtlern anzupassen, "ist System () nicht schädlich - Leute, die System () anrufen, sind schädlich".
Keine Funktionsaufrufe sind an sich schädlich, aber wenn Sie Menschen erlauben, sie frei zu benutzen, können diese Personen Schaden anrichten.
Auch die Definition von Schaden hängt davon ab, was Sie für schädlich halten.
Tags und Links r code-injection system