Skip to content

feat(security): works without adding user to input group#23

Closed
d-enk wants to merge 1 commit into
radislabus-star:mainfrom
d-enk:security/daemon-uses-supplementary-groups-input
Closed

feat(security): works without adding user to input group#23
d-enk wants to merge 1 commit into
radislabus-star:mainfrom
d-enk:security/daemon-uses-supplementary-groups-input

Conversation

@d-enk
Copy link
Copy Markdown

@d-enk d-enk commented May 21, 2026

Fix #19

Описание

Переход с user-level systemd сервиса на system-level с SupplementaryGroups=input.

Проблема

Предыдущая архитектура добавляла основного пользователя в группу input для доступа к /dev/input. Это означало, что любой процесс от пользователя мог читать клавиатуру — потенциальный кейлоггер.

Решение

  • Daemon работает как системный сервис с SupplementaryGroups=input — только процесс daemon имеет доступ к /dev/input
  • Пользователь НЕ добавляется в группу input
  • Пользовательские настройки (User, Group, ExecStart, DBUS_SESSION_BUS_ADDRESS) передаются через дроп-ин файл, генерируемый install.sh
  • Все команды управления daemon (systemctl) теперь используют sudo systemctl (system-level)

Безопасность

  • /dev/input/event* доступен только процессу daemon (через SupplementaryGroups=input)
  • Другие процессы от пользователя не могут читать клавиатуру
  • DBus session bus работает естественно (тот же UID)

Ограничение

Только один пользователь. У сервиса захардкожен дроп-ин файл с именем полбзователя.

Возможно расширение через шаблонный сервис (lay-daemon@.service) — тогда каждый пользователь получает свой экземпляр daemon'а, но я решил не ввязываться.

@d-enk d-enk marked this pull request as draft May 21, 2026 18:34
Replace user-level systemd service with system-level service running as
the current user via drop-in file. The daemon uses
SupplementaryGroups=input so only the daemon process has access to
/dev/input — the user is NOT added to the input group.

Key changes:
- systemd/lay-daemon.service: generic service with
  SupplementaryGroups=input
  and BindPaths for /dev/input and /dev/uinput. User, Group, ExecStart,
  and DBUS_SESSION_BUS_ADDRESS are set in a generated drop-in file.
- install.sh: removed usermod -aG input, generates drop-in in
  /etc/systemd/system/lay-daemon.service.d/
- extension/lay-impl.js: removed --user from systemctl calls
- scripts: all systemctl commands changed to sudo systemctl
- Documentation updated to reflect new security model
- Added uninstall.sh

Security: other processes from the user cannot read /dev/input,
only lay-daemon has access via SupplementaryGroups=input.
@d-enk d-enk force-pushed the security/daemon-uses-supplementary-groups-input branch from 0d8a509 to 5c98fb8 Compare May 21, 2026 18:36
@d-enk d-enk marked this pull request as ready for review May 21, 2026 18:47
@radislabus-star
Copy link
Copy Markdown
Owner

Спасибо за PR. Идея правильная: не давать всем пользовательским процессам доступ к input.

Не мержу в 0.1.192 вслепую, потому что это меняет установочную модель на system-level service и может сломать обновление/DBus session path на уже установленных системах. Нужен отдельный проверочный проход: fresh install, update from existing user service, GNOME session DBus, KDE tray, uninstall/rollback.

Issue #19 закрыл как перенесённый в этот PR/review. Сам PR оставляю открытым до отдельного теста или до варианта с templated lay-daemon@.service.

@radislabus-star
Copy link
Copy Markdown
Owner

После дополнительного прохода закрываю PR как не готовый к merge в текущем виде.

Причина не в самой идее — идея правильная: уходить от добавления основного пользователя в input. Но текущий вариант резко меняет install/runtime модель на system-level service и требует отдельного дизайна:

  • fresh install;
  • update from existing user service;
  • GNOME session DBus;
  • KDE tray;
  • uninstall/rollback;
  • multi-user/templated service story.

Для публичной ветки сейчас оставляю стабильную user-service модель, а security-service переделаем отдельным PR/веткой, скорее всего через lay-daemon@.service, чтобы не ломать уже установленные системы. Спасибо за направление и патч.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Не добавлять основного пользователя в group input

2 participants