Назад | Перейти на главную страницу

Сетевой сокет на C ++ на Redhat 5 для пользователя без полномочий root

Я написал программу на C ++, которая использует сокеты для связи с машиной Windows7.

Я запустил код как пользователь root, и все работает нормально. Однако из соображений безопасности я не хочу запускать программу как root.

Сначала я создал нового пользователя для запуска программы, но он не позволял пользователю запускать новый сокет, поэтому я добавил пользователя в корневую группу и попытался снова, но Redhat не позволяет мне запускать новый сокет как угодно но пользователь root.

Я пробовал это с отключенным брандмауэром, чтобы исключить это, и все равно не повезло.

Итак, есть ли у кого-нибудь из вас представление о том, какие разрешения / группы мне следует изменить / добавить?


Я поискал в Интернете и обнаружил, что:

/usr/sbin/setsebool -P httpd_can_network_connect=1

Предлагается как возможное лекарство, но, похоже, мне это не помогает.

К какому порту вы привязываетесь?

Привязка к портам TCP ниже 1024 ограничена пользователем root.

Вы можете отказаться от привилегий root после привязки сокета в вашей программе или использовать обходной путь, например, iptables redirect или authbind; есть хорошее обсуждение многих вариантов в этом вопрос о переполнении стека.

но Redhat не позволит мне запустить новый сокет от имени пользователя root.

Тогда у вас должна быть настроена очень строгая политика SELinux.

Вы уверены, что он просто не позволит вам создать прослушивающий сокет, используя номер порта меньше 1024?

редактировать

Если номер порта не ниже 1024, то это политика SELinux. Вы должны увидеть записи в / var / log / messages, в которых говорится, что это отклонено.

Позволять...

 /usr/sbin/semanage port -a -t <SEType> -p tcp 51717

Где указывается тип в журнале, или используйте http_port_t, чтобы добавить его в тип http. Видеть эта страница для примера