Предоставить возможности работающему процессу
Уже запущенному процессу требуется привилегированная инструкция, например, использование опции сокета SO_RCVBUFFORCE. Этот процесс выполняется как обычный пользовательский процесс.
Как дать возможность / разрешение этому процессу? Настройки файловых возможностей все еще мечта?
Я попробовал /usr/sbin/setpcaps
утилита из пакета libcap и тому cap_set_proc()
API, но CAP_SETPCAP
возможность заблокирована в системе (устаревшая система на базе Fedora 4 с ядром 2.6.20), поэтому она не может предоставлять / удалять возможности для процесса, отличного от самого себя.
Подумал об установке временного uid root для этого процесса, но есть ли способ изменить эффективный UID внешнего, уже запущенного процесса? setuid()
/seteuid()
/... функции могут просто изменять текущий процесс (кто вызывает функцию).
1 ответ
Ты не можешь Модель безопасности, лежащая в основе возможностей (точнее, "разрешенного набора возможностей"), заключается в том, что они могут быть отброшены процессом, а не добавлены.
Если вы не можете настроить в своей архитектуре такие вещи, чтобы возможности должным образом наследовались от родителя (ей) процесса, вы можете попытаться выполнить вызов setsocktopt() в отдельном процессе, используя передачу файлового дескриптора. То есть, установите "демон sockopt", работающий с необходимым уровнем привилегий, подключитесь к нему с помощью нового сокета, передайте дескриптор файла с помощью sendmsg() и дайте ему выполнить необходимые вызовы. Это уродливый API, и решение излишне сложное. Но может быть предпочтительнее реструктурировать структуру запуска и инициализации вашего приложения.