Linux — Какие ресурсы требуют повышенных привилегий программирования на C / C ++?

Я нахожусь в процессе разработки демона и пользовательского приложения, которое будет общаться с демоном через сокет домена UNIX для отправки команд, получения информации о состоянии и т. Д. Пользовательское приложение будет запускаться пользователями без полномочий root с установленным битом setuid, так что что у него будет эффективный идентификатор пользователя root, что позволит ему получать доступ к ресурсам, требующим привилегий root. Большинству файлов, сокетов, устройств (ttys и т. Д.) Требуются права суперпользователя для доступа к ним через файл, системные вызовы ioctl. Я не хочу работать с повышенными привилегиями все время во время выполнения, поскольку это небезопасно и осуждается.

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

1

Решение

ioctl не требует повышенных привилегий как таковой. Данное устройство может быть ограничено специальными привилегиями, но это не означает, что ваша программа должна быть запущена как root:

В традиционной системе Linux авторизация привилегий осуществляется через файловые разрешения (в основном: членство в группах).

Рассмотрите возможность доступа к веб-камере, которая отображается как /dev/video3

$ ls -l / dev / video3
crw-rw —- + 1 root video 81, 0 дек. 2 09:21 / dev / video3

Таким образом, это устройство может быть прочитано / записано root а также любой пользователь, принадлежащий к video группа.

Так что достаточно, если пользователь программы, которая хочет контролировать /dev/video3 является членом video группа.

Примечание: «пользователь» не обязательно должен быть пользователем; это также может быть пользователь системы кто единственная цель состоит в том, чтобы запустить данного демона.

Если это слишком грубо (например, вы хотите предоставить данному пользователю доступ к /dev/video3 но не /dev/video0; но по умолчанию оба доступны для записи video группа), это достаточно легко настроить udev правила, которые будут предоставлять более конкретные разрешения для отдельных устройств.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]