3

Программа, которую я разрабатываю, использует сырые сокеты. По соображениям безопасности, чтобы запустить программу, которая использует необработанные сокеты, программа должна быть запущена под пользователем с эффективным ID 0 (root?) или иметь возможность: CAP_NET_RAW установлено.

Поэтому после сборки я установил возможность:

sudo setcap cap_net_raw+ep <executable>

Файл в терминале меняется на красный фон с черным текстом, и я не уверен, что это значит. При запуске ls -l он по-прежнему имеет все остальные атрибуты файлов других программ, поэтому я не уверен, что именно изменило его. Я проверил, что возможность установлена с помощью getcap

Проблема после запуска setcap . Загрузчик не может загрузить другие общие объекты с сообщением об ошибке «не удается найти файл». Без setcap программа работает и загружает все необходимые общие объекты (при запуске от имени root), но я бы предпочел этого не делать. Путь общего объекта задается в переменной среды LD_LIBRARY_PATH .

Любые советы или подсказки относительно того, что изменилось с исполняемым файлом, чтобы загрузчик не смог загрузить другие общие объекты? Может ли это быть из-за того, что другие общие объекты, на которые он ссылается, не имеют такой возможности?

Спасибо за любую помощь.

1 ответ1

2

По крайней мере, для программ setuid переменные среды, такие как LD_LIBRARY_PATH или LD_PRELOAD , игнорируются по соображениям безопасности. Смотрите man-страницу ld.so(8) для подробностей.

Я мог бы представить, что это то же самое или, по крайней мере, похожее для программ с установленными возможностями. (Ни возможности man-страницы capabilities(7) ни man-страница ld.so(8) упоминают такие ограничения.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .