Я нахожусь в процессе разработки демона и пользовательского приложения, которое будет общаться с демоном через сокет домена UNIX для отправки команд, получения информации о состоянии и т. Д. Пользовательское приложение будет запускаться пользователями без полномочий root с установленным битом setuid, так что что у него будет эффективный идентификатор пользователя root, что позволит ему получать доступ к ресурсам, требующим привилегий root. Большинству файлов, сокетов, устройств (ttys и т. Д.) Требуются права суперпользователя для доступа к ним через файл, системные вызовы ioctl. Я не хочу работать с повышенными привилегиями все время во время выполнения, поскольку это небезопасно и осуждается.
Мой вопрос, поскольку я не смог найти что-либо в книгах или в Интернете, существует ли исчерпывающий список системных вызовов, ресурсов, для доступа к которым требуются права суперпользователя? Я знаю, что ресурсам, которые я использую, нужны повышенные привилегии, поскольку я могу проверить это путем отладки с / без бита setuid, установленного для данного исполняемого файла, но мне просто любопытно, есть ли где-нибудь скомпилированный список, описывающий, когда, когда вам не нужно повышать привилегии для доступа к ресурсам?
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
правила, которые будут предоставлять более конкретные разрешения для отдельных устройств.
Других решений пока нет …