Программа, которую я разрабатываю, использует сырые сокеты. По соображениям безопасности, чтобы запустить программу, которая использует необработанные сокеты, программа должна быть запущена под пользователем с эффективным ID 0 (root?) или иметь возможность: CAP_NET_RAW установлено.
Поэтому после сборки я установил возможность:
sudo setcap cap_net_raw+ep <executable>
Файл в терминале меняется на красный фон с черным текстом, и я не уверен, что это значит. При запуске ls -l
он по-прежнему имеет все остальные атрибуты файлов других программ, поэтому я не уверен, что именно изменило его. Я проверил, что возможность установлена с помощью getcap
Проблема после запуска setcap
. Загрузчик не может загрузить другие общие объекты с сообщением об ошибке «не удается найти файл». Без setcap
программа работает и загружает все необходимые общие объекты (при запуске от имени root), но я бы предпочел этого не делать. Путь общего объекта задается в переменной среды LD_LIBRARY_PATH
.
Любые советы или подсказки относительно того, что изменилось с исполняемым файлом, чтобы загрузчик не смог загрузить другие общие объекты? Может ли это быть из-за того, что другие общие объекты, на которые он ссылается, не имеют такой возможности?
Спасибо за любую помощь.