Ich schreibe ein Programm, das untergeordnete Prozesse hervorbringt. Aus Sicherheitsgründen möchte ich beschränken, was diese Prozesse tun können. Ich kenne Sicherheitsmaßnahmen von außerhalb des Programms wie chroot
oder ulimit
, aber ich möchte etwas mehr als das tun. Ich möchte die Systemaufrufe begrenzen, die vom Kindprozess erledigt werden (zum Beispiel verhindern, Anrufe an open()
, fork()
und solche Dinge). Gibt es eine Möglichkeit, das zu tun? Im Optimalfall sollten die blockierten Systemaufrufe mit einem Fehler zurückkommen, aber wenn das nicht möglich ist, dann ist es auch gut, den Prozess zu beenden.Verhindern, dass Prozesse bestimmte Systemaufrufe ausführen
Ich denke, es kann mit ptrace()
getan werden, aber von der man-Seite verstehe ich nicht wirklich, wie man es für diesen Zweck verwendet.
Sie wahrscheinlich wollen SELinux http://en.wikipedia.org/wiki/Security-Enhanced_Linux Ich bin nicht 100% sicher, aber es sollte eine programmierbare API haben. –
['prctl (PR_SET_SECCOMP, ...)'] (http://www.kernel.org/doc/man-pages/online/pages/man2/prctl.2.html) kann sein, was Sie wollen. Das ist so nah wie möglich, um "syscalls" nicht zu erlauben. – Damon
Das Problem mit 'prctl (PR_SET_SECCOMP, ...)' ist, dass es auch den 'exec()' Aufruf blockiert, so dass es für mich unbrauchbar ist. – petersohn