К сожалению, нет, невозможно получить доступ к юнитам, работающим под менеджером юнитов systemd, при работе от root...
Это почти можно сделать, запустив systemctl --user status
от имени пользователя root и установив переменную окружения XDG_RUNTIME_DIR
так, чтобы она указывала на/run/user/
(см. соответствующий код в bus_connect_user_systemd()
), но, к сожалению, этого недостаточно:
# XDG_RUNTIME_DIR=/run/user/1000 systemctl --user status
Failed to connect to bus: Operation not permitted
Проблема в том, что после подключения к диспетчеру пользователей systemd проверяет, соответствует ли запущенный uid systemctl
тому, который владеет сокетом для менеджера (см. соответствующий код вbus_check_peercred()
).
Таким образом, лучше всего просто использовать su
, чтобы стать пользователем и проверить состояние устройства. Кроме того, при использовании su
вам все равно нужно установить XDG_RUNTIME_DIR
, так как в противном случае systemctl
может не найти сокет для менеджера:
# su cytrinox -c 'XDG_RUNTIME_DIR=/run/user/$UID systemctl --user status'
(Или соответствующую команду systemctl status
, которую вы хотите использовать для вашего модуля фрагментов Firefox...)
Владение файлами в /proc/ контролируется флагом «dumpable» внутри ядра Linux, который используется для предотвращения утечки информации из привилегированного процесса непривилегированному пользователю.
Когда процесс получает возможности, он становится привилегированным процессом, и /proc/ теперь принадлежит пользователю root.
Ответ в :Потеря разрешений при добавлении возможностей? а также Как прочитать каталог /proc/