feat(security): works without adding user to input group#23
Conversation
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.
0d8a509 to
5c98fb8
Compare
|
Спасибо за PR. Идея правильная: не давать всем пользовательским процессам доступ к Не мержу в Issue #19 закрыл как перенесённый в этот PR/review. Сам PR оставляю открытым до отдельного теста или до варианта с templated |
|
После дополнительного прохода закрываю PR как не готовый к merge в текущем виде. Причина не в самой идее — идея правильная: уходить от добавления основного пользователя в
Для публичной ветки сейчас оставляю стабильную user-service модель, а security-service переделаем отдельным PR/веткой, скорее всего через |
Fix #19
Описание
Переход с user-level systemd сервиса на system-level с
SupplementaryGroups=input.Проблема
Предыдущая архитектура добавляла основного пользователя в группу
inputдля доступа к/dev/input. Это означало, что любой процесс от пользователя мог читать клавиатуру — потенциальный кейлоггер.Решение
SupplementaryGroups=input— только процесс daemon имеет доступ к/dev/inputinputsystemctl) теперь используютsudo systemctl(system-level)Безопасность
/dev/input/event*доступен только процессу daemon (черезSupplementaryGroups=input)Ограничение
Только один пользователь. У сервиса захардкожен дроп-ин файл с именем полбзователя.
Возможно расширение через шаблонный сервис (
lay-daemon@.service) — тогда каждый пользователь получает свой экземпляр daemon'а, но я решил не ввязываться.