Я хотел бы реализовать песочницу с помощью ptrace ()
в процессе, который я запускаю, и все его потомки будут создавать (включая внуков и т. д.). Родительский процесс ptrace ()
, то есть супервизор. будет простой программой на C или Python и концептуально ограничит доступ к файловой системе (на основе имени пути и направления доступа (чтение или запись) и доступа к сокету (например, запрет создания сокета).
На что следует обратить внимание. так что процесс ptrace ()
d и его потомки (рекурсивно) не смогут обойти песочницу? Есть ли что-нибудь особенное, что супервизор должен сделать в fork ()
time, чтобы избежать условий гонки? Можно ли прочитать аргументы имени файла, например rename ()
из дочернего процесса без состояния гонки?
Вот что я уже планировал сделать:
PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE
, чтобы избежать (некоторых) кодировок расы, когда fork ()
ing * at ()
варианты системного вызова (такие как openat
) должным образом защищены На что еще следует обратить внимание?