nicm@ и deraadt@ представили новый системный вызов, позволяющий максимально просто добавить в приложение возможность отказаться от излишних привилегий. Новый механизм призван дополнить недавно портированный и более сложный в использовании capsicum(4), а также ранее существовавший systrace(4).
Самое интересное то, что новый системный вызов позволяет четко отделить фазу инициализации процесса от его основной части, и наложить более строгие ограничения на последнюю. Ведь известно, что во время инициализации используется гораздо больше привилегий. Доступные флаги ограничений выбраны как разумный компромисс между гранулярностью и простотой использования на основе тщательного аудита устройства программного обеспечения из base system а также портов, наборы оптимизированы под наиболее популярные паттерны. Более сложным приложениям стоит посмотреть в сторону вышеупомянутого capsicum.
К объявлению также прилагаются патчи для 29-ти компонентов базовой системы, которые демонстрируют использование tame(2). Вот, например, diff для нового системного вызова для одного из демонов bgpd (он разделен на части по модели privsep, которые общаются между собой с использованием фреймворка imsg):
+#include <sys/tame.h>
…
+ tame(TAME_MALLOC | TAME_UNIX | TAME_CMSG);
Такой подход позволяет разработчикам максимально просто и быстро ограничить потенциальный вред от уязвимостей в своем софте, соответственно, есть шансы что он будет использоваться более часто и широко, чем гораздо более сложные для программиста capsicum и правильный privsep, или в определенном смысле менее гибкие и непростые в администрировании selinux/systrace и co.
>>> Подробности