Я работаю в Ubuntu 14.04 У меня есть приложение C++, которое я скомпилировал. Я получаю исполняемый файл, имя которого является "программой". Ну, дело в том, что эта программа использует opencv и сокеты, если я попытаюсь выполнить ее в терминале следующим образом:
./program
Я получил эту ошибку:
listener: socket: Operation not permitted
setsockopt: Bad file descriptor
Эта ошибка возникает из-за того, что я использую сокет, и мне нужно запустить мое приложение как root, поэтому я вот что:
sudo ./program
Этот запрос мой пароль и программа работают нормально.
Дело в том, что я хочу запустить эту "программу" автоматически, когда я запускаю Ubuntu, но это не сработает. У меня есть другое приложение, которое называется "камера", в котором используется только opencv, no socket, тогда мне не нужно запускать с правами root. Поэтому я помещал это приложение в приложение для запуска ubuntu, а приложение "камера" начиналось с самого начала без проблем.
Поэтому я предполагаю, что моя проблема в том, что мне нужно запускать как root свою "программу", но я не могу ее получить.
Кто-то может мне помочь?
Большое спасибо
Вам необходимо изменить право собственности на программу на root: root и использовать разрешение setuid, чтобы оно выполнялось с разрешениями его владельца, а не с пользователем, который его вызывал.
sudo chown root:root ./program
sudo chmod a+s ./program
Теперь программа будет работать с правами root для всех пользователей.
Надеюсь, это поможет.
Замечание: как программист вы должны стремиться к тому, чтобы программы, которые запускались с привилегиями root, были свободны от дыр в безопасности, чтобы они не были уязвимы для эксплойтов переполнения буфера и т.д.
/etc/sudoers
, или запустить вашу программу черезcrontab
, или в ваших скриптах инициализации.