Предоставить возможности работающему процессу

Уже запущенному процессу требуется привилегированная инструкция, например, использование опции сокета 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, и решение излишне сложное. Но может быть предпочтительнее реструктурировать структуру запуска и инициализации вашего приложения.

Другие вопросы по тегам