是否有一个 unix 类型的免费操作系统允许我删除特定进程及其任何子进程的所有磁盘访问权限?
#!/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 进程,它将从公众那里接收任意输入,而我并不完全信任它。如果我可以删除所有文件系统访问权限,特别是在该进程读取了一些配置文件之后,并且在它开始读取用户 STDIN 之前动态地删除,那将是天堂。比沙箱或虚拟机更好满足我的需求. 在某些方面几乎牢不可破。 维护需求极少。 我并不是说这对每个人都有效,可以解决所有问题,但是,只要最低限度地维护和注意,就可以解决一个巨大的麻烦我。安全现在是一个难题,即使它本来不必如此。 方便将在很大程度上确保非专业人士的安全。
谢谢您的建议。
/iaw
答案1
听起来 SELinux 可以满足您的需求。但我对它不够熟悉,无法创建您需要的配置。SELinux 可在多个 Linux 发行版上使用。
许多守护进程需要 root 权限才能启动(例如,监听端口 80),但会尽快放弃这些权限,然后以非特权用户身份运行。此技术可以让您读取配置文件,然后让长时间运行的守护进程无法读取相同的配置文件。另一种方法是在进程启动时通过 STDIN 传入配置文件。
如果您在 chroot 内部设置适当的文件权限以使进程无法读取或写入任何内容,那么 chroot 也可能适合您的需要。
这两种选择确实都需要一些额外的工作,但它们并不会造成太大的不便。