Как настроить Центр программного обеспечения для установки программного обеспечения для пользователей без полномочий root?

47

Как я могу настроить Центр программного обеспечения так, чтобы пользователи без полномочий root могли устанавливать вещи из репозиториев Ubuntu без необходимости вводить свой пароль?

Я полностью осведомлен о последствиях для безопасности и готов пойти на риск. Fedora 12 поставляется с чем-то вроде этого. (Я полагаю, что изменив конфигурацию PolicyKit)

snostorm
источник
5
Важно отметить, что Fedora также поддержала это после того, как небо упало на них.
Николас Найт
Да, я помню это. Это действительно имеет смысл только на настольных компьютерах с одним или двумя пользователями.
snostorm
Имейте в виду, что некоторые приложения для рынка приложений, такие как Software Center, позволяют менять системные репозитории. Самообслуживание пакетов рискованно, но пользователи, добавляющие ненадежные источники пакетов, действительно опасны.
Альфонсо Е.М.

Ответы:

36

Вы можете изменить разрешения PolicyKit, чтобы пользователи могли получать доступ к бэкенду aptdaemon, который использует Software Center.

dpkg --listfiles aptdaemonпоказывает, что /usr/share/polkit-1/actions/org.debian.apt.policyэто файл, указывающий возможные действия на серверную часть aptdaemon.

Глядя в этот файл, < action id="">теги определяют возможные действия. Возможно, вы захотите org.debian.apt.install-packagesразрешить пользователям устанавливать новые пакеты из архива и org.debian.apt.update-cacheразрешать пользователям обновлять списки пакетов.

Посмотрите, man pklocalauthorityкакие документы, как установить локальные разрешения для действий PolicyKit. Включение следующего /etc/polkit-1/localauthority/50-local.d/10-allow-users-to-install.pklaпозволит любому пользователю, вошедшему на локальный компьютер, устанавливать пакеты после ввода собственного пароля (даже если они не входят в группу администраторов) и обновлять кэш пакетов без ввода пароля.

[Untrusted Install]
Action=org.debian.apt.install-or-remove-packages
ResultyAny=no
ResultInactive=no
ResultActive=auth_self

[Untrusted Update]
Action=org.debian.apt.update-cache
ResultAny=no
ResultInactive=no
ResultActive=yes
RAOF
источник
Политика Kubuntu (по крайней мере, в Natty и Oneiric) в/usr/share/polkit-1/actions/org.kubuntu.qaptworker.policy
Lekensteyn
Инструкции для Kubuntu можно найти в моем ответе
Лекенштейн
Спасатель - ура, приятель! Я должен был добавить, Identity=*чтобы заставить это работать, адаптированный от askubuntu.com/a/123260 . Кроме того, есть ли способ получить больше выходных данных журнала набора политики, например /var/log/auth.log(или любых других файлов журнала)? Я только получаю authentication failsсообщения, но без причины, почему это не удалось ...
SSC
10

Я не думаю, что в настоящее время это возможно сделать через графический интерфейс, но следующее должно работать, хотя и немного глупо. YMMV.

Добавьте следующую строку в / etc / sudoers (используйте sudo visudoдля редактирования файла):

%packageinstallers ALL = NOPASSWD: /usr/bin/software-center /usr/bin/apt-get

Тогда вам просто нужно создать и добавить конкретных пользователей в packageinstallersгруппу:

$ sudo addgroup packageinstallers
$ sudo adduser jdoe packageinstallers

Теперь jdoeможно сделать следующее:

$ sudo apt-get install <some-package>

и вы можете отредактировать пункт меню рабочего стола для Центра программного обеспечения так, чтобы он вызывал software-centerдобавление команды с помощью gksudo.

PolicyKit может позволить вам сделать это без sudo, но на данный момент это за пределами моего понимания.

lfaraone
источник
Позволяет ли это установить их из Synaptic или aptitude, или просто apt-get?
snostorm
Если бы вы добавили "/ usr / bin / synaptic" в список, это было бы. Фактически, вы могли бы, вероятно, добавить «/ usr / bin / software-center» в список, и это сработало бы. Хотя не проверял это, дайте мне знать, если это работает, и я обновлю ответ.
lfaraone
Я попробую это. :)
сносторм
Для этого потребуется, чтобы пользователи знали, как запускать software-center с помощью sudo, или чтобы вы изменили файл .desktop. Смотрите мой ответ о том, как настроить PolicyKit, чтобы делать то, что вы хотите.
РАОФ
Согласен, это было бы превосходным решением.
Ифараоне
5

Ответ RAOF относится только к Ubuntu. Kubuntu использует QAptWorker в качестве бэкэнда (наблюдается для Natty и Oneiric). Чтобы разрешить установку без полномочий root, создайте, /etc/polkit-1/localauthority/50-local.d/10-allow-non-root-install-packages.pklaсодержащий:

[Update Software Sources]
Action=org.kubuntu.qaptworker.updateCache
ResultAny=no
ResultInactive=no
ResultActive=yes

[Install Software]
Action=org.kubuntu.qaptworker.commitChanges
ResultAny=no
ResultInactive=no
ResultActive=auth_self

Я хотел позволить некоторым пользователям без прав администратора устанавливать программное обеспечение, не предоставляя права доступа sudo напрямую. Это было достигнуто путем вставки следующих строк в обе группы конфигурации:

Identity=unix-user:some-non-admin-user

Если есть группа, которой необходимо предоставить разрешение, используйте unix-groupвместо unix-user.

Lekensteyn
источник
Чтобы заново применить правила, я перезагрузился. (повторный вход, вероятно, тоже будет работать)
Лекенштейн
Как ты должен это сделать? Даже после того, как sudo -iу меня даже нет доступа к /etc/polkit-1/localauthority(Ubuntu 17.10): « Я не буду пытаться обработать каталог / etc / polkit-1 / localauthority»
JHBonarius
5

Если вам нужно только общее разрешение, чтобы разрешить / запретить установку пакета, перейдите к PolicyKit.

К сожалению, PolicyKit не имеет точного контроля над пакетом для установки. Если вы хотите дать своим пользователям разрешение на установку только ограниченного набора приложений, вам следует использовать sudoи устанавливать что-то вроде программных каналов ...

Я также искал что-то подобное, но так как я ничего не нашел, я кодировал это простое решение "каналы программного обеспечения", доступное здесь, на GitHub

Это очень простая система, позволяющая обычным (не администраторам) пользователям устанавливать пакеты из ограниченных каталогов.

Просто определите «каналы» (группы пакетов) в простом текстовом файле и дайте своим пользователям разрешения на запуск программных каналов.

Они будут видеть пакеты только в каналах, соответствующих их группам Unix.

Альфонсо Э.М.
источник