Гайд: Как разрешить пользователям устанавливать пакеты через QApt при удалённом подключении

Настройка QApt для установки пакетов удалённо: правила Polkit, запуск агента аутентификации, безопасное делегирование прав в Linux

2026.05.31                  


Гайд: Как разрешить пользователям устанавливать пакеты через QApt при удалённом подключенииГайд: Как разрешить пользователям устанавливать пакеты через QApt при удалённом подключении

Важное предупреждение о безопасности

Установка пакетов в Linux требует прав root.

Любой пользователь, которому разрешено устанавливать пакеты, может:

  • Запускать произвольные команды в процессе установки (pre/post inst скрипты выполняются от root)
  • Перезаписывать системные файлы, модифицировать sudoers, устанавливать демоны
  • Отключать ограничения файловой системы, SELinux/AppArmor (в зависимости от конфигурации)

Разрешение установки пакетов ≠ безопасное делегирование прав. Если вам нужно ограничить возможности пользователей, рассмотрите альтернативы в конце гайда.


Шаг 1: Подготовка системы

1. Убедитесь, что QApt установлен
   # Debian/Ubuntu
   sudo apt install qapt-deb-installer libqapt-runtime polkit-kde-agent-1

   # Arch Linux
   sudo pacman -S qapt polkit-kde-agent

2. Проверьте точное имя действия Polkit

QApt использует разные идентификаторы в зависимости от дистрибутива.

Выполните:

pkaction --verbose | grep -i qapt

Обычно это org.kde.qapt.install или org.kde.qapt. Запомните точный ID.


3. Создайте группу для делегирования прав
   sudo groupadd package-users
   sudo usermod -aG package-users username_пользователя

После добавления в группу пользователь должен выйти и зайти снова (или newgrp package-users).


Шаг 2: Настройка PolicyKit (Polkit)

Современный Polkit (v106+) использует правила в формате JavaScript в /etc/polkit-1/rules.d/.

1. Создайте файл правила:
   sudo nano /etc/polkit-1/rules.d/50-qapt-remote-install.rules

2. Вставьте содержимое (замените org.kde.qapt.install на ваш ID из шага 1):
   polkit.addRule(function(action, subject) {
       if (action.id == "org.kde.qapt.install" && subject.isInGroup("package-users")) {
           // Варианты возврата:
           // polkit.Result.YES           // без пароля
           // polkit.Result.AUTH_ADMIN    // запрос пароля администратора
           // polkit.Result.AUTH_SELF     // запрос пароля самого пользователя
           return polkit.Result.AUTH_ADMIN;
       }
   });

3. Примените изменения (перезапуск polkit не требуется, правила подхватываются динамически):
   sudo systemctl reload polkit

Шаг 3: Настройка удалённой сессии

При подключении через SSH/X11/VNC часто отсутствует агент аутентификации Polkit, из-за чего QApt не может показать диалог ввода пароля или зависает.


Вариант A: SSH + X11 Forwarding

ssh -X user@remote-host

Проверьте, что X11 работает: echo $DISPLAY (должно быть localhost:10.0 или аналогично).


Запустите агент Polkit в фоне:

# KDE
polkit-kde-agent-1 &
# GNOME/LXDE/XFCE
lxpolkit &
# Универсальный текстовый вариант (если GUI не нужен)
pkttyagent --process $$ &

Вариант B: VNC / RDP / x2go

Убедитесь, что в стартовых скриптах сессии (~/.xsession, ~/.vnc/xstartup, /etc/X11/Xsession.d/) присутствует запуск агента Polkit до старта окна QApt.


Пример для ~/.xsession:

#!/bin/bash
export DBUS_SESSION_BUS_ADDRESS=$(dbus-daemon --session --fork --print-address)
polkit-kde-agent-1 &
exec startplasma-x11  # или ваш WM/DE

Почему это важно:

QApt общается с Polkit через D-Bus session bus. Без запущенного агента запрос авторизации "уходит в никуда".


Шаг 4: Проверка работы

  1. Подключитесь удалённо с настроенной сессией.
2. Откройте QApt:
   qapt-deb-installer /path/to/package.deb

или через меню KDE → qapt-deb-installer. 3. При нажатии "Установить" должно появиться окно Polkit. Введите пароль администратора (или пользователя, в зависимости от AUTH_ADMIN/AUTH_SELF).

4. Проверьте логи при проблемах:
   journalctl -f | grep -iE "polkit|qapt|pkexec"

Альтернативные и более безопасные подходы

Задача Рекомендуемое решение
Установка только из доверенных репозиториев Настройте apt с Unattended-Upgrade + ограниченные sources.list
Установка без root Используйте distrobox, toolbox, flatpak, appimage, pipx
Делегирование конкретных команд sudoers: username ALL=(root) NOPASSWD: /usr/bin/apt install package1, package2
Веб-интерфейс с аудитом Webmin, Cockpit с ролевым доступом

QApt официально считается устаревшим в современных KDE-дистрибутивах. Его функциональность перенесена в plasma-discover (PackageKit backend). Если вы используете KDE Plasma 5.20+, рассмотрите переход на Discover + настройку Polkit для org.freedesktop.packagekit.


Устранение типичных проблем

Симптом Решение
QApt зависает на "Запрос авторизации..." Запущен ли polkit-kde-agent-1? Проверьте ps aux | grep polkit. Убедитесь, что $DBUS_SESSION_BUS_ADDRESS установлен.
polkit.Result.AUTH_ADMIN просит пароль root, а не пользователя Это стандартное поведение Polkit. Для запроса пароля самого пользователя используйте AUTH_SELF (требует, чтобы пользователь был в группе sudo/wheel).
pkaction не показывает qapt Установите libqapt-runtime. В некоторых дистрибутивах действие называется org.kde.qapt или com.ubuntu.pkexec.qapt.
X11 Forwarding не работает Проверьте /etc/ssh/sshd_config: X11Forwarding yes, X11UseLocalhost yes. Перезапустите sshd. Установите xauth.
Polkit игнорирует .rules Убедитесь, что файл имеет расширение .rules, находится в /etc/polkit-1/rules.d/, и имеет права 644. Имя должно начинаться с цифр (порядок загрузки).

Заключение

Настройка QApt для удалённой установки пакетов сводится к трём ключевым моментам:

  1. Корректное правило Polkit с точным action.id
  2. Запуск агента аутентификации в удалённой графической сессии
  3. Понимание, что вы делегируете фактические права root

Если ваша цель — безопасное делегирование установки ПО, рассмотрите контейнерные решения (distrobox), flatpak или настройку sudoers с ограниченным списком пакетов. Это снизит риски до минимума.


Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Комментарии

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