Я занят разработкой приложения на C ++ на компьютере с Linux. Приложение использует стороннюю библиотеку, которая использует адаптер Ethernet и сеть. Библиотека - это библиотека камеры GigE Vision. При запуске мое приложение пытается подключиться к камере, а затем возвращает информацию о камере, после чего оно начинает потоковую передачу видео в приложение.
Через некоторое время приложение не может подключиться или получить информацию о камере с камеры, но запуск приложения от имени пользователя root (sudo) решает проблему.
Я связался с поставщиком библиотеки, и они указали, что я должен сделать следующее:
Пользователи, которые считают, что запуск от имени root ставит под угрозу их безопасность системы, могут найти следующую реализацию удовлетворительной:
- установить владельца исполняемого файла как root.
- установить бит разрешения "setuid" для исполняемого файла
- в коде, когда приложение запускается, используйте capset (), чтобы освободить все, кроме этих привилегий: CAP_SYS_NICE, CAP_NET_ADMIN, CAP_NET_BROADCAST, CAP_NET_RAW Приложение запустится со всеми привилегиями root, но оно удалит их сразу после запуска.
Это работает, но нет ли альтернативного способа сделать это без изменения исполняемого файла? Я думаю о добавлении моего пользователя в какую-либо группу, которая позволит мне получить доступ к этим привилегиям, и любая помощь будет принята с благодарностью.
Вышеупомянутое решение не является оптимальным в том смысле, что после каждой компиляции мне нужно сменить владельца и установить разрешения. Приложение используется для записи видео и захвата изображений. Для упомянутого решения эти записи и записи также принадлежат пользователю root, и пользователь должен быть возвращен обратно при распространении файлов.
ОС: Ubuntu Linux 11.10
Среда: C ++ с Qt