ptrace
кажется наиболее очевидным инструментом, но кроме этого…
util-linux [-ng] имеет команду unshare
, которая использует ядро clone
/ unshare
интерфейсы.Если вы запускаете новый процесс через unshare -n
(или clone(CLONE_NEWNET)
), все создаваемые им сетевые сокеты находятся в другом пространстве имен.Это не решает проблему с ресурсом ядра, но делает песочницу для процесса.
Ядро Linux также поддерживает seccomp , режим, введенный с prctl(PR_SET_SECCOMP, 1)
, который предотвращает процесс (ну, потокдействительно) от вызова любых системных вызовов, кроме read
, write
, exit
и sigreturn
.Это довольно эффективная песочница, но ее трудно использовать с неизмененным кодом.
Вы можете определить домен SELinux, который запрещает socket
/ bind
/ и т.д.вызовы и выполнить динамический переход в этот тип.Это (очевидно) требует системы с активно применяемой политикой SELinux.(Возможно, подобные вещи возможны с AppArmor и TOMOYO, но я не очень знаком с любым из них.)