有没有一个unixtypes的免费操作系统,允许我删除所有的磁盘访问特定进程和任何它的孩子?
#!/usr/bin/perl -w use strict; use Perl6::Slurp; my $infile= slurp("/etc/myprogramconfit.txt"); ## still legal **remove_all_disk_access();** ## STDIN and STDOUT don't access disk, so they are still ok. while (<>) { print "$_"; ## somewhere deep inside another module... open(FO, "< /etc/password"); ### ALWAYS ERROR: $! open(FO, "> ~/bin/ls"); ### ALWAYS ERROR: $! system("/bin/ls"); ## ALWAYS ERROR: $! ## even if the rest of my (cgi) program is exceedingly stupid, ## it will now be exceedingly hard to break into my system. ## better than chroot?! no setuid involved anywhere. }
(后台—我只想通过STDIN / STDOUT / STDERR与这个进程交谈,这将是一个CGI进程,它将接收来自公众的任意input,我不完全信任它,如果我可以删除所有的文件系统访问,特别是在进程已经读取了几个configuration文件之后,在开始读用户STDIN之前dynamic地,这将是天堂,比沙盒或者虚拟机更好,在某些方面几乎是不可破解的,最小的维护需求。并不是说这样做对所有人都有效,而且可以解决所有问题,但是这样做可以在最小的维护和关注的条件下为我解决一个非常头痛的问题,即使没有必要,安全问题也是一个难题。为非专业人员的安全工作做了很大的努力。)
build议感激。
/ IAW
这听起来像SELinux将适合您的需求。 我不太熟悉它来创build你需要的configuration。 SELinux可在几个Linux发行版上使用。
许多守护进程需要root权限才能开始(例如,在端口80上侦听),但是尽快删除这些权限,然后作为非特权用户运行。 这种技术可以让你读取configuration文件,然后让长时间运行的守护进程无法读取那些相同的configuration文件。 另一种方法是在进程启动时通过STDIN传递configuration文件。
如果您在chroot中设置了适当的文件权限,那么chroot也可以满足您的需要,从而使进程无法读取或写入任何内容。
这两个选项确实涉及一些额外的工作,但并不是那么不方便。