Предоставить возможности работающему процессу - PullRequest
2 голосов
/ 14 сентября 2009

Уже запущенному процессу требуется привилегированная инструкция, например, с использованием опции сокета SO_RCVBUFFORCE. Этот процесс выполняется как обычный пользовательский процесс.

Как дать возможность / разрешение этому процессу? Настройки файловых возможностей все еще мечта?

Я попробовал утилиту /usr/sbin/setpcaps из пакета libcap и API cap_set_proc(), но в системе заблокирована возможность CAP_SETPCAP (устаревшая система, основанная на Fedora 4 с ядром 2.6.20), поэтому она может не предоставлять / удалять возможности для процесса, отличного от себя.

Подумал об установке временного uid root для этого процесса, но есть ли способ изменить эффективный UID внешнего, уже запущенного процесса? Функции setuid() / seteuid() / ... могут просто изменять текущий процесс (который вызывает функцию).

1 Ответ

1 голос
/ 14 сентября 2009

Вы не можете. Модель безопасности, лежащая в основе возможностей (точнее, «разрешенного набора возможностей»), заключается в том, что они могут быть отброшены процессом, а не добавлены.

Если вы не можете настроить в своей архитектуре такие вещи, чтобы возможности должным образом наследовались от родителя (ей) процесса, вы можете попробовать выполнить вызов setssetstopt () в отдельном процессе, используя передачу дескриптора файла. То есть, установите «демон sockopt», работающий с необходимым уровнем привилегий, подключитесь к нему с помощью нового сокета, передайте дескриптор файла с помощью sendmsg () и дайте ему выполнить необходимые вызовы. Это уродливый API, и решение излишне сложное. Но может быть предпочтительнее реструктурировать структуру запуска и инициализации вашего приложения.

...