История изменений
Исправление firkax, (текущая версия) :
один процесс хочет делать insmod, второй - ptrace. чем тут помогут группы?
Речь шла про разделение доступа к файлам. Всё остальное нужно в исчезающе малом количестве случаев. Но впрочем и тут можно кое что сделать, хотя уже не совсем красиво будет и не полностью.
Системные вызовы, если они не рутовые, обычно никакой опасности не представляют, и в ограничениях не нуждаются.
Например, с помощью ptrace один юзер в общем случае не может захватить контроль над процессом другого юзера. А над своим - пусть захватывает, в чём проблема то? Если хочешь два процесса друг от друга в этом плане изолировать - ставь им разных юзеров.
Теперь насчёт рута. Будь готов к тому, что у процесса, запущеного от рута, есть доступ куда угодно, это такая фича (про контейнеры не будем). Соответственно, если процессу не нужен доступ -куда-угодно-, то не надо запускать его от рута. Запускай его от обычного юзера, а нужные права раздай отдельно. Частично это можно делать через setcap (man 8 setcap и аналоги). Частично - создаёшь suid-root-врапперы вокруг нужных системных вызовов. Доступ к врапперам можно сделать как с помощью групп (chmod 4710), так и проверять его в коде самого враппера (тогда chmod 4711 и делаем во враппере getresuid() + getresgid() с дальнейшей их проверкой). Бонус - проверять можно не только тип системного вызова, но и его аргументы но произвольным правилам.
в чем твой поинт? в системе не должно быть ни одного рутового процесса? конкретизируй.
В том, что для детальной настройки прав ни selinux ни acl не нужны. Нужна ли детальная настройка прав сама по себе - другой вопрос.
Исходная версия firkax, :
один процесс хочет делать insmod, второй - ptrace. чем тут помогут группы?
Речь шла про разделение доступа к файлам. Всё остальное нужно в исчезающе малом количестве случаев. Но впрочем и тут можно кое что сделать, хотя уже не совсем красиво будет и не полностью.
Системные вызовы, если они не рутовые, обычно никакой опасности не представляют, и в ограничениях не нуждаются.
Например, с помощью ptrace один юзер в общем случае не может захватить контроль над процессом другого юзера. А над своим - пусть захватывает, в чём проблема то? Если хочешь два процесса друг от друга в этом плане изолировать - ставь им разных юзеров.
Теперь насчёт рута. Будь готов к тому, что у процесса, запущеного от рута, есть доступ куда угодно, это такая фича (про контейнеры не будем). Соответственно, если процессу не нужен доступ -куда-угодно-, то не надо запускать его от рута. Запускай его от обычного юзера, а нужные права раздай отдельно. Частично это можно делать через setcap (man 8 setcap и аналоги). Частично - создаёшь suid-root-врапперы вокруг нужных системных вызовов. Доступ к врапперам можно сделать как с помощью групп (chmod 4710), так и проверять его в коде самого враппера (тогда chmod 4711 и делаем во враппере getresuid() + getresgid() с дальнейшей их проверкой).
в чем твой поинт? в системе не должно быть ни одного рутового процесса? конкретизируй.
В том, что для детальной настройки прав ни selinux ни acl не нужны. Нужна ли детальная настройка прав сама по себе - другой вопрос.