Итак, я пытаюсь настроить способ аутентификации пользователя рабочего стола GNOME для привилегированных приложений. Из коробки запрашивает root
пароль. Для моего развертывания это нежелательно, и я хочу, чтобы он повторно запрашивал у пользователя их пароль и разрешать им доступ только в том случае, если они находятся в определенной группе (wheel
).
Я добился некоторого прогресса. Если файл существует в /etc/security/console.apps
с именем службы, пытающейся запустить (например, pirut
диспетчер пакетов), то GNOME запросит пароль и повысит уровень программы. Здесь pirut
файл:
USER=root
PROGRAM=/usr/sbin/pirut
SESSION=true
KEEP_ENV_VARS=http_proxy,ftp_proxy
Если я закомментирую / удалю USER=root
После этого мне будет предложено указать пользователя, под которым я сейчас вошел в систему, и это то, что я хочу. Проблема в том, что пока пользователь знает свой пароль, он запускается, поэтому даже пользователи, не входящие в мою группу, могут запускать привилегированные приложения.
А man console.apps
актуально; однако бесполезно:
Каталог /etc/security/console.apps/ должен содержать по одному файлу для каждого приложения, которое хочет разрешить доступ пользователям консоли. Имя файла должно совпадать с именем servicename, а содержимое не имеет значения; файл может быть файлом нулевой длины. Приложение, в котором используется файл, может определять содержимое любым удобным для него способом.
Мой вопрос: как мне сообщить GNOME / ConsoleHelper, что пользователь также должен быть в определенном месте, чтобы разрешить выполнение?
То, что вы хотите сделать для consolehelper, помещается UGROUPS=wheel
в файлах console.apps. (Вам не нужно менять то, что уже есть, и обычно не следует.) А затем добавьте соответствующих пользователей в группу wheel. Затем членам этой группы будет предложено выполнить аутентификацию от имени пользователя, в то время как другие пользователи по-прежнему будут выполнять авторизацию от имени пользователя root. (Некоторое время назад мне нужна была такая же функциональность, поэтому я написал ее и обновил патч. Открытый исходный код - это здорово.)
Это задокументировано в man userhelper
.
В более новых дистрибутивах - текущих Fedora и RHEL6 - consolehelper постепенно заменяется PolicyKit (a.k.a. polkit
). Он имеет другую схему конфигурации, но может делать то же самое. Видеть man pklocalauthority
для подробностей об этом, но сводка такова: поместите файлы в /etc/polkit-1/localauthority/50-local.d
с содержанием вроде:
[Wheel-Group Permissions]
Identity=unix-group:wheel
Action=org.something.seedocs.*;more.actions.*;whatever.you.want.*
ResultAny=auth_self
И, наконец, вы можете раскомментировать %wheel ALL=(ALL) ALL
линия в /etc/sudoers
. (Это может стать значением по умолчанию в Fedora 15.)