Гайд: Как разрешить пользователям устанавливать пакеты через 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: Проверка работы
- Подключитесь удалённо с настроенной сессией.
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 для удалённой установки пакетов сводится к трём ключевым моментам:
- Корректное правило Polkit с точным
action.id - Запуск агента аутентификации в удалённой графической сессии
- Понимание, что вы делегируете фактические права root
Если ваша цель — безопасное делегирование установки ПО, рассмотрите контейнерные решения (distrobox), flatpak или настройку sudoers с ограниченным списком пакетов. Это снизит риски до минимума.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.