Возможно ли использовать набор библиотек C или системных вызовов для сброса всех пользовательских привилегий на POSIX или, по крайней мере, на Linux? Обратите внимание, что я не спрашиваю, как отказаться от root
привилегий, и это, по-видимому, все остальные результаты поиска StackOverflow задают и отвечают.Выпускать привилегии как обычного пользователя без полномочий root для песочницы?
Я хочу такого же эффекта, как и переход на пользователя nobody
, но, если возможно, сильнее. То есть, я хочу, чтобы мое приложение C, чтобы сделать следующее:
- Выполнить как обычный пользователь, не
root
и без разрешения битого УИПА файла - Сохраняйте возможность доступа к конкретным файлам и открытой исходящей сетевые соединения
- добровольно и навсегда теряют способность читать и записывать файлы в указанных (или все) каталогов, особенно
$HOME
- Если возможно, отказаться или песочница всех других несущественных способностей, как открытие сокета с
accept
Вещи, которые я рассмотрел, что до сих пор не отвечают всем требованиям:
- Переключение на пользователя
nobody
сsetuid
/setgid
- обычных пользователей запрещается переключение на другие пользователи (например,
nobody
), и приложение не должно требоватьroot
только для перехода наnobody
.
- обычных пользователей запрещается переключение на другие пользователи (например,
- Linux/POSIX.1e Capabilities
- возможности добавлять только
root
-как привилегии, а не отнимать обычные привилегии пользователя
- возможности добавлять только
- Традиционные seccomp
- Мое приложение будет нужно больше, чем просто
exit
,sigreturn
,read
, иwrite
- Мое приложение будет нужно больше, чем просто
вещи, которые выглядят интересно, но для которых я не мог найти в документации, как представляется, не сопровождается, или, как представляется, не переносимы:
Итак, есть ли хорошо документированный, желательно переносимый способ отказаться от несущественных пользовательских привилегий и песочницы, без необходимости сначала стать root
?
Вы считали что-то вроде групп/пространств имен? –
Просьба уточнить вашу конкретную проблему или добавить дополнительные сведения, чтобы точно указать, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. См. Страницу «Как спросить», чтобы помочь прояснить этот вопрос. –
@self Полностью не согласен. Это хорошо изученный вопрос с хорошим описанием и списком вещей, которые близки, но не совсем подходят для решения. Это на самом деле один из лучших письменных вопросов, которые я видел на SO в течение долгого времени. – viraptor