Назад | Перейти на главную страницу

удаление доступа процесса (и дочернего процесса) к файловым системам?

есть ли свободная ОС типа 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, чтобы процесс не мог ничего читать или писать.

Оба эти варианта требуют дополнительной работы, но они не так уж и неудобны.