есть ли свободная ОС типа 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
Похоже, что SELinux подойдет вам. Однако я недостаточно знаком с ним, чтобы создать нужную вам конфигурацию. SELinux доступен в нескольких дистрибутивах Linux.
Многим демонам требуются привилегии суперпользователя для начала работы (например, для прослушивания порта 80), но они отбрасывают эти привилегии, как только могут, и запускаются после этого как непривилегированный пользователь. Этот метод может позволить вам читать файлы конфигурации, а затем долго работающий демон не сможет прочитать те же самые файлы конфигурации. Другой подход заключался бы в передаче файлов конфигурации через STDIN при запуске процесса.
Chroot также может удовлетворить ваши потребности, если вы установите соответствующие права доступа к файлам внутри chroot, чтобы процесс не мог ничего читать или писать.
Оба эти варианта требуют дополнительной работы, но они не так уж и неудобны.